我正在尝试使用i18nextBrowserLanguageDetector检测用户的浏览器语言设置,如果我们支持他们的首选语言,则将其重定向到翻译的页面。下面的代码的第一部分似乎工作正常,并将正确地将用户的语言首选项缓存在cookie中。
import i18next from 'i18next';
import LngDetector from 'i18next-browser-languagedetector';
i18next
.use(LngDetector)
.init({
detection: {
// order and from where user language should be detected
order: ['cookie', 'navigator', 'htmlTag', 'path'],
// keys or params to lookup language from
lookupCookie: LANG_COOKIE,
lookupFromPathIndex: 0,
// cache user language on
caches: ['cookie']
}
});
但是,我遇到的问题是我想根据用户的语言设置来执行某项操作,但是好像i18next异步运行其检测代码,但没有提供我可以看到的任何回调。问题的部分原因在于他们的文档非常苗条。我要做的是在文档上添加一些代码,如下所示:
document.addEventListener('DOMContentLoaded', () => {
const langPref = Cookies(LANG_COOKIE);
if (!!langPref && SUPPORTED_LANGS.includes(langPref) && langPref !== currentLocale())
window.location.href = `${location.origin}/${langPref}${location.pathname}`;
});
但是,在页面完成加载时,永远不会设置语言cookie。我可以添加一个setTimeout / Interval,但这有点笨拙且效率低下。
答案 0 :(得分:1)
使用方法:
android.support.design.widget.BottomNavigationView
还使用白名单选项,因此lng始终是您支持的内容;)