index.ts 1.5 KB

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