mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-30 02:14:43 +08:00
5fd3ec0d6a
* Add Traditional Chinese localization * fix: address zh-TW formatting and token units - Format `zh-TW.json` with Prettier. - Use Traditional Chinese `萬` and `億` units for zh-TW token summaries. - Add usage formatting coverage for Traditional Chinese locale aliases. --------- Co-authored-by: Jason <farion1231@gmail.com>
93 lines
1.9 KiB
TypeScript
93 lines
1.9 KiB
TypeScript
import i18n from "i18next";
|
|
import { initReactI18next } from "react-i18next";
|
|
|
|
import en from "./locales/en.json";
|
|
import ja from "./locales/ja.json";
|
|
import zh from "./locales/zh.json";
|
|
import zhTW from "./locales/zh-TW.json";
|
|
|
|
type Language = "zh" | "zh-TW" | "en" | "ja";
|
|
|
|
const DEFAULT_LANGUAGE: Language = "zh";
|
|
|
|
const getInitialLanguage = (): Language => {
|
|
if (typeof window !== "undefined") {
|
|
try {
|
|
const stored = window.localStorage.getItem("language");
|
|
if (
|
|
stored === "zh" ||
|
|
stored === "zh-TW" ||
|
|
stored === "en" ||
|
|
stored === "ja"
|
|
) {
|
|
return stored;
|
|
}
|
|
} catch (error) {
|
|
console.warn("[i18n] Failed to read stored language preference", error);
|
|
}
|
|
}
|
|
|
|
const navigatorLang =
|
|
typeof navigator !== "undefined"
|
|
? (navigator.language?.toLowerCase() ??
|
|
navigator.languages?.[0]?.toLowerCase())
|
|
: undefined;
|
|
|
|
if (navigatorLang === "zh") {
|
|
return "zh";
|
|
}
|
|
|
|
if (
|
|
navigatorLang?.startsWith("zh-tw") ||
|
|
navigatorLang?.startsWith("zh-hk") ||
|
|
navigatorLang?.startsWith("zh-mo") ||
|
|
navigatorLang?.startsWith("zh-hant")
|
|
) {
|
|
return "zh-TW";
|
|
}
|
|
|
|
if (navigatorLang?.startsWith("zh")) {
|
|
return "zh";
|
|
}
|
|
|
|
if (navigatorLang?.startsWith("ja")) {
|
|
return "ja";
|
|
}
|
|
|
|
if (navigatorLang?.startsWith("en")) {
|
|
return "en";
|
|
}
|
|
|
|
return DEFAULT_LANGUAGE;
|
|
};
|
|
|
|
const resources = {
|
|
en: {
|
|
translation: en,
|
|
},
|
|
ja: {
|
|
translation: ja,
|
|
},
|
|
zh: {
|
|
translation: zh,
|
|
},
|
|
"zh-TW": {
|
|
translation: zhTW,
|
|
},
|
|
};
|
|
|
|
i18n.use(initReactI18next).init({
|
|
resources,
|
|
lng: getInitialLanguage(), // 根据本地存储或系统语言选择默认语言
|
|
fallbackLng: "en", // 如果缺少中文翻译则退回英文
|
|
|
|
interpolation: {
|
|
escapeValue: false, // React 已经默认转义
|
|
},
|
|
|
|
// 开发模式下显示调试信息
|
|
debug: false,
|
|
});
|
|
|
|
export default i18n;
|