我们一直在我们的 web 应用程序中使用 jquery/globalizeCLDR 29 中的 JSON format 数据没有任何问题。就在最近,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 开始。 DTD for CLDR 30(以及 CLDR 29 的 CLDR 30 release notes)包括以下行...

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

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

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

这让我们怀疑它是否是用于从 XML 数据生成 JSON 数据的 cldr-json 中的问题。该工具称为 ldml2json,也被 ojit_a 项目使用。为了排除 cldr-json 项目中的 bug,我们自己构建了工具并自己生成了 JSON 数据。然后,生成的数据也缺少 numbers.json 文件中的“currencySpacing”信息。所以这似乎不是 cldr-json 项目的问题。

如果我们理解正确,这意味着问题是:
  • ldml2json 工具有一个 bug
  • jquery/globalize 假设此信息始终存在是不正确的

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

    最佳答案

    这是由以下更改引起的: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

    关于json - 寻虫 : CLDR 30 JSON data no longer has currencySpacing information,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40056378/

    10-11 14:22