返回 JoyAI-Echo
index.ts
1 import i18n from "i18next";
2 import { initReactI18next } from "react-i18next";
3
4 import {
5 applyDocumentLocale,
6 defaultLocale,
7 fallbackLocale,
8 LOCALE_STORAGE_KEY,
9 normalizeLocale,
10 persistLocale,
11 resolveInitialLocale,
12 type SupportedLocale,
13 } from "./config";
14
15 import enCommon from "./locales/en/common.json";
16 import zhCNCommon from "./locales/zh-CN/common.json";
17 import zhTWCommon from "./locales/zh-TW/common.json";
18 import frCommon from "./locales/fr/common.json";
19 import jaCommon from "./locales/ja/common.json";
20 import koCommon from "./locales/ko/common.json";
21 import esCommon from "./locales/es/common.json";
22 import viCommon from "./locales/vi/common.json";
23 import idCommon from "./locales/id/common.json";
24
25 export const resources = {
26 en: { common: enCommon },
27 "zh-CN": { common: zhCNCommon },
28 "zh-TW": { common: zhTWCommon },
29 fr: { common: frCommon },
30 ja: { common: jaCommon },
31 ko: { common: koCommon },
32 es: { common: esCommon },
33 vi: { common: viCommon },
34 id: { common: idCommon },
35 } as const;
36
37 export function currentLocale(): SupportedLocale {
38 return normalizeLocale(i18n.resolvedLanguage ?? i18n.language ?? defaultLocale);
39 }
40
41 export async function setAppLanguage(locale: SupportedLocale): Promise<void> {
42 await i18n.changeLanguage(locale);
43 }
44
45 if (!i18n.isInitialized) {
46 void i18n
47 .use(initReactI18next)
48 .init({
49 resources,
50 lng: resolveInitialLocale(),
51 fallbackLng: fallbackLocale,
52 defaultNS: "common",
53 ns: ["common"],
54 interpolation: {
55 escapeValue: false,
56 },
57 returnNull: false,
58 supportedLngs: Object.keys(resources),
59 });
60 }
61
62 const syncLocaleSideEffects = (language: string) => {
63 const locale = normalizeLocale(language);
64 applyDocumentLocale(locale);
65 persistLocale(locale);
66 };
67
68 syncLocaleSideEffects(currentLocale());
69 i18n.on("languageChanged", syncLocaleSideEffects);
70
71 export { LOCALE_STORAGE_KEY };
72 export default i18n;
73
73 lines TYPESCRIPT