Bug hunt:CLDR 30 JSON数据不再具有currencySpacing信息

时间:2016-10-15 07:33:09

标签: json unicode localization jquery-globalize cldr

我们一直在我们的网络应用程序中使用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 notesDelta中找不到任何表明此信息已针对大量文化进行更改的内容。

在XML数据(“基本事实”)中,我们看到currencySpacing元素仅在CLDR 29和CLDR 30中的main / root.xml中使用,即在这方面显然没有重大变化XML。

这使我们想知道tool中是否存在用于从XML数据生成JSON数据的问题。该工具名为ldml2json,也由cldr-json项目使用。为了排除cldr-json项目中的错误,我们自己构建了该工具并自己生成了JSON数据。然后,生成的数据也缺少numbers.json文件中的“currencySpacing”信息。所以它似乎不是cldr-json项目的问题。

如果我们理解正确,这意味着问题是:

  • ldml2json工具有一个错误
  • jquery / globalize不正确,假设此信息始终存在

如果后者是真的,那么我想这应该作为jquery / globalize错误引发。调查前者需要我们从源头调试大概。在我们投入时间之前,我们想问:是否有其他人看到此问题,是否有任何已知的解决方案?我们希望有人在CLDR中有更多经验+ JSON + Globalize堆栈可以帮助我们!

2 个答案:

答案 0 :(得分:1)

这是由此更改引起的:http://unicode.org/cldr/trac/changeset/12636/trunk/common/main/root.xml

在此更改之前,所有其他区域设置都继承了阿拉伯数字系统的根区域设置的currencySpacing信息。现在已经不在了。

我不确定应该如何处理丢失的currencySpacing,但javaC文档都声明数据可以为空。 在这种情况下,两者似乎都使用硬编码默认值:http://bugs.icu-project.org/trac/browser/icu4j/trunk/main/classes/core/src/com/ibm/icu/impl/CurrencyData.java#L86

所以这可能是全球化中的一个错误。

更新:Bug reportpull request

答案 1 :(得分:1)

最近的CLDR 30.0.2修补程序修复了此错误,因此Globalize不需要更新。

顺便说一下,按照UTS#35规范进行深入调查:) http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies