Intl

Intl オブジェクトは、 ECMAScript の国際化 API の名前空間で、言語に依存した文字列の比較、数値フォーマット、日付フォーマットを提供します。 Intl オブジェクトは、いくつかのコンストラクターに加え、国際化コンストラクターや他の言語に関する関数に共通する機能へのアクセスを提供します。

プロパティ

Intl.Collator
言語に依存した文字列の比較を可能にするオブジェクトである collator のためのコンストラクター。
Intl.DateTimeFormat
言語に依存した日時の書式化を可能にするオブジェクトのためのコンストラクター。
Intl.ListFormat
言語に依存したリストの書式化を可能にするオブジェクトのためのコンストラクター。
Intl.Locale
Unicode ロケール識別子を表すオブジェクトのためのコンストラクター。
Intl.NumberFormat
言語に依存した数値フォーマットを可能にするオブジェクトのためのコンストラクター。
Intl.PluralRules
複数形を意識した書式化や複数形の言語規則を可能にするオブジェクトのためのコンストラクター。
Intl.RelativeTimeFormat
言語を意識した相対時刻の書式化を可能にするオブジェクトのためのコンストラクター。

メソッド

Intl.getCanonicalLocales()
正規のロケール名を返すメソッド。

ロケールの識別とネゴシエーション

国際化コンストラクターや他のコンストラクターの言語を意識したメソッド (関連情報に記載) は、ロケールを識別して実際に使用するものを決定するために共通のパターンを使用しています。これらはすべて、 localesoptions の引数を受け取り、 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 の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
IntlChrome 完全対応 24Edge 完全対応 12Firefox 完全対応 29IE 完全対応 11Opera 完全対応 15Safari 完全対応 10WebView Android 完全対応 4.4Chrome Android 完全対応 25Firefox Android 完全対応 56Opera Android 完全対応 14Safari iOS 完全対応 10Samsung Internet Android 完全対応 1.5nodejs 完全対応 あり
CollatorChrome 完全対応 24Edge 完全対応 12Firefox 完全対応 29IE 完全対応 11Opera 完全対応 15Safari 完全対応 10WebView Android 完全対応 ≤37Chrome Android 完全対応 25Firefox Android 完全対応 56Opera Android 完全対応 14Safari iOS 完全対応 10Samsung Internet Android 完全対応 1.5nodejs ?
DateTimeFormatChrome 完全対応 24Edge 完全対応 12Firefox 完全対応 29IE 完全対応 11Opera 完全対応 15Safari 完全対応 10WebView Android 完全対応 4.4Chrome Android 完全対応 25Firefox Android 完全対応 56Opera Android 完全対応 14Safari iOS 完全対応 10Samsung Internet Android 完全対応 1.5nodejs 完全対応 あり
getCanonicalLocalesChrome 完全対応 54Edge 完全対応 16Firefox 完全対応 48IE 未対応 なしOpera 未対応 なしSafari 完全対応 11WebView Android 未対応 なしChrome Android 未対応 なしFirefox Android 完全対応 56Opera Android 未対応 なしSafari iOS 完全対応 11Samsung Internet Android 未対応 なしnodejs 未対応 なし
ListFormat
実験的
Chrome 完全対応 72Edge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 完全対応 60Safari 未対応 なしWebView Android 完全対応 72Chrome Android 完全対応 72Firefox Android 未対応 なしOpera Android 完全対応 51Safari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 未対応 なし
LocaleChrome 完全対応 74Edge 完全対応 79Firefox 完全対応 75IE 未対応 なしOpera 完全対応 62Safari 未対応 なしWebView Android 完全対応 74Chrome Android 完全対応 74Firefox Android 未対応 なしOpera Android 完全対応 53Safari iOS 未対応 なしSamsung Internet Android 完全対応 11.0nodejs 未対応 なし
NumberFormatChrome 完全対応 24Edge 完全対応 12Firefox 完全対応 29IE 完全対応 11Opera 完全対応 15Safari 完全対応 10WebView Android 完全対応 ≤37Chrome Android 完全対応 26Firefox Android 完全対応 56Opera Android 完全対応 14Safari iOS 完全対応 10Samsung Internet Android 完全対応 1.5nodejs ?
PluralRulesChrome 完全対応 63Edge 完全対応 18Firefox 完全対応 58IE 未対応 なしOpera 完全対応 50Safari 未対応 なしWebView Android 完全対応 63Chrome Android 完全対応 63Firefox Android 完全対応 58Opera Android 完全対応 46Safari iOS 未対応 なしSamsung Internet Android 完全対応 8.0nodejs 完全対応 10.0.0
RelativeTimeFormatChrome 完全対応 71Edge 未対応 なしFirefox 完全対応 65IE 未対応 なしOpera 完全対応 58Safari 未対応 なしWebView Android 完全対応 71Chrome Android 完全対応 71Firefox Android 完全対応 65Opera Android 完全対応 50Safari iOS 未対応 なしSamsung Internet Android 完全対応 10.0nodejs 完全対応 12.0.0

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。

関連情報