feat: 接入公开币种目录并统一多币种金额与语言初始化处理
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
"use client";
|
||||
|
||||
import i18n from "i18next";
|
||||
import LanguageDetector from "i18next-browser-languagedetector";
|
||||
import { initReactI18next } from "react-i18next";
|
||||
|
||||
import enCommon from "./locales/en/common.json";
|
||||
@@ -60,38 +59,48 @@ export function syncDocumentLanguage(lang: AppLanguage): void {
|
||||
document.documentElement.lang = lang;
|
||||
}
|
||||
|
||||
export function syncPreferredLanguage(): void {
|
||||
if (typeof window === "undefined") return;
|
||||
|
||||
const stored = window.localStorage.getItem("i18nextLng");
|
||||
const preferred = normalizeLanguage(stored ?? window.navigator.language);
|
||||
const current = normalizeLanguage(i18n.resolvedLanguage ?? i18n.language);
|
||||
|
||||
if (preferred !== current) {
|
||||
void i18n.changeLanguage(preferred);
|
||||
}
|
||||
}
|
||||
|
||||
if (!i18n.isInitialized) {
|
||||
void i18n
|
||||
.use(LanguageDetector)
|
||||
.use(initReactI18next)
|
||||
.init({
|
||||
resources,
|
||||
fallbackLng: DEFAULT_LANGUAGE,
|
||||
supportedLngs: ["en", "ne", "zh"],
|
||||
defaultNS: "common",
|
||||
ns: [...namespaces],
|
||||
/** zh-CN → zh,ne-NP → ne,未匹配时用 fallbackLng */
|
||||
load: "languageOnly",
|
||||
void i18n.use(initReactI18next).init({
|
||||
resources,
|
||||
fallbackLng: DEFAULT_LANGUAGE,
|
||||
supportedLngs: ["en", "ne", "zh"],
|
||||
defaultNS: "common",
|
||||
ns: [...namespaces],
|
||||
/** 始终先用默认语言完成 SSR / 首次 hydration,避免首屏文本不一致 */
|
||||
load: "languageOnly",
|
||||
lng: DEFAULT_LANGUAGE,
|
||||
initImmediate: false,
|
||||
|
||||
detection: {
|
||||
order: ["localStorage", "navigator"],
|
||||
caches: ["localStorage"],
|
||||
lookupLocalStorage: "i18nextLng",
|
||||
},
|
||||
interpolation: {
|
||||
escapeValue: false,
|
||||
},
|
||||
|
||||
interpolation: {
|
||||
escapeValue: false,
|
||||
},
|
||||
|
||||
react: {
|
||||
useSuspense: false,
|
||||
},
|
||||
});
|
||||
react: {
|
||||
useSuspense: false,
|
||||
},
|
||||
});
|
||||
|
||||
syncDocumentLanguage(normalizeLanguage(i18n.resolvedLanguage ?? i18n.language));
|
||||
|
||||
i18n.on("languageChanged", (lang) => {
|
||||
syncDocumentLanguage(normalizeLanguage(lang));
|
||||
const next = normalizeLanguage(lang);
|
||||
syncDocumentLanguage(next);
|
||||
|
||||
if (typeof window !== "undefined") {
|
||||
window.localStorage.setItem("i18nextLng", next);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user