index.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. export type { LocaleType } from "./cn";
  9. export const AllLangs = ["en", "cn", "tw", "es", "it", "tr", "jp"] as const;
  10. type Lang = (typeof AllLangs)[number];
  11. const LANG_KEY = "lang";
  12. function getItem(key: string) {
  13. try {
  14. return localStorage.getItem(key);
  15. } catch {
  16. return null;
  17. }
  18. }
  19. function setItem(key: string, value: string) {
  20. try {
  21. localStorage.setItem(key, value);
  22. } catch {}
  23. }
  24. function getLanguage() {
  25. try {
  26. return navigator.language.toLowerCase();
  27. } catch {
  28. return "cn";
  29. }
  30. }
  31. export function getLang(): Lang {
  32. const savedLang = getItem(LANG_KEY);
  33. if (AllLangs.includes((savedLang ?? "") as Lang)) {
  34. return savedLang as Lang;
  35. }
  36. const lang = getLanguage();
  37. if (lang.includes("zh") || lang.includes("cn")) {
  38. return "cn";
  39. } else if (lang.includes("tw")) {
  40. return "tw";
  41. } else if (lang.includes("es")) {
  42. return "es";
  43. } else if (lang.includes("it")) {
  44. return "it";
  45. } else if (lang.includes("tr")) {
  46. return "tr";
  47. } else if (lang.includes("jp")) {
  48. return "jp";
  49. } else {
  50. return "en";
  51. }
  52. }
  53. export function changeLang(lang: Lang) {
  54. setItem(LANG_KEY, lang);
  55. location.reload();
  56. }
  57. export default { en: EN, cn: CN, tw: TW, es: ES, it: IT, tr: TR, jp: JP }[
  58. getLang()
  59. ];