index.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. export type { LocaleType } from "./cn";
  10. export const AllLangs = [
  11. "en",
  12. "cn",
  13. "tw",
  14. "es",
  15. "it",
  16. "tr",
  17. "jp",
  18. "de",
  19. ] as const;
  20. export type Lang = (typeof AllLangs)[number];
  21. const LANG_KEY = "lang";
  22. const DEFAULT_LANG = "en";
  23. function getItem(key: string) {
  24. try {
  25. return localStorage.getItem(key);
  26. } catch {
  27. return null;
  28. }
  29. }
  30. function setItem(key: string, value: string) {
  31. try {
  32. localStorage.setItem(key, value);
  33. } catch {}
  34. }
  35. function getLanguage() {
  36. try {
  37. return navigator.language.toLowerCase();
  38. } catch {
  39. console.log("[Lang] failed to detect user lang.");
  40. return DEFAULT_LANG;
  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 DEFAULT_LANG;
  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. }[getLang()] as typeof CN;