jquery / globalize自定义格式化程序问题

时间:2016-05-05 02:51:13

标签: jquery icu jquery-globalize

尝试格式化有效的ICU消息时

  

'您的未结票数是{n,number}'

jquery / globalize抛出异常:fmt未定义(...)

使用globalize-compiler编译消息时没有错误,但在运行时失败。

使用jquery / globalize 1.0.0& 1.1.1
问题类似于:github.com/jquery/globalize/issues/567

更改jquery / globalize ... globalize / message.js源文件(添加单词customFormatters)将删除错误...但是在项目中不接受更改第三方源文件。

Globalize.messageFormatter =
Globalize.prototype.messageFormatter = function( path, customFormatters ) {
...
formatter = new MessageFormat( cldr.locale, pluralGenerator, customFormatters ).compile( message )




下面的npm包也按预期处理消息格式。 https://www.npmjs.com/package/format-message


(我有PM'ed Rafael的jquery / globalize,他要求我在这里发布问题)

问题:

  1. 是否有其他人遇到此问题以及您的解决方法是什么?

  2. 是否有人使用jquery / globalize作为基本编号/日期/单位/ etc格式化程序,而使用其他库如'format-message'进行消息格式化?

  3. 它将用于的项目是nodejs和基于浏览器(spa)。 切换到Intl和polyfill是一种有效的替代方案。 (需要Safari支持http://caniuse.com/#search=intl

  4. 是否有测试来评估通过PR向源添加'customFormatters'的性能成本。

1 个答案:

答案 0 :(得分:0)

  1. 使用变量replacement instead,例如'Your open ticket count is {n}'Globalize.formatMessage('<message>', {n: Globalize.formatNumber(n)})

  2. 使用Globalize,您可以使用各自的格式化程序格式化数字,日期,相对时间,单位等,然后将其作为变量替换传递给消息。每个格式化程序都有自己的选项集,因此您可以根据需要自定义输出 因此,不同之处在于,您可以在代码中定义格式,而不是在消息本身中定义格式。对所有这些格式化程序和消息格式化程序使用Globalize的一大优点是,您可以使用globalize-compiler静态解析代码并生成非常有效的预编译代码(快速< / em>代码)在生产上运行。另请参阅我们的app demo using webpack

  3. 请注意,Intl(由今天的ecma-402定义)仅定义Number和Date格式化程序。它没有定义消息格式化程序,复数(很快将成为规范的一部分),相对格式化程序等。因此,您可能只找到前两个的polyfil。

  4. 此部分仍然很粗糙,但请务必阅读全球化performance section

  5. PS:我已经更新了https://github.com/jquery/globalize/issues/563谢谢。