index.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. type Lang = (typeof AllLangs)[number];
  21. const LANG_KEY = "lang";
  22. function getItem(key: string) {
  23. try {
  24. return localStorage.getItem(key);
  25. } catch {
  26. return null;
  27. }
  28. }
  29. function setItem(key: string, value: string) {
  30. try {
  31. localStorage.setItem(key, value);
  32. } catch {}
  33. }
  34. function getLanguage() {
  35. try {
  36. return navigator.language.toLowerCase();
  37. } catch {
  38. return "cn";
  39. }
  40. }
  41. export function getLang(): Lang {
  42. const savedLang = getItem(LANG_KEY);
  43. if (AllLangs.includes((savedLang ?? "") as Lang)) {
  44. return savedLang as Lang;
  45. }
  46. const lang = getLanguage();
  47. if (lang.includes("zh") || lang.includes("cn")) {
  48. return "cn";
  49. } else if (lang.includes("tw")) {
  50. return "tw";
  51. } else if (lang.includes("es")) {
  52. return "es";
  53. } else if (lang.includes("it")) {
  54. return "it";
  55. } else if (lang.includes("tr")) {
  56. return "tr";
  57. } else if (lang.includes("jp")) {
  58. return "jp";
  59. } else if (lang.includes("de")) {
  60. return "de";
  61. } else {
  62. return "en";
  63. }
  64. }
  65. export function changeLang(lang: Lang) {
  66. setItem(LANG_KEY, lang);
  67. location.reload();
  68. }
  69. export default {
  70. en: EN,
  71. cn: CN,
  72. tw: TW,
  73. es: ES,
  74. it: IT,
  75. tr: TR,
  76. jp: JP,
  77. de: DE,
  78. }[getLang()];