この記事では言語コードを指定する引数のことを、便箋上locales引数とします。

locales引数の使い所

new Intl.DateTimeFormat([locales[, options]]).format(dateObj);
new Intl.NumberFormat([locales[, options]]).format(dateObj);
dateObj.toLocaleString([locales[, options]]);

書き方

BCP47に基づいた言語を表す文字列、またはその配列での指定です。

言語コード言語
ja日本語
en-USアメリカ英語
ko-KR韓国語
zh-Hans中国語(繁体字)
zh-Hant中国語(簡体字)

上のリストだけでは足らない場合は、Webで使う主な言語コードの一覧(BCP47準拠) | listfulをご覧下さい。

何も指定しないか明示的にundefinedを指定した場合は、実装によりますがOSのデフォルト言語(Firefoxはそのブラウザのデフォルト言語)に元づいて処理されます。

言語コードのUnicode拡張

言語コードでは、jaなどに加えて、uという拡張部分タグを後ろに付けることができます。そしてuタグに続けて、下のような指定ができます。

u-nu-何か

Intl.NumberFormatIntl.DateTimeFormatで使います。普通は0~9となる番号表記(numbering system)を変えることができます。

指定値種類出力
latnアラビア数字(算用数字)0 1 2 3 4 5 6 7 8 9
hanidec漢数字〇 一 二 三 四 五 六 七 八 九

有効な全ての指定値は、言語コードで数字の表し方を指定する | listfulをご覧下さい。

u-ca-何か

Intl.DateTimeFormatでのみ使える、紀年法(calendar)の指定です。

dateObj = new Date(2020, 11, 3, 4, 56, 7, 890);
new Intl.DateTimeFormat('ja-u-ca-japanese', {dateStyle: 'full', timeStyle: 'full'}).format(dateObj);
// 出力 'R2/12/03 04:56'
指定値種類
iso8601ISO8601準拠暦
japanese和暦
buddhist仏暦
chinese伝統的な中国暦
copticコプト暦
ethioaaエチオピア暦(Amete Alem)
ethiopicエチオピア暦(Amete Mihret)
gregoryグレゴリオ暦
hebrew古代ユダヤ暦
indianインド国定暦
islamicヒジュラ暦
persianイラン暦
roc中華民国暦

u-hc-何か

Intl.DateTimeFormatでのみ使える、時制(hour cycle)の指定です。

指定値説明
h11午前(午後)は0時から始まり、11時台まで
h12午前(午後)は12時から始まり、次に1時、そして11時台まで
h230時から始まり、11時台まで
h2424時から始まり、次に1時、そして23時台まで

u-co-何か

Intl.Collatorでのみ使える、比較ルール(collation)の指定です。

指定値比較ルール
big5hanラテン文字ならピンイン順で、漢字ならbig5文字集合の順(中国語向け)
dict辞書形式順(シンハラ語などで)
directバイナリコードポイント順(非推奨)
ducetUnicode照合アルゴリズムに基づく順序
gb2312ラテン文字ならピンイン順で、漢字ならgb2312han順(中国語向け)
phonebkウムラウト付き母音をウムラウト無し母音+eとして扱う電話帳形式の順序(ドイツ語のみ)
phonetic発音に基づく順序
pinyinラテン文字も漢字もピンイン順(中国語向け)
reformedリフォーム順(スウェーデン語など)
searchjlハングルの子音順
strokeラテン文字ならピンイン順、漢字なら画数順(中国語向け)
trad伝統的な形の順序(スペイン語など)
unihanラテン文字ならピンイン順、漢字ならUnihanデータベースの部首画数順(中国語向け)

u-kn-何か

Intl.Collatorでのみ使える、数値(numeric)として比較するかの指定です。

数字の比較では、文字列として扱うか数値として扱うかで、順番が変わってしまうことがあります。

指定値比較ルール
true数値として比較
false文字列として比較
new Intl.Collator('ja-u-kn-true').compare('2', '10'); // 出力: (負の数)
new Intl.Collator('ja-u-kn-false').compare('2', '10'); // 出力: (正の数)
new Intl.Collator('ja').compare('2', '10'); // 出力: (正の数)

なお数字以外の番号は数字として扱ってくれないようです。

new Intl.Collator('zh-Hans-u-nu-hanidec-kn-true').compare('二', '一〇');
new Intl.Collator('zh-Hans-u-nu-hanidec-kn-false').compare('二', '一〇');
new Intl.Collator('zh-Hans-u-nu-hanidec').compare('二', '一〇');
// いずれも出力は負の数

u-kf-何か

ラテン文字などにおいて、大文字小文字の順序(caseFirst)を指定します。

指定値比較ルール
upper大文字が先 (A > a)
lower小文字が先 (a > A)
false言語コードで設定した言語次第
new Intl.Collator('ja-u-kf-upper').compare('R', 'r'); // 出力: (負の数)
new Intl.Collator('ja-u-kf-lower').compare('R', 'r'); // 出力: (正の数)
new Intl.Collator('ja-u-kf-false').compare('R', 'r'); // 出力: (正の数)

参考リンク