index.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import CN from "./cn";
  2. import EN from "./en";
  3. import TW from "./tw";
  4. import ES from "./es";
  5. export type { LocaleType } from "./cn";
  6. export const AllLangs = ["en", "cn", "tw", "es"] as const;
  7. type Lang = (typeof AllLangs)[number];
  8. const LANG_KEY = "lang";
  9. function getItem(key: string) {
  10. try {
  11. return localStorage.getItem(key);
  12. } catch {
  13. return null;
  14. }
  15. }
  16. function setItem(key: string, value: string) {
  17. try {
  18. localStorage.setItem(key, value);
  19. } catch {}
  20. }
  21. function getLanguage() {
  22. try {
  23. return navigator.language.toLowerCase();
  24. } catch {
  25. return "cn";
  26. }
  27. }
  28. export function getLang(): Lang {
  29. const savedLang = getItem(LANG_KEY);
  30. if (AllLangs.includes((savedLang ?? "") as Lang)) {
  31. return savedLang as Lang;
  32. }
  33. const lang = getLanguage();
  34. if (lang.includes("zh") || lang.includes("cn")) {
  35. return "cn";
  36. } else if (lang.includes("tw")) {
  37. return "tw";
  38. } else if (lang.includes("es")) {
  39. return "es";
  40. } else {
  41. return "en";
  42. }
  43. }
  44. export function changeLang(lang: Lang) {
  45. setItem(LANG_KEY, lang);
  46. location.reload();
  47. }
  48. export default { en: EN, cn: CN, tw: TW, es: ES }[getLang()];