この記事では言語コードを指定する引数のことを、便箋上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.NumberFormatとIntl.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'| 指定値 | 種類 |
|---|---|
| iso8601 | ISO8601準拠暦 |
| 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時台まで |
| h23 | 0時から始まり、11時台まで |
| h24 | 24時から始まり、次に1時、そして23時台まで |
u-co-何か
Intl.Collatorでのみ使える、比較ルール(collation)の指定です。
| 指定値 | 比較ルール |
|---|---|
| big5han | ラテン文字ならピンイン順で、漢字ならbig5文字集合の順(中国語向け) |
| dict | 辞書形式順(シンハラ語などで) |
| direct | バイナリコードポイント順(非推奨) |
| ducet | Unicode照合アルゴリズムに基づく順序 |
| 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'); // 出力: (正の数)参考リンク