mirror of
https://github.com/usememos/memos.git
synced 2025-10-21 03:36:10 +08:00
66 lines
1.2 KiB
TypeScript
66 lines
1.2 KiB
TypeScript
import i18n, { BackendModule, FallbackLng, FallbackLngObjList } from "i18next";
|
|
import { initReactI18next } from "react-i18next";
|
|
import { findNearestMatchedLanguage } from "./utils/i18n";
|
|
|
|
export const locales = [
|
|
"ar",
|
|
"de",
|
|
"en",
|
|
"en-GB",
|
|
"es",
|
|
"fr",
|
|
"hi",
|
|
"hr",
|
|
"hu",
|
|
"it",
|
|
"ja",
|
|
"ko",
|
|
"nl",
|
|
"pl",
|
|
"pt-BR",
|
|
"ru",
|
|
"sl",
|
|
"sv",
|
|
"tr",
|
|
"uk",
|
|
"vi",
|
|
"zh-Hans",
|
|
"zh-Hant",
|
|
] as const;
|
|
|
|
const fallbacks = {
|
|
"zh-HK": ["zh-Hant", "en"],
|
|
"zh-TW": ["zh-Hant", "en"],
|
|
zh: ["zh-Hans", "en"],
|
|
} as FallbackLngObjList;
|
|
|
|
const LazyImportPlugin: BackendModule = {
|
|
type: "backend",
|
|
init: function () {},
|
|
read: function (language, _, callback) {
|
|
const matchedLanguage = findNearestMatchedLanguage(language);
|
|
import(`./locales/${matchedLanguage}.json`)
|
|
.then((translation: any) => {
|
|
callback(null, translation);
|
|
})
|
|
.catch(() => {
|
|
// Fallback to English.
|
|
});
|
|
},
|
|
};
|
|
|
|
i18n
|
|
.use(LazyImportPlugin)
|
|
.use(initReactI18next)
|
|
.init({
|
|
detection: {
|
|
order: ["navigator"],
|
|
},
|
|
fallbackLng: {
|
|
...fallbacks,
|
|
...{ default: ["en"] },
|
|
} as FallbackLng,
|
|
});
|
|
|
|
export default i18n;
|
|
export type TLocale = (typeof locales)[number];
|