【发布时间】:2021-01-27 14:45:24
【问题描述】:
我的应用中有两个使用 i18n 翻译器的翻译,我尝试设置默认语言但没有成功。
首选语言(默认语言)将在注册时设置并来自数据库。
我在哪里可以创建某种逻辑来告诉 i18n 来自后端的语言是什么?
该值将显示如下:
const defaultLang = currentUser.data.laiso //this will output a string eg. 'en'
i18n 配置文件如下所示:
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import Backend from 'i18next-http-backend';
import LanguageDetector from 'i18next-browser-languagedetector';
const Languages = ['en', 'de'];
i18n
.use(Backend)
.use(LanguageDetector)
.use(initReactI18next)
.init({
fallbackLng: 'en',
debug: true,
whitelist: Languages,
interpolation: {
escapeValue: false
}
});
export default i18n;
应该写在.use(Backend) 下?
这是第一次使用 i18n,所以任何提示将不胜感激。
这是我需要翻译的组件。在其中,我尝试根据首选语言设置i18n.languages 的索引,但这不起作用:
import React from 'react'
import { useTranslation } from 'react-i18next';
export default function Dashboard() {
//the logged user
const currentUser = AuthService.getCurrentUser();
//value from database
const defaultLang = currentUser.data.laiso //this will output a string eg. 'en'
//translation
const { t, i18n } = useTranslation();
function handleClick(lang) {
i18n.changeLanguage(lang);
}
const current = i18n.languages[defaultLang === 'en' ? 0 : 1]
return (
<>
<div className={styles.languageSelector}>
<a
onClick={ () => handleClick('en') }
style={{ fontWeight: current === "en" ? 800 : 400}}
>
EN
</a>
<a
onClick={ () => handleClick('de') }
style={{ fontWeight: current === "de" ? 800 : 400}}
>
DE
</a>
</div>
<div>{t('translated.stuff')}</div>
</>
)
}
【问题讨论】:
-
您可能需要实现自定义语言检测器:i18next.com/misc/creating-own-plugins.html#languagedetector
标签: javascript reactjs internationalization