Intl オブジェクトは、 ECMAScript の国際化 API の名前空間で、言語に依存した文字列の比較、数値フォーマット、日付フォーマットを提供します。 Intl オブジェクトは、いくつかのコンストラクターに加え、国際化コンストラクターや他の言語に関する関数に共通する機能へのアクセスを提供します。
プロパティ
Intl.Collator- 言語に依存した文字列の比較を可能にするオブジェクトである collator のためのコンストラクター。
Intl.DateTimeFormat- 言語に依存した日時の書式化を可能にするオブジェクトのためのコンストラクター。
Intl.ListFormat- 言語に依存したリストの書式化を可能にするオブジェクトのためのコンストラクター。
Intl.Locale- Unicode ロケール識別子を表すオブジェクトのためのコンストラクター。
Intl.NumberFormat- 言語に依存した数値フォーマットを可能にするオブジェクトのためのコンストラクター。
Intl.PluralRules- 複数形を意識した書式化や複数形の言語規則を可能にするオブジェクトのためのコンストラクター。
Intl.RelativeTimeFormat- 言語を意識した相対時刻の書式化を可能にするオブジェクトのためのコンストラクター。
メソッド
Intl.getCanonicalLocales()- 正規のロケール名を返すメソッド。
ロケールの識別とネゴシエーション
国際化コンストラクターや他のコンストラクターの言語を意識したメソッド (関連情報に記載) は、ロケールを識別して実際に使用するものを決定するために共通のパターンを使用しています。これらはすべて、 locales と options の引数を受け取り、 options.localeMatcher プロパティで指定したアルゴリズムを使用して 要求されたロケールと対応しているロケールとのネゴシエーションを行います。
locales 引数
locales 引数は、 BCP 47 言語タグを保持している文字列か、そのような言語タグの配列でなければなりません。 locales 引数が与えられていなかったり、 undefined であったりした場合は、実行時の既定のロケールが使用されます。
BCP 47 言語タグは、言語と、少なくとも主たる言語コードを含んでいます。ほとんどのよくある形式では、すべてハイフンで区切られたサブタグを、言語コード、文字体系コード、国または地域コードの順で含んでいます。タグは大文字小文字を区別しませんが、文字体系コードでは先頭が大文字で残りは小文字、国または地域コードでは大文字、その他はすべて小文字が推奨されています。
例:
"hi": ヒンディー語 (主たる言語)。"de-AT": オーストリアで使用されているドイツ語 (主たる言語と国コード)。"zh-Hans-CN": 中国で使用されている簡体字で書かれる中国語 (主たる言語と文字体系と国コード)。
言語、文字体系、国 (地域)、 (まれに使用される) 変化形を識別する BCP 47 言語タグのサブタグは IANA Language Subtag Registry で調べられます。
BCP 47 はまた、拡張を認めており、そのうちの一つ "u" (Unicode) 拡張は、 JavaScript の国際化機能にとって重要です。それは、Collator, NumberFormat, DateTimeFormat オブジェクトのロケール固有の動作のカスタマイズを要求するために使用することができます。
"de-DE-u-co-phonebk": ドイツ語のソート順の電話帳変化形を使用します。このソート順では、ウムラウト付きの母音を、 ä → ae, ö → oe, ü → ue のように、ウムラウトの付かない母音二文字に展開したものと見なした順で並べ替えします。"th-TH-u-nu-thai": 数値書式で、タイの数字 (๐, ๑, ๒, ๓, ๔, ๕, ๖, ๗, ๘, ๙) を使用します。"ja-JP-u-ca-japanese": 日時書式で和暦を使用します。すなわち、2013年は平成25年として表現されます。"en-GB-u-ca-islamic": イギリス英語でイスラム暦 (Hijri) を使用します。グレゴリオ暦で2017年10月14日は、 Hijri 暦で 24 Muharram, 1439 です。
BCP 47 拡張タグは Unicode CLDR Project にあります。
ロケールネゴシエーション
locales 引数は、すべての Unicode 拡張を除去した後、アプリケーションからの優先順位付き要求として解釈されます。ランタイムは、利用可能なローケルと比較し、利用可能なロケールのうち最適なものを選びます。マッチングアルゴリズムは二種類あります。 "lookup" マッチャーは、BCP 47 で指定された Lookup アルゴリズムに従います。 "best fit" マッチャーでは、ランタイムが少なくとも、あるいは場合によっては、 Lookup アルゴリズムの結果よりもリクエストに適合したロケールを提供します。アプリケーションが locales 引数を提供しなかった場合や、リクエストに一致するロケールをランタイムが持っていなかった場合は、ランタイムの既定のロケールが使用されます。マッチャーは、 options 引数のプロパティを使って選択することができます (後述)。
ネゴシエーションにより選択された言語タグが Unicode 拡張の部分文字列を持っているとき、その拡張はここで、構築されたオブジェクトや関数の振る舞いをカスタマイズするために使われます。それぞれのコンストラクターや関数は、 Unicode 拡張用のキーのごく一部分のみ対応しており、また、対応する値は、多くの場合言語タグに依存します。例えば、 "co" キー (コレクション)は、 Collator だけが対応しており、そのキーに対する "phonebk" の値はドイツ語だけが対応しています。
options 引数
options 引数は、コンストラクターや関数ごとに異なるプロパティをもつオブジェクトである必要があります。 options 引数が与えられなかった場合、または、未定義の場合、すべてのプロパティに対して既定値が使用されます。
言語を意識するすべてのコンストラクターや関数が対応しているプロパティが一つあります。 localeMatcher プロパティで、この値は "lookup" または "best fit" の文字列である必要があり、上記のとけーるマッチングアルゴリズムのうちから一つを選択します。
仕様書
| 仕様書 |
|---|
| ECMAScript Internationalization API (ECMA-402) Intl の定義 |
ブラウザーの互換性
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Intl | Chrome 完全対応 24 | Edge 完全対応 12 | Firefox 完全対応 29 | IE 完全対応 11 | Opera 完全対応 15 | Safari 完全対応 10 | WebView Android 完全対応 4.4 | Chrome Android 完全対応 25 | Firefox Android 完全対応 56 | Opera Android 完全対応 14 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 1.5 | nodejs 完全対応 あり |
Collator | Chrome 完全対応 24 | Edge 完全対応 12 | Firefox 完全対応 29 | IE 完全対応 11 | Opera 完全対応 15 | Safari 完全対応 10 | WebView Android 完全対応 ≤37 | Chrome Android 完全対応 25 | Firefox Android 完全対応 56 | Opera Android 完全対応 14 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 1.5 | nodejs ? |
DateTimeFormat | Chrome 完全対応 24 | Edge 完全対応 12 | Firefox 完全対応 29 | IE 完全対応 11 | Opera 完全対応 15 | Safari 完全対応 10 | WebView Android 完全対応 4.4 | Chrome Android 完全対応 25 | Firefox Android 完全対応 56 | Opera Android 完全対応 14 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 1.5 | nodejs 完全対応 あり |
getCanonicalLocales | Chrome 完全対応 54 | Edge 完全対応 16 | Firefox 完全対応 48 | IE 未対応 なし | Opera 未対応 なし | Safari 完全対応 11 | WebView Android 未対応 なし | Chrome Android 未対応 なし | Firefox Android 完全対応 56 | Opera Android 未対応 なし | Safari iOS 完全対応 11 | Samsung Internet Android 未対応 なし | nodejs 未対応 なし |
ListFormat | Chrome 完全対応 72 | Edge 未対応 なし | Firefox 未対応 なし | IE 未対応 なし | Opera 完全対応 60 | Safari 未対応 なし | WebView Android 完全対応 72 | Chrome Android 完全対応 72 | Firefox Android 未対応 なし | Opera Android 完全対応 51 | Safari iOS 未対応 なし | Samsung Internet Android 未対応 なし | nodejs 未対応 なし |
Locale | Chrome 完全対応 74 | Edge 完全対応 79 | Firefox 完全対応 75 | IE 未対応 なし | Opera 完全対応 62 | Safari 未対応 なし | WebView Android 完全対応 74 | Chrome Android 完全対応 74 | Firefox Android 未対応 なし | Opera Android 完全対応 53 | Safari iOS 未対応 なし | Samsung Internet Android 完全対応 11.0 | nodejs 未対応 なし |
NumberFormat | Chrome 完全対応 24 | Edge 完全対応 12 | Firefox 完全対応 29 | IE 完全対応 11 | Opera 完全対応 15 | Safari 完全対応 10 | WebView Android 完全対応 ≤37 | Chrome Android 完全対応 26 | Firefox Android 完全対応 56 | Opera Android 完全対応 14 | Safari iOS 完全対応 10 | Samsung Internet Android 完全対応 1.5 | nodejs ? |
PluralRules | Chrome 完全対応 63 | Edge 完全対応 18 | Firefox 完全対応 58 | IE 未対応 なし | Opera 完全対応 50 | Safari 未対応 なし | WebView Android 完全対応 63 | Chrome Android 完全対応 63 | Firefox Android 完全対応 58 | Opera Android 完全対応 46 | Safari iOS 未対応 なし | Samsung Internet Android 完全対応 8.0 | nodejs 完全対応 10.0.0 |
RelativeTimeFormat | Chrome 完全対応 71 | Edge 未対応 なし | Firefox 完全対応 65 | IE 未対応 なし | Opera 完全対応 58 | Safari 未対応 なし | WebView Android 完全対応 71 | Chrome Android 完全対応 71 | Firefox Android 完全対応 65 | Opera Android 完全対応 50 | Safari iOS 未対応 なし | Samsung Internet Android 完全対応 10.0 | nodejs 完全対応 12.0.0 |
凡例
- 完全対応
- 完全対応
- 未対応
- 未対応
- 実装状況不明
- 実装状況不明
- 実験的。動作が変更される可能性があります。
- 実験的。動作が変更される可能性があります。
関連情報
- 導入: The ECMAScript Internationalization API
- コンストラクター
- メソッド