如何正确填充工具国际语言环境数据
问题描述:
我有点困惑如何实际填充工具从Intl polyfill某些共同的语言环境数据(CLDR)。如何正确填充工具国际语言环境数据
我了解到目前为止如下(请纠正我,如果我错了这里):
- 现代浏览器附带的语言环境数据本身(不填充工具需要任何)
-
Intl.min
来没有任何语言环境数据 -
Intl.complete
带有从intl/locale-data
捆绑
所有现场数据由于我们只需要支持等等我的语言环境(可以说en
& de
)它会是明智的,只有捆绑Intl.min
,并根据需要动态加载时的CLDR(在应用启动时,或者当用户改变语言)。
如何在需要时动态加载CLDR &如何将它添加到Intl
?
我有aurelia-i18n
& i18next
已经建立,使使用i18next-xhr-backend
仅在需要时,他们载入我们自定义的翻译。我可以以某种方式挂钩此&也加载Intl
polyfill所需的语言环境?
- 如果是这样,我该如何做,以及如何事先检查是否有必要(新浏览器不需要它,它可能已被加载)?
- 我是在假设是正确的,我没有它已被加载,因为它确实(与
IntlPolyfill.__addLocaleData(...);
例如intl/locale-data/jsonp/en.js
开始)这本身后手动添加的语言环境?
答
的intl polyfills repo说明如何通过CDN服务只加载必要的CLDR数据described here
奥里利亚本身需要照顾这里唯一的例外是否填充工具是needed at all是,如果你要发布一个生产捆绑构建,你必须确保文件已经包含在软件包中。根据您的设置/模块加载器,这可能会有所不同。
至于加载额外的语言环境是的,你说得对刚需的文件应该修补的窗口对象提供您额外的翻译。 为了检查哪些是需要的,你可以使用supportedLocalesOf method要么号/日期格式的
所以调用
console.log(Intl.NumberFormat.supportedLocalesOf("de-DE"))
很可能会导致[“去-DE”在您的浏览器,如果它拥有必要的语言环境,否则(你可以试一下在节点)空数组
加载通过脚本标签从CDN前期所有CLDRs是因为这没有选择将静态加载所有页面上开始,不管哪些是实际使用。我正在分发一个捆绑的生产版本,其中包含INTL polyfill(到目前为止没有问题)。我仍然不知道的是:在哪里可以“自己动手”来只在需要时动态加载CLDR数据(语言更改等)? – suamikim
当语言环境发生变化时,Aurelia会触发[自定义事件](https://github.com/aurelia/i18n/blob/master/src/i18n.js#L57)。在那个位置,你可以对缺少的语言环境做一个ajax请求,只要确保这些文件是分发的但不捆绑。如果您确实知道需要这些语言环境,请检查支持的答案supportLocalesOf的方法。 – zewa666