我们一直在web应用程序中使用jquery/全球化,使用JSON格式中的CLDR 29数据,没有任何问题。就在最近,Unicode发布了CLDR 30 (不久之后发布了30.0.1版本,并进行了一些修复)。
当我们升级到CLDR 30(.0.1)数据时,我们的客户端货币格式测试失败了,因为对于许多文化来说,numbers.json中的"currencySpacing“信息已经不复存在。例如,假设区域性ar,Globalize库尝试在路径上加载CLDR数据.
/main/ar-AE/numbers/currencyFormats-numberSystem-arab/currencySpacing/beforeCurrency
...which不存在于最新的CLDR 30 numbers.json数据中,用于这种(和许多其他)区域性。
我们一直在试图遍历堆栈,看看是什么导致了这个问题。我们从DTD开始。CLDR 30的DTD (与CLDR 29一起)包括了.
<!ELEMENT currencyFormats ( alias | ( default*, currencySpacing*, currencyFormatLength*, unitPattern*, special* ) ) >...which意味着currencySpacing是一个可选元素。尽管如此,我们在CLDR 30发行说明或德尔塔中找不到任何信息表明这些信息对大量的文化都有影响。
在XML数据(“基本事实”)中,我们看到currencySpacing元素仅在CLDR 29和CLDR 30中的main/root.xml中使用,也就是说,在XML中这方面显然没有明显的变化。
这让我们怀疑这是否是用于从工具数据生成JSON数据的中的问题。该工具称为ldml2json,克拉德-杰森项目也使用该工具。为了排除cldr-json项目中的错误,我们自己构建了这个工具并自己生成了JSON数据。然后,生成的数据也丢失了currencySpacing文件中的“numbers.json”信息。因此,这似乎不是cldr-json项目的问题。
如果我们正确理解,这意味着问题要么是:
如果后者是正确的,那么我想这应该作为jquery/globalize bug引发。调查前者可能需要我们从源中调试。在我们投入时间之前,我们想问一问:是其他人看到这个问题的人吗?有什么已知的解决方案吗?我们希望有一个在CLDR+JSON+Globalize堆栈中更有经验的人能够帮助我们解决这个问题!
发布于 2016-10-15 15:37:39
这是由以下更改引起的:http://unicode.org/cldr/trac/changeset/12636/trunk/common/main/root.xml
在进行此更改之前,所有其他区域设置继承了阿拉伯数字系统的根区域设置的currencySpacing信息。现在它已经不在那里了。
我不知道该如何处理丢失的currencySpacing,但是java和C文档都声明数据可以为null。在这种情况下,两者似乎都使用了硬编码的默认值:http://bugs.icu-project.org/trac/browser/icu4j/trunk/main/classes/core/src/com/ibm/icu/impl/CurrencyData.java#L86。
所以这可能是全球化中的一个缺陷。
发布于 2016-11-01 13:18:21
最近的CLDR30.0.2补丁修复了这个错误,因此不需要对Globalize进行任何更新。
顺便说一句,遵循UTS#35规范进行更深入的研究:) http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies
https://stackoverflow.com/questions/40056378
复制相似问题