react-intl - 如何配置 react-intl 以使所有方言区域都回退到其母语?
问题描述
我建立了一个网站,可以很好地在en
和zh
语言环境之间进行翻译,使用选择元素。现在,我想让我的代码根据navigator.language
. 这导致我意识到我的语言环境是en-US
,不是en
。当我将该值应用于 的 locale 属性时<IntlProvider />
,抛出了许多新错误。
Error: [React Intl Error MISSING_TRANSLATION] Missing message: "details.reference" for locale "en-US", using default message as fallback.
UI 看起来仍然很好,因为默认消息是英文的。而且我猜这些错误在生产中被消除了。
但是,同样的问题出现在中文中。如果用户将他们的操作系统/浏览器区域设置为zh-HK
,react-intl 会显示默认消息(英文)而不是zh.json
.
有没有聪明的方法来解决这个问题?我知道我可以在将语言环境的地理部分传递给之前剪掉它<IntlProvider />
,但这似乎比必要的更hacker......
解决方案
我写了一个函数来解决这个问题,但希望能找到更好的解决方案。
const [locale, setLocale] = React.useState(getBrowserLocale());
...
<IntlProvider locale={locale} messages={messages[locale]}>
// @see https://tools.ietf.org/rfc/bcp/bcp47.txt
function getBrowserLocale() {
switch (navigator.language) {
case "zh":
case "zh-Hant":
case "zh-Hans":
case "zh-TW":
case "zh-HK":
case "zh-CN":
return "zh";
// case "zh-CN":
// return "zh-CN";
default:
return "en";
}
}
export default getBrowserLocale;
推荐阅读
- reactjs - Redux initialState 将数据追加到现有键中
- javascript - 我无法从数组中获取环境名称
- reactjs - 基于用户角色的路由
- android - 缩小后PNG图像质量下降
- python - Django Rest Framework 数字类型仍然通过模型验证
- javascript - Animated.Value 的 PropTypes?
- javascript - 如果未填写必填字段,如何防止在提交表单上调用函数?
- gwt - 带有 http 负载均衡器的 GWT 提供了无效的 SID 值
- python - 带有线程 Python 的 HTTP 请求
- amazon-dynamodb - K6 与 DynamoDB