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 リリース ノートまたはデルタには、この情報が多数のカルチャで変更されたことを示唆するものは見つかりません。

XML データ (「グラウンド トゥルース」) では、currencySpacing要素が CLDR 29 と CLDR 30 の両方の main/root.xml でのみ使用されていることがわかります。つまり、XML でこの点に関して大きな変更はないようです。

これは、XML データから JSON データを生成するツールに問題があるのではないかと思われます。このツールはcldr-jsonプロジェクトldml2jsonによって呼び出され、使用されます。cldr-json プロジェクトのバグを除外するために、ツールを自分で構築し、JSON データを自分で生成しました。この生成されたデータには、numbers.json ファイルの「currencySpacing」情報もありませんでした。そのため、cldr-json プロジェクトの問題ではないようです。

正しく理解できれば、これは問題が次のいずれかにあることを意味します。

  • ldml2json ツールにバグがある
  • jquery/globalize は、この情報が常に存在すると仮定するのは正しくありません

後者が当てはまる場合、これは jquery/globalize のバグとして提起されるべきだと思います。前者を調査するには、おそらくソースからデバッグする必要があります。どちらかに時間を費やす前に、次の質問をしたいと思います:他の誰かがこの問題を見ていますか? また、既知の解決策はありますか? CLDR+JSON+Globalize スタックの経験が豊富で、私たちを助けてくれる人がいることを願っています!

4

2 に答える 2

1

最近の CLDR 30.0.2 パッチでこのバグが修正されたため、Globalize の更新は必要ありません。

ところで、より深い調査のために UTS#35 仕様に従ってください :) http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies

于 2016-11-01T13:18:21.760 に答える
1

これは、次の変更が原因でした: http://unicode.org/cldr/trac/changeset/12636/trunk/common/main/root.xml

この変更の前に、アラビア数字システムのルート ロケールの currencySpacing 情報は、他のすべてのロケールによって継承されていました。今はもうありません。

欠落している currencySpacing をどのように処理する必要があるかはわかりませんが、JavaCの両方のドキュメントには、データが null になる可能性があると記載されています。その場合、どちらもハードコーディングされたデフォルトを使用しているようです: 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 に答える