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 スタックの経験が豊富で、私たちを助けてくれる人がいることを願っています!