数、日付、複数形、および選択したプレースホルダーを備えたICUメッセージ文字列をフォーマットして、ローカライズされたメッセージを作成します。
このパッケージの目的は、JavaScriptアプリの文字列メッセージを管理し、アプリを使用している人のためにローカライズされた文字列に形成する方法を提供することを目的としています。このパッケージは、ブラウザとnode.jsを介してサーバーで使用できます。
この実装は、ストローマンの提案に基づいていますが、この実装が分岐している場所がいくつかあります。
注:このIntlMessageFormat APIは、ECMA-402と同期するように変更される場合がありますが、このパッケージはSEMVERに続きます。
メッセージは、コンストラクターにStringメッセージ、または事前に分類されたASTオブジェクトとして提供されます。
var msg = new IntlMessageFormat ( message , locales , [ formats ] ) ;文字列messageは解析され、 format()メソッド用に最適化されたコンパイルされたフォームに内部に保存され、ユーザーに表示するフォーマットされた文字列を生成します。
var output = msg . format ( values ) ;非常に一般的な例は、複数ラベルのある数字を持つメッセージをフォーマットすることです。このパッケージを使用すると、人のロケールに対して文字列が適切にフォーマットされていることを確認できます。
var MESSAGES = {
'en-US' : {
NUM_PHOTOS : 'You have {numPhotos, plural, ' +
'=0 {no photos.}' +
'=1 {one photo.}' +
'other {# photos.}}'
} ,
'es-MX' : {
NUM_PHOTOS : 'Usted {numPhotos, plural, ' +
'=0 {no tiene fotos.}' +
'=1 {tiene una foto.}' +
'other {tiene # fotos.}}'
}
} ;
var output ;
var enNumPhotos = new IntlMessageFormat ( MESSAGES [ 'en-US' ] . NUM_PHOTOS , 'en-US' ) ;
output = enNumPhotos . format ( { numPhotos : 1000 } ) ;
console . log ( output ) ; // => "You have 1,000 photos."
var esNumPhotos = new IntlMessageFormat ( MESSAGES [ 'es-MX' ] . NUM_PHOTOS , 'es-MX' ) ;
output = esNumPhotos . format ( { numPhotos : 1000 } ) ;
console . log ( output ) ; // => "Usted tiene 1,000 fotos."このパッケージが使用するメッセージの構文は独自ではありません。実際、プログラミング言語で機能する一般的な標準メッセージ構文であり、プロの翻訳者がよく知っている言語で機能します。このパッケージはICUメッセージの構文を使用し、複数化ルールが定義されているすべてのCLDR言語で機能します。
業界標準:ICUメッセージの構文とCLDRロケールデータ。
複数形、 Select 、およびSelectordinalメッセージ引数をサポートします。
それぞれIntl.NumberFormatとIntl.DateTimeFormatを使用して、メッセージの数値と日付/時間をフォーマットします。
IntlMessageFormatインスタンスのformat()メソッドへの繰り返しの呼び出し用に最適化されています。
カスタム形式のスタイル/オプションの定義をサポートします。
メッセージ構文chars fooエスケープシーケンス"{foo}"サポートします"\{foo\}"
Intl依存関係このパッケージは、 Intlグローバルオブジェクトがランタイムに存在することを前提としています。 Intl 、すべての最新のブラウザー(IE11+)およびノード(完全なICU付き)に存在します。依存しているIntlメソッドは次のとおりです。
Intl.NumberFormat for number formatting(intl.jsを使用してポリフィルできます)Intl.DateTimeFormat (intl.jsを使用してポリフィルできます)Intl.PluralRulesの複数/順序フォーマットのためのプルラル(intl-pluralrulesを使用してポリフィージーできます) < script src =" intl-messageformat/intl-messageformat.min.js " > </ script >単にrequire() :
var IntlMessageFormat = require ( 'intl-messageformat' ) ;注:ノードには完全なICUを含める必要があります
IntlMessageFormatコンストラクターフォーマットへのメッセージを作成するには、 IntlMessageFormatコンストラクターを使用します。コンストラクターは3つのパラメーターを取ります。
メッセージ- {文字列| AST} - フォーマットパターンとして機能する文字列メッセージ(または事前に分類されたAST)。
ロケール- {string | string []} - BCP 47言語タグを備えた文字列、またはそのような文字列の配列。ロケールを提供しない場合、デフォルトのロケールが使用されます。一連のロケールが提供されると、各アイテムとその祖先のロケールがチェックされ、最初のアイテムが登録されたロケールデータが返されます。参照:詳細については、ロケール解像度。
[フォーマット] - {オブジェクト} - フォーマットスタイルのユーザー定義オプションを備えたオプションオブジェクト。
var msg = new IntlMessageFormat ( 'My name is {name}.' , 'en-US' ) ; IntlMessageFormat Intl.NumberFormat.supportedLocalesOf()を使用して、コンストラクターに渡されたlocales値に基づいて使用するロケールデータを決定します。この解像度プロセスの結果はresolvedOptions()プロトタイプメソッドを呼び出すことで決定できます。
resolvedOptions()メソッドこのメソッドは、インスタンス作成中に解決されたオプション値を持つオブジェクトを返します。現在、 localeプロパティのみが含まれています。これが例です:
var msg = new IntlMessageFormat ( '' , 'en-us' ) ;
console . log ( msg . resolvedOptions ( ) . locale ) ; // => "en-US"指定されたロケールがすべての低ケース値である"en-us"であることに注意してください。しかし、それは解決され、 "en-US"に正規化されました。
format(values)メソッドメッセージが作成されたら、メッセージのフォーマットは、インスタンスのformat()メソッドを呼び出し、 valuesのコレクションを渡すことによって実行されます。
var output = msg . format ( { name : "Eric" } ) ;
console . log ( output ) ; // => "My name is Eric."注:インスタンスに構築されたメッセージパターンのすべての引数に対して値を提供する必要があります。
定義カスタム形式のスタイルは、基礎となるフォーマッタに一連のオプションを提供する必要があるのに役立ちます。たとえば、米ドルの数を出力する:
var msg = new IntlMessageFormat ( 'The price is: {price, number, USD}' , 'en-US' , {
number : {
USD : {
style : 'currency' ,
currency : 'USD'
}
}
} ) ;
var output = msg . format ( { price : 100 } ) ;
console . log ( output ) ; // => "The price is: $100.00"この例では、根底にあるIntl.NumberFormatインスタンスに渡されるUSD番号形式のスタイルをオプションとして定義しています。
この例は、ICUメッセージ構文を使用して複数のラベルを持つメッセージを定義する方法を示しています。たとえば、 "You have 10 photos" :
You have {numPhotos, plural,
=0 {no photos.}
=1 {one photo.}
other {# photos.}
}
var MESSAGES = {
photos : '...' , // String from code block above.
...
} ;
var msg = new IntlMessageFormat ( MESSAGES . photos , 'en-US' ) ;
console . log ( msg . format ( { numPhotos : 0 } ) ) ; // => "You have no photos."
console . log ( msg . format ( { numPhotos : 1 } ) ) ; // => "You have one photo."
console . log ( msg . format ( { numPhotos : 1000 } ) ) ; // => "You have 1,000 photos."注: numPhotosが1000の場合、数は正しい数千個のセパレーターでフォーマットされています。
このソフトウェアはYahoo!で無料で使用できますInc. BSDライセンス。ライセンステキストと著作権情報については、ライセンスファイルを参照してください。