尝试格式化有效的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,他要求我在这里发布问题)
问题:
是否有其他人遇到此问题以及您的解决方法是什么?
是否有人使用jquery / globalize作为基本编号/日期/单位/ etc格式化程序,而使用其他库如'format-message'进行消息格式化?
它将用于的项目是nodejs和基于浏览器(spa)。 切换到Intl和polyfill是一种有效的替代方案。 (需要Safari支持http://caniuse.com/#search=intl)
是否有测试来评估通过PR向源添加'customFormatters'的性能成本。
答案 0 :(得分:0)
使用变量replacement instead,例如'Your open ticket count is {n}'
和Globalize.formatMessage('<message>', {n: Globalize.formatNumber(n)})
。
使用Globalize,您可以使用各自的格式化程序格式化数字,日期,相对时间,单位等,然后将其作为变量替换传递给消息。每个格式化程序都有自己的选项集,因此您可以根据需要自定义输出 因此,不同之处在于,您可以在代码中定义格式,而不是在消息本身中定义格式。对所有这些格式化程序和消息格式化程序使用Globalize的一大优点是,您可以使用globalize-compiler静态解析代码并生成非常有效的预编译代码(小和快速< / em>代码)在生产上运行。另请参阅我们的app demo using webpack。
请注意,Intl(由今天的ecma-402定义)仅定义Number和Date格式化程序。它没有定义消息格式化程序,复数(很快将成为规范的一部分),相对格式化程序等。因此,您可能只找到前两个的polyfil。
此部分仍然很粗糙,但请务必阅读全球化performance section。
PS:我已经更新了https://github.com/jquery/globalize/issues/563谢谢。