如何正确填充工具国际语言环境数据

问题描述:

我有点困惑如何实际填充工具从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”在您的浏览器,如果它拥有必要的语言环境,否则(你可以试一下在节点)空数组

+0

加载通过脚本标签从CDN前期所有CLDRs是因为这没有选择将静态加载所有页面上开始,不管哪些是实际使用。我正在分发一个捆绑的生产版本,其中包含INTL polyfill(到目前为止没有问题)。我仍然不知道的是:在哪里可以“自己动手”来只在需要时动态加载CLDR数据(语言更改等)? – suamikim

+0

当语言环境发生变化时,Aurelia会触发[自定义事件](https://github.com/aurelia/i18n/blob/master/src/i18n.js#L57)。在那个位置,你可以对缺少的语言环境做一个ajax请求,只要确保这些文件是分发的但不捆绑。如果您确实知道需要这些语言环境,请检查支持的答案supportLocalesOf的方法。 – zewa666