mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-05 19:40:30 +08:00
feat(i18n): storage lng
This commit is contained in:
@@ -19,6 +19,8 @@ declare module 'react-i18next' {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const STORAGE_KEY = 'i18n_lng';
|
||||||
|
|
||||||
const LOCALES = [
|
const LOCALES = [
|
||||||
{ value: 'en', text: 'English', res: en_US },
|
{ value: 'en', text: 'English', res: en_US },
|
||||||
{ value: 'zh', text: '简体中文', res: zh_CN },
|
{ value: 'zh', text: '简体中文', res: zh_CN },
|
||||||
@@ -29,11 +31,26 @@ const resources = LOCALES.reduce<Resource>(
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const fallbackLng = LOCALES[0].value;
|
||||||
|
const standardizeLocale = (language: string) => {
|
||||||
|
if (LOCALES.find(locale => locale.value === language)) return language;
|
||||||
|
if (
|
||||||
|
LOCALES.find(
|
||||||
|
locale => locale.value === language.slice(0, 2).toLowerCase()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return language;
|
||||||
|
return fallbackLng;
|
||||||
|
};
|
||||||
|
|
||||||
|
const language = standardizeLocale(
|
||||||
|
localStorage.getItem(STORAGE_KEY) ?? navigator.language
|
||||||
|
);
|
||||||
|
|
||||||
const i18n = i18next.createInstance();
|
const i18n = i18next.createInstance();
|
||||||
i18n.use(initReactI18next).init({
|
i18n.use(initReactI18next).init({
|
||||||
// TODO auto detect
|
lng: language,
|
||||||
lng: LOCALES[0].value,
|
fallbackLng,
|
||||||
fallbackLng: LOCALES[0].value,
|
|
||||||
debug: process.env['NODE_ENV'] === 'development',
|
debug: process.env['NODE_ENV'] === 'development',
|
||||||
|
|
||||||
resources,
|
resources,
|
||||||
@@ -42,6 +59,10 @@ i18n.use(initReactI18next).init({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
i18n.on('languageChanged', lng => {
|
||||||
|
localStorage.setItem(STORAGE_KEY, lng);
|
||||||
|
});
|
||||||
|
|
||||||
const I18nProvider = I18nextProvider;
|
const I18nProvider = I18nextProvider;
|
||||||
|
|
||||||
export { i18n, useTranslation, I18nProvider, LOCALES };
|
export { i18n, useTranslation, I18nProvider, LOCALES };
|
||||||
|
|||||||
Reference in New Issue
Block a user