index.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import CN from "./cn";
  2. import EN from "./en";
  3. import TW from "./tw";
  4. import ES from "./es";
  5. import IT from "./it";
  6. import TR from "./tr";
  7. import JP from "./jp";
  8. import DE from "./de";
  9. import CS from "./cs";
  10. export type { LocaleType } from "./cn";
  11. export const AllLangs = [
  12. "en",
  13. "cn",
  14. "tw",
  15. "es",
  16. "it",
  17. "tr",
  18. "jp",
  19. "de",
  20. "cs",
  21. ] as const;
  22. type Lang = (typeof AllLangs)[number];
  23. const LANG_KEY = "lang";
  24. function getItem(key: string) {
  25. try {
  26. return localStorage.getItem(key);
  27. } catch {
  28. return null;
  29. }
  30. }
  31. function setItem(key: string, value: string) {
  32. try {
  33. localStorage.setItem(key, value);
  34. } catch {}
  35. }
  36. function getLanguage() {
  37. try {
  38. return navigator.language.toLowerCase();
  39. } catch {
  40. return "cn";
  41. }
  42. }
  43. export function getLang(): Lang {
  44. const savedLang = getItem(LANG_KEY);
  45. if (AllLangs.includes((savedLang ?? "") as Lang)) {
  46. return savedLang as Lang;
  47. }
  48. const lang = getLanguage();
  49. for (const option of AllLangs) {
  50. if (lang.includes(option)) {
  51. return option;
  52. }
  53. }
  54. return "en";
  55. }
  56. export function changeLang(lang: Lang) {
  57. setItem(LANG_KEY, lang);
  58. location.reload();
  59. }
  60. export default {
  61. en: EN,
  62. cn: CN,
  63. tw: TW,
  64. es: ES,
  65. it: IT,
  66. tr: TR,
  67. jp: JP,
  68. de: DE,
  69. cs: CS,
  70. }[getLang()] as typeof CN;