Files
clash-proxy/src/services/i18n.ts
Tunglies e414b49879 Refactor imports across multiple components for consistency and clarity
- Reorganized import statements in various components to ensure consistent ordering and grouping.
- Removed unnecessary imports and added missing ones where applicable.
- Improved readability and maintainability of the codebase by standardizing import styles.
2025-09-19 00:01:04 +08:00

62 lines
1.3 KiB
TypeScript

import i18n from "i18next";
import { initReactI18next } from "react-i18next";
export const supportedLanguages = [
"en",
"ru",
"zh",
"fa",
"tt",
"id",
"ar",
"ko",
"tr",
"de",
"es",
"jp",
"zhtw",
];
export const languages: Record<string, any> = supportedLanguages.reduce(
(acc, lang) => {
acc[lang] = {};
return acc;
},
{} as Record<string, any>,
);
export const loadLanguage = async (language: string) => {
try {
const module = await import(`@/locales/${language}.json`);
return module.default;
} catch (error) {
console.warn(
`Failed to load language ${language}, fallback to zh, ${error}`,
);
const fallback = await import("@/locales/zh.json");
return fallback.default;
}
};
i18n.use(initReactI18next).init({
resources: {},
lng: "zh",
fallbackLng: "zh",
interpolation: {
escapeValue: false,
},
});
export const changeLanguage = async (language: string) => {
if (!i18n.hasResourceBundle(language, "translation")) {
const resources = await loadLanguage(language);
i18n.addResourceBundle(language, "translation", resources);
}
await i18n.changeLanguage(language);
};
export const initializeLanguage = async (initialLanguage: string = "zh") => {
await changeLanguage(initialLanguage);
};