3

我们一直在我们的 Web 应用程序中使用jquery/globalize和JSON 格式的CLDR 29数据,没有任何问题。就在最近,Unicode 发布了 CLDR 30(不久之后,版本 30.0.1 进行了一些修复)。

当我们升级到 CLDR 30(.0.1) 数据时,我们的客户端货币格式测试失败,因为对于许多文化,numbers.json 中的“currencySpacing”信息不再存在。例如,假设文化 ar-AE,Globalize 库尝试在路径加载 CLDR 数据...

/main/ar-AE/numbers/currencyFormats-numberSystem-arab/currencySpacing/beforeCurrency

...在最新的 CLDR 30 numbers.json 数据中不存在这种(和许多其他)文化。

我们一直在尝试遍历堆栈以查看导致此问题的原因。我们从 DTD 开始。CLDR 30的DTD (连同 CLDR 29 的 DTD)包括以下行...

<!ELEMENT currencyFormats ( alias | ( default*, currencySpacing*, currencyFormatLength*, unitPattern*, special* ) ) >

...这意味着currencySpacing 是一个可选元素。也就是说,我们在CLDR 30 发行说明Delta中找不到任何表明此信息已针对大量文化进行更改的内容。

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

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

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

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

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

4

2 回答 2

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

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

更新:错误报告拉取请求

于 2016-10-15T15:37:39.087 回答
1

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

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

于 2016-11-01T13:18:21.760 回答