我们一直在我们的网络应用程序中使用jquery/globalize CLDR 29数据JSON format,没有任何问题。就在最近,Unicode发布了CLDR 30(不久之后,版本30.0.1带有一些修复)。
当我们升级到CLDR 30(.0.1)数据时,我们的客户端货币格式化测试失败,因为对于许多文化来说,numbers.json中的“currencySpacing”信息不再存在。例如,假设文化ar-AE,Globalize库尝试在路径...
加载CLDR数据/主/ AR-AE /数字/ currencyFormats-numberSystem阿拉伯/ currencySpacing / beforeCurrency
...这个(以及许多其他)文化的最新CLDR 30 numbers.json数据中不存在。
我们一直试图遍历堆栈以查看导致此问题的原因。我们从DTD开始。 DTD for CLDR 30(以及CLDR 29的内容)包括行......
<!ELEMENT currencyFormats ( alias | ( default*, currencySpacing*, currencyFormatLength*, unitPattern*, special* ) ) >
...这意味着currencySpacing是一个可选元素。也就是说,我们在CLDR 30 release notes或Delta中找不到任何表明此信息已针对大量文化进行更改的内容。
在XML数据(“基本事实”)中,我们看到currencySpacing
元素仅在CLDR 29和CLDR 30中的main / root.xml中使用,即在这方面显然没有重大变化XML。
这使我们想知道tool中是否存在用于从XML数据生成JSON数据的问题。该工具名为ldml2json
,也由cldr-json项目使用。为了排除cldr-json项目中的错误,我们自己构建了该工具并自己生成了JSON数据。然后,生成的数据也缺少numbers.json文件中的“currencySpacing”信息。所以它似乎不是cldr-json项目的问题。
如果我们理解正确,这意味着问题是:
如果后者是真的,那么我想这应该作为jquery / globalize错误引发。调查前者需要我们从源头调试大概。在我们投入时间之前,我们想问:是否有其他人看到此问题,是否有任何已知的解决方案?我们希望有人在CLDR中有更多经验+ JSON + Globalize堆栈可以帮助我们!
答案 0 :(得分:1)
这是由此更改引起的:http://unicode.org/cldr/trac/changeset/12636/trunk/common/main/root.xml
在此更改之前,所有其他区域设置都继承了阿拉伯数字系统的根区域设置的currencySpacing信息。现在已经不在了。
我不确定应该如何处理丢失的currencySpacing,但java和C文档都声明数据可以为空。 在这种情况下,两者似乎都使用硬编码默认值:http://bugs.icu-project.org/trac/browser/icu4j/trunk/main/classes/core/src/com/ibm/icu/impl/CurrencyData.java#L86
所以这可能是全球化中的一个错误。
答案 1 :(得分:1)
最近的CLDR 30.0.2修补程序修复了此错误,因此Globalize不需要更新。
顺便说一下,按照UTS#35规范进行深入调查:) http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies