index.ts 1.0 KB

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