我们一直在我们的 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 堆栈方面更有经验,可以帮助我们!