【发布时间】:2016-06-14 05:00:31
【问题描述】:
我正在使用 React、i18next 和 i18next-browser-languagedetector 开发一个多语言应用程序。
我通过以下方式初始化 i18next:
i18n
.use(LanguageDetector)
.init({
lng: localStorage.getItem(I18N_LANGUAGE) || "pt",
fallbackLng: "pt",
resources: {
en: stringsEn,
pt: stringsPt
},
detection: {
order: ["localStorage", "navigator"],
lookupQuerystring: "lng",
lookupLocalStorage: I18N_LANGUAGE,
caches: ["localStorage"]
}
});
export default i18n;
我已经实现了一个语言选择器,它只是将localStorage 中的值更改为用户选择的值。
这是正确的做法吗?
我之所以问,是因为即使这可行,我也觉得我通过设置 localStorage.getItem(I18N_LANGUAGE) || "pt" 来“作弊”,而且我没有按应有的方式使用语言检测。
【问题讨论】:
-
我正在尝试解决同样的问题并找到了两个解决方案。首先:您可以将语言环境存储为 url 参数 (:locale\you_url),例如 this。第二个是您的变体 - 将语言环境存储在 localStorage 或 cookie 中。我想和你一样,但 i18next 找不到密钥。请你写一个例子或分享你的代码吗?
-
我们选择在 localStorage 中设置语言环境。
i18next找不到钥匙是什么意思?顺便说一句,我正在使用react-i18next。检查这个:gist.github.com/pteixeira/4a75160ca15e3edf6975 我还有一个语言选择器组件,它在初始化时将 localStorage 条目设置为语言的值,检查默认值或用户选择的内容。 -
谢谢,对我很有帮助。还有一个问题:有没有办法在运行时改变语言?
-
运行时是什么意思?如果您在应用程序运行时询问,在我在上面的评论中提到的那个语言选择器组件中,我添加了一个事件侦听器到一个具有我们支持的语言选项的选择组件中,我们使用
i18n.changeLanguage(ev.target.value);设置语言(i18n来自i18next) 和localStorage.setItem(I18N_LANGUAGE, ev.target.value);。希望它有用:)
标签: javascript reactjs translation i18next