1

有効な ICU メッセージをフォーマットしようとした場合

「あなたのオープン チケット数は {n, number} です」

jquery/globalize は例外をスローします: fmt が定義されていません(…)

メッセージは globalize-compiler でエラーなしでコンパイルされますが、実行時に失敗します。

jquery/globalize 1.0.0 & 1.1.1 を使用する
と、次のような問題が発生します: github.com/jquery/globalize/issues/563


jquery/globalize ... globalize/message.js ソース ファイルを変更すると (customFormatters という単語を追加すると)、エラーが削除されます... しかし、サード パーティのソース ファイルを変更することは、プロジェクトでは受け入れられません。

Globalize.messageFormatter =
Globalize.prototype.messageFormatter = function( path, customFormatters ) {
...
formatter = new MessageFormat( cldr.locale, pluralGenerator, customFormatters ).compile( message )




以下の npm パッケージも、メッセージのフォーマットを期待どおりに処理します。 https://www.npmjs.com/package/format-message


(jquery/globalize の Rafael に PM を依頼しましたが、彼はここに質問を投稿するように要求しました)

質問:

  1. 他の誰かがこれに遭遇しましたか?あなたの回避策は何ですか?

  2. ベース番号/日付/単位/などのフォーマッタにjquery/globalizeを使用し、メッセージのフォーマットに「format-message」などの別のライブラリを使用している人はいますか?

  3. これが使用されるプロジェクトは、nodejs およびブラウザー ベース (spa) です。Intl と polyfill に切り替えることは、有効な代替手段になります。(Safari のサポートが必要ですhttp://caniuse.com/#search=intl )

  4. PR を介して「customFormatters」をソースに追加するパフォーマンス コストを評価するテストはありますか。

4

1 に答える 1

0
  1. 代わりに変数置換を使用'Your open ticket count is {n}'してくださいGlobalize.formatMessage('<message>', {n: Globalize.formatNumber(n)})

  2. Globalize を使用すると、数値、日付、相対時間、単位などをそれぞれのフォーマッタを使用してフォーマットし、それを変数置換としてメッセージに渡すことができます。各フォーマッタには独自のオプション セットがあるため、必要に応じて出力をカスタマイズできます。したがって、違いは、メッセージ自体ではなく、コードでフォーマットを定義できることです。これらすべてのフォーマッターとメッセージ フォーマッターに Globalize を使用する大きな利点の 1 つは、globalize-compilerを使用してコードを静的に解析し、非常に効率的なプリコンパイル済みコード (小さく高速なコード) を生成して運用環境で実行できることです。webpack を使用したアプリのデモもご覧ください。

  3. Intl (今日の ecma-402 で定義) は Number および Date フォーマッタのみを定義することに注意してください。メッセージ フォーマッタ、複数形 (まもなく仕様の一部になる予定)、相対フォーマッタなどは定義されていません。

  4. このセクションはまだ非常に大雑把ですが、グローバリゼーションパフォーマンス セクションを必ずお読みください。

PS: https://github.com/jquery/globalize/issues/563を更新しました。ありがとうございます。

于 2016-05-11T01:37:03.297 に答える