ドラフト ECMA-402 / 2025年10月13日
ECMAScript® 2026 国際化 API 仕様書
はじめに
この仕様書のソースは https://github.com/tc39/ecma402 にあります。
ECMAScript 2026 国際化 API 仕様書(ECMA-402 第13版)は、ECMA-262 を補完するための主要な言語依存機能を提供します。その機能は、Unicode用国際化コンポーネント(ICU)ライブラリ (https://unicode-org.github.io/icu-docs/ )、.NETフレームワーク、Javaプラットフォームなど、よく知られた国際化APIから選定されています。
第1版APIは、Nebojša Ćirić および Jungshik Shin の提案に基づき、2010年9月に Ecma TC39 により設立されたアドホックグループによって開発されました。
第2版APIは、2015年6月の総会にて、ECMAScript第6版の補完として採用されました。
第3版APIは、Ecma
TC39の新しい年次リリースサイクルと公開開発プロセスのもとで初めてリリースされた版です。プレーンテキストのソース文書がECMA-402ソースから構築され、以降の開発の基盤として完全にGitHub上で進められました。この標準の開発期間中に、数十件のプルリクエストと課題が提出され、バグ修正や編集修正、その他の改善がなされました。さらに、Ecmarkup、Ecmarkdown、Grammarkdown
など多くのソフトウェアツールもこの活動を支援するために開発されました。
多くの組織を代表する数十人が Ecma TC39
のもと、この版および過去の版の開発へ非常に重要な貢献をしてきました。加えて、TC39のECMAScript活動を支える活発なコミュニティが形成され、数多くのドラフトのレビュー、バグ報告、実装実験、テストスイートの提供、世界中の開発者コミュニティへのECMAScript国際化の普及が行われています。残念ながら、この活動への全ての個人や組織を特定し、感謝を表することは不可能です。
Norbert Lindenberg
ECMA-402 第1版プロジェクト編集者
Rick Waldron
ECMA-402 第2版プロジェクト編集者
Caridy Patiño
ECMA-402 第3~5版プロジェクト編集者
Caridy Patiño, Daniel Ehrenberg, Leo Balter
ECMA-402 第6版プロジェクト編集者
Leo Balter, Valerie Young, Isaac Durazo
ECMA-402 第7版プロジェクト編集者
Leo Balter, Richard Gibson
ECMA-402 第8版プロジェクト編集者
Leo Balter, Richard Gibson, Ujjwal Sharma
ECMA-402 第9版プロジェクト編集者
Richard Gibson, Ujjwal Sharma
ECMA-402 第10版プロジェクト編集者
Richard Gibson, Ujjwal Sharma
ECMA-402 第11版プロジェクト編集者
Ben Allen, Richard Gibson, Ujjwal Sharma
ECMA-402 第12版プロジェクト編集者
Ben Allen, Richard Gibson, Ujjwal Sharma
ECMA-402 第13版プロジェクト編集者
1 適用範囲
本規格は、異なる人間の言語や国で用いられる言語的・文化的慣習に対応する必要があるプログラムを支援するECMAScriptオブジェクトのアプリケーションプログラミングインターフェースを定義します。
2 適合性
この仕様への適合実装は、ECMA-262
に準拠し、本仕様書に記載されたすべてのオブジェクト、プロパティ、関数、プログラムの意味論を提供・サポートしなければなりません。本仕様のいかなる内容も、ECMA-262
により禁止されている動作を許可することを意図していません。そのような矛盾は、ECMA-262 の制約を上書きするものではなく、編集上の誤りとみなすべきです。
適合実装は、本仕様書に記載されているもの以外の追加のオブジェクト、プロパティ、関数を提供しても差し支えありません。特に、適合実装は本仕様書で記述されていないプロパティや、その値を本仕様書に記載されたオブジェクトに対して提供することができます。ただし、本仕様で定義された関数に任意の引数を追加することは許可されません。
適合実装は、追加の値を受け入れ、以下のoptions 引数のプロパティに対して、実装定義 の動作を行うことが許容されます。その場合、RangeError を投げる代わりに実装定義の振る舞いをすることができます。
全ての コンストラクタ および
supportedLocalesOf メソッドにおける options プロパティ
"localeMatcher" 。
Collator コンストラクタ における options
プロパティ "usage" および "sensitivity" 。
NumberFormat コンストラクタ における options
プロパティ "style" , "currencyDisplay" ,
"notation" , "compactDisplay" ,
"signDisplay" , "currencySign" ,
"unitDisplay" 。
NumberFormat コンストラクタ における options
プロパティ "minimumIntegerDigits" , "minimumFractionDigits" ,
"maximumFractionDigits" , "minimumSignificantDigits" ,
"maximumSignificantDigits" 。追加値は、指定された限界値より大きい 整数 として解釈されるものとします。
DateTimeFormat コンストラクタ における 表16 に記載された options プロパティ。
DateTimeFormat コンストラクタ における options
プロパティ "formatMatcher" 。
PluralRules コンストラクタ における options
プロパティ "minimumIntegerDigits" , "minimumFractionDigits" ,
"maximumFractionDigits" ,
"minimumSignificantDigits" 。追加値は、指定された限界値より大きい 整数 として解釈されるものとします。
PluralRules コンストラクタ における options
プロパティ "type" 。
RelativeTimeFormat コンストラクタ における options
プロパティ "style" および "numeric" 。
DisplayNames コンストラクタ における options
プロパティ "style" および "type" 。
3 規範参照
本書の適用に必要な参照文書を以下に示します。日付付き参照については、引用した版のみが適用されます。日付なし参照は、引用文書の最新版(修正や改訂を含む)が適用されます。
ECMAScript 2026 言語仕様 (ECMA-262 第17版、または後継)。
https://www.ecma-international.org/publications/standards/Ecma-262.htm
注
これらの参照に依存する本仕様の各セクションは、可能な限り最新の内容に更新されていますが、必ずしも規格と完全に一致していることは保証されません。
4 概要
このセクションは規範的ではありません。
4.1 国際化・ローカライズ・グローバリゼーション
ソフトウェアの国際化とは、異なる言語を話し、異なる文化的期待を持つユーザーのニーズをサポートする、または簡単にサポートできるように設計し、世界中のユーザー間のコミュニケーションを可能にすることを意味します。ローカライズは、特定の言語と文化への実際の適応です。ソフトウェアのグローバリゼーションは、一般的に国際化とローカライズの組み合わせと理解されています。グローバリゼーションは、世界中のすべての言語をサポートするテキスト表現を使用し、言語・国・タイムゾーンなどの標準識別子を使って識別する、最も低いレベルから始まります。その後、ユーザーが理解できるユーザーインターフェース言語やデータ表示を使用し、最終的にはユーザーの言語・文化・環境に合わせた製品固有の適応が必要となることが多いです。
ECMA-262
は、テキスト表現にUnicodeを使用し、いくつかの言語依存関数を提供することで基盤を築いていますが、これらの関数の振る舞いに対するアプリケーションの制御はほとんどありません。本仕様は、カスタマイズ可能な言語依存機能のセットを提供することでその基盤を拡張します。このAPIは、アプリケーション自体が国際化されていなくても有用です。なぜなら、たとえ1つの言語と1つの地域のみを対象としたアプリケーションでも、その言語と地域を正しくサポートする必要があるためです。しかし、このAPIは複数の言語や地域をサポートするアプリケーション、特にサーバー環境で同時に必要となる場合にも対応できます。
4.2 API の概要
本仕様は、ECMA-262
を補完するために主要な言語依存機能を提供し、その実装に全体または部分的に追加できます。本仕様は、ECMAScriptコードから観測可能な新しい言語値(例えば [[FallbackSymbol]] 内部スロットの値や %Intl% から プロパティアクセス
を介して間接的に到達できる値の集合など)を導入し、また ECMA-262 で定義されている一部の関数の定義を改良します(以下参照)。いずれのカテゴリも ECMA-262
で定義された値やインターフェースに対して許可されている振る舞いを禁じるものではなく、どの実装でも本仕様の採用を可能にします。
本仕様は、多くのアプリケーションで必要となる主要な言語依存機能をいくつか提供します:ロケール選択と検査、文字列比較(照合)およびケース変換、複数形ルール、テキストセグメンテーション、数値・絶対/相対日時・期間・リストのフォーマット。ECMA-262
は、これら基本機能のための関数(Array.prototype の
toLocaleString、String.prototype の
localeCompare, toLocaleLowerCase, toLocaleUpperCase、Number.prototype の
toLocaleString、Date.prototype の
toLocaleString, toLocaleDateString,
toLocaleTimeString)を提供しますが、実際の振る舞いはほぼ実装依存です。本仕様は、追加機能、言語や振る舞いの詳細の制御、そして必要な機能のより完全な仕様を提供します。
アプリケーションは、APIを以下の2つの方法で利用できます:
直接利用:サービスコンストラクタ
を使ってオブジェクトを構築し、優先言語リストや設定オプションを指定します。構築されたオブジェクトは、主要関数(compare、select、format
など)を繰り返し呼び出すことができ、resolvedOptions 関数でその正確な設定内容を取得できます。
間接利用:上記の ECMA-262
の関数群を利用します。照合・フォーマット関数は、本仕様で Collator、NumberFormat、DateTimeFormat の コンストラクタ
と同じ引数を受け取り、compare や format メソッドと同じ結果を返すように再定義されています。ケース変換関数も優先言語リストを受け取るように再定義されています。
Intlオブジェクト は、本仕様で定義されたすべての機能をパッケージ化し、名前の衝突を避けます。
注
APIは様々なフォーマッターを含みますが、パース機能は提供しません。これは意図的であり、長く議論された結果、利点と欠点を総合的に判断して除外されました。詳細は
issue tracker の議論を参照してください。
4.3 API の規約
すべての Intlコンストラクタ
は、クラスで定義されたかのように動作し、関数として(NewTargetなしで)呼び出された場合は TypeError
例外を投げるべきです。過去の版との互換性のため、これは %Intl.Collator% 、%Intl.DateTimeFormat% 、%Intl.NumberFormat%
には適用されません。これらは関数として呼び出された場合でも新しいオブジェクトを構築して返します。
注
ECMA 402 v1 では、Intl
コンストラクタ
は、既存オブジェクトをレシーバとして呼び出すことで、関連する内部スロットを追加し、それをクラスのインスタンスに変換する動作をサポートしていました。ECMA 402 v2
では、この機能は既存オブジェクトに内部スロットを追加しないよう削除されました。ECMA 402 v3
では、基となるIntlインスタンスを任意のオブジェクトにチェーンする「規範的オプション」として再追加され、
コンストラクタ が呼ばれた際に利用できます。詳細は
Issue 57 を参照してください。
4.4 実装依存事項
国際化の性質上、本仕様ではいくつかの詳細について実装依存とせざるを得ません:
十分なローカライズを備えた実装がサポートするロケールの集合:
言語学者は数千もの人間の言語を記述しており、IANA言語 サブタグ レジストリには7000以上の主要言語 サブタグ (ロケール識別子のベースとなる)が登録されています。Common Locale Data
Repositoryなどの大規模なロケールデータ集でも、全言語とその地域・方言変種のごく一部しかカバーしていません。リソース制約のあるデバイス向けの実装では、さらに対象を絞る必要があるかもしれません。
フォーマットパターンなどのローカライズの正確な形式:
多くの場合、ロケール依存の慣習には標準化がなく、複数の形式が並存したり、時代によって変化します。異なる国際化ライブラリが異なる形式を実装していても、どれも間違いではありません。このAPIを既存ライブラリの上に実装できるよう、これらの違いを許容する必要があります。
Unicodeの部分集合:
照合などの操作は、Unicode文字セット全体を含む文字列を扱うことがあります。しかし、Unicode標準やECMAScript標準は、実装がUnicode文字セットの部分集合のみをサポートすることを認めています。加えて、ロケールの慣習は通常、Unicode全体ではなく、そのロケールにとって重要な文字のみの振る舞いを規定します。Unicode照合アルゴリズムは、Unicode全体に対するデフォルトの照合順序とローカル慣習へのテーラリング機能を組み合わせていますが、部分集合やテーラリングによって振る舞いの違いが生じます。
ブラウザ実装では、特定オリジンに見える初期のロケール・通貨・暦・番号体系・その他の列挙可能な項目の集合は、同じユーザー agent
string(エンジン・プラットフォームバージョン)を共有する全ユーザーで同一でなければなりません。さらに、これら集合の動的変更によってユーザーが互いに識別可能になることがあってはなりません。この制約は国際化に内在するフィンガープリンティングリスクを低減するために課されており、将来の改訂で緩和される可能性があります。この制約の結果、オンデマンドでロケールインストールが可能なブラウザ実装が、特定オリジンから新しいロケールのインストールが必要となるリクエストを初めて受けた場合、そのロケールが既にインストールされているかどうかを明かしてはなりません。
本仕様全体で、実装・ロケール依存の挙動は ILD 、実装・ロケール・番号体系依存の挙動は ILND
と呼びます。
4.4.1 実装間の互換性
ECMA
402は、各関数が使用するデータのスキーマを記述します。内部データは実装依存であり、将来的に変更され、実装ごとに異なることが予想されます。この違いはプログラマーから観測可能であり、特定の出力に依存するプログラムを構築することも可能です。しかし、本仕様は、良く設計されたプログラムが実装間で動作できるよう、合理的な制約を記述しようとしています。実装は、言語データの調和の努力を継続することが推奨されます。
5 表記規約
本規格では、ECMA-262 の表記規約の一部を使用します:
注
ECMA-262 で説明されている通り、アルゴリズムはECMAScript構成要素の意味論を厳密に指定するために使用されますが、特定実装技術の使用を示唆するものではありません。内部スロットはオブジェクト値の意味論を定義するために使われますが、APIの一部ではありません。純粋に説明のために定義されています。APIの実装は、ここで記載された通り内部スロットを生成・操作するかのように動作しなければなりません。
Record 仕様型への拡張として、記法「[[<name >]]」は、変数name (String値である必要あり)によって名前が与えられるフィールドを表します。例えば、変数s が"a" という値の場合、[[<s >]]はフィールド[[a]] を示します。
本仕様は、規範的オプション で囲まれたブロックを使用し、ECMA
262のAnnex
B (ブラウザー向け追加機能)の意味を示します。すなわち、規範的オプションのセクションは、ECMAScript host がWebブラウザーの場合は必須です。それ以外の場合は、規範的だがオプションとなります。
5.1 よく知られた内部組込みオブジェクト
以下の表は、よく知られた内部組込みオブジェクト の表を拡張します。
表1: よく知られた内部組込みオブジェクト(拡張)
6 ロケール、通貨、タイムゾーン、計量単位、番号体系、照合順序、および暦の識別
本条項では、本仕様でロケール、通貨、タイムゾーン、計量単位、番号体系、照合順序、暦、ならびにパターン文字列を識別するために用いる String 値について述べます。
6.1 大文字小文字の区別とケース変換
ロケール、通貨、スクリプト、タイムゾーンを識別するために用いる String 値は、ASCII の大文字小文字を区別しない方法で解釈されます。すなわち、コードユニット
0x0041〜0x005A(Unicode 文字 LATIN CAPITAL LETTER A〜Z)を、対応するコードユニット 0x0061〜0x007A(Unicode 文字 LATIN SMALL
LETTER a〜z)と等価に扱います(いずれも両端を含む)。他のケースフォールディング等価性は適用しません。
注
例えば、"ß" (U+00DF) は "SS" (U+0053, U+0053)
と一致または対応付けしてはなりません。"ı" (U+0131) は "I" (U+0049)
と一致または対応付けしてはなりません。
String 値 S の ASCII-uppercase とは、S 中の ASCII
小文字の各コードユニット(0x0061〜0x007A、両端を含む)を対応する ASCII
大文字のコードユニット(0x0041〜0x005A、両端を含む)に置き換え、その他のコードユニットは保持して得られる String 値を指します。
String 値 S の ASCII-lowercase とは、S 中の ASCII
大文字の各コードユニット(0x0041〜0x005A、両端を含む)を対応する ASCII
小文字のコードユニット(0x0061〜0x007A、両端を含む)に置き換え、その他のコードユニットは保持して得られる String 値を指します。
String 値 A は、A の ASCII-uppercase が B の ASCII-uppercase
とコードユニット列として完全に同一であるとき、String 値 B の ASCII-case-insensitive match
です。Unicode 符号点列 A は、B が CodePointsToString (A )
の ASCII-case-insensitive match のとき、B に対する ASCII-case-insensitive match です。
6.2 言語タグ
本仕様は、Unicode Technical Standard #35
Part
1 Core, Section 3.3 BCP 47 Conformance で定義される Unicode BCP 47 locale
identifiers を用いてロケールを識別し、そのアルゴリズムは Section 3
Unicode Language and Locale Identifiers の文法で定義される Unicode locale nonterminals を参照します。
そのような各識別子は language tag とも呼べ、実際に BCP 47 における用語としての有効な言語タグです。
Unicode Technical
Standard #35 Part 1 Core, Section 3.2.1 Canonical Unicode Locale Identifiers
で規定される正規形のロケール識別子は、
「Unicode canonicalized
locale identifier 」と呼びます。
ロケール識別子は、"-" (U+002D HYPHEN-MINUS)で区切られた大小区別しない Unicode Basic Latin の英数字 subtags から構成され、1 文字の
subtags は「singleton
subtags 」と呼ばれます。
Unicode Technical Standard #35 Part 1 Core,
Section 3.6 Unicode BCP 47 U Extension の subtag 列は広く用いられており、
「 Unicode locale extension
sequence 」は、言語タグ内で unicode_locale_extensions の Unicode locale nonterminal
によってマッチし得る最長の substring で、
"-x-…" の私用 subtag sequence に属さない部分を指します。これは
"-u-" で始まり、直後に続く singleton subtag でないすべての subtags
と、それらの直前の "-" 区切りを含みます。例えば、
"en-US-u-fw-mon-x-u-ex-foobar" の Unicode locale extension
sequence は "-u-fw-mon" です。
structurally valid language tags
は本仕様で定義される API において使用できますが、実装はそれらの検証に Unicode Common Locale Data Repository(CLDR )のデータを用いることを必須とはしません。十分なローカライズを伴って実装がサポートするロケール(したがって言語タグ)の集合は
実装定義 です。
Intl constructors
は、要求された言語タグを、それぞれの実装がサポートするロケールへ対応付けます。
6.2.1 IsStructurallyValidLanguageTag ( locale )
抽象操作 IsStructurallyValidLanguageTag は引数 locale (String)を取り、Boolean
を返します。locale が構文的に整形式の
language
tag かどうかを判定します。locale が意味的に有意か、また別名の subtags とその推奨置換
subtags
を区別するか、正規の大文字小文字や subtag の順序を要求するかは考慮しません。呼び出し時は次の手順を行います。
lowerLocale を、locale の ASCII-lowercase
とする。
lowerLocale が unicode_locale_id の
Unicode
locale nonterminal にマッチしないなら、false を返す。
lowerLocale が Unicode Technical
Standard #35 Part 1 Core, Section 3.3 BCP 47 Conformance
で記述される後方互換の構文を用いているなら、false を返す。
baseName を、GetLocaleBaseName (lowerLocale )
とする。
variants を、GetLocaleVariants (baseName )
とする。
variants が undefined でないなら、
variants に重複する subtags
が含まれる場合、false を返す。
extensions を、lowerLocale の baseName 以降の接尾部分とする。
注記: pu_extensions の Unicode locale nonterminal によってマッチされる
"-x-…" の私用 subtag 列は無視しなければならないが、末尾の孤立した
"x" (後続の内容なし)は、以下のいずれの検査にも影響しない。
puIndex を、StringIndexOf (extensions ,
"-x-" , 0) とする。
puIndex が not-found でないなら、extensions を
extensions の 0 から puIndex までの substring に置き換える。
extensions が空文字列でないなら、
extensions に重複する singleton subtags
が含まれる場合、false を返す。
transformExtension を、extensions のうち
transformed_extensions の Unicode locale
nonterminal にマッチする最長の
substring とする。該当する
substring がない場合、true を返す。
Assert :
transformExtension の 0 から 3 までの substring は
"-t-" である。
tPrefix を、transformExtension の 3 以降の substring とする。
tlang を、tPrefix のうち tlang の Unicode
locale nonterminal
にマッチする最長の接頭辞とする。該当する接頭辞がない場合、true を返す。
tlangVariants を、GetLocaleVariants (tlang )
とする。
tlangVariants に重複する subtags
が含まれる場合、false を返す。
true を返す。
6.2.2 CanonicalizeUnicodeLocaleId ( locale )
抽象操作 CanonicalizeUnicodeLocaleId は引数 locale (language
tag )を取り、Unicode canonicalized locale identifier
を返します。locale の正規かつ大文字小文字を整えた形式を返します。呼び出し時は次の手順を行います。
localeId を、Unicode Technical
Standard #35 Part 1 Core, Annex C LocaleId Canonicalization に従って
locale を正規形へ変換するアルゴリズムを実行して得られる String 値とする(アルゴリズムはまず構文の正規化から始まる点に注意)。
localeId に、Unicode locale extension
sequence である substring が含まれるなら、
extension を、localeId 内の Unicode locale extension
sequence に相当する substring から成る
String 値とする。
newExtension を "-u" とする。
components を、UnicodeExtensionComponents (extension )
とする。
components .[[Attributes]] の各要素
attr について、
newExtension
を、newExtension 、"-" 、attr の
連結
に更新する。
components .[[Keywords]] の各 Record
{ [[Key]] , [[Value]] }
keyword について、
newExtension
を、newExtension 、"-" 、keyword .[[Key]] の 連結
に更新する。
keyword .[[Value]] が空文字列でないなら、
newExtension
を、newExtension 、"-" 、keyword .[[Value]] の 連結
に更新する。
Assert :
newExtension は "-u" ではない。
localeId を、localeId のうち最初に現れる
substring extension を
newExtension に置き換えたコピーに設定する。
localeId を返す。
注
手順
2 は、返される
language
tag における
Unicode locale extension
sequence が次を含むことを保証します。
入力内で重複した任意の属性について、その最初の出現のみ
入力内の与えられたキーに対する keyword のうち、最初のもののみ
6.2.3 DefaultLocale ( )
実装定義 の抽象操作
DefaultLocale は引数を取らず、Unicode canonicalized
locale identifier を返します。返される String 値は、6.2.1 の整形式かつ 6.2.2 の正規化がなされた、language
tag であり、ホスト環境 の現在のロケールを表します。Unicode locale extension
sequence を含んではなりません。
注
返される値はフィンガープリンティング要因となり得ます。ブラウザー環境では、追加の識別情報を与えないよう、
navigator.language
と一致させるべきです。
6.3 通貨コード
本仕様は ISO 4217 で定義される 3 文字の通貨コードを用いて通貨を識別します。正規形は大文字です。
整形式な 3 文字の ISO 4217 通貨コードはすべて許可されます。ただし、ローカライズされた通貨記号が利用可能な通貨コードと language tag
の組合せは実装依存です。ローカライズされた通貨記号が利用できない場合、フォーマットには ISO 4217 の通貨コードを用います。
6.3.1 IsWellFormedCurrencyCode ( currency )
抽象操作 IsWellFormedCurrencyCode は引数 currency (String)を取り、Boolean を返します。引数
currency が整形式の 3 文字の ISO 4217 通貨コードを表していることを検証します。呼び出し時は次の手順を行います。
currency の長さが 3 でなければ、false を返す。
normalized を、currency の ASCII-uppercase
とする。
normalized に 0x0041〜0x005A(Unicode 文字 LATIN CAPITAL LETTER
A〜Z)外のコードユニットが含まれるなら、false を返す。
true を返す。
6.4 AvailableCanonicalCurrencies ( )
実装定義 の抽象操作
AvailableCanonicalCurrencies は引数を取らず、String の List
を返します。返される List
は 辞書式コードユニット順序
に従って整列され、Intl.DisplayNames および Intl.NumberFormat オブジェクトの機能が提供される通貨を識別する、一意で整形式かつ大文字正規化済みの 3 文字 ISO
4217 通貨コードを含みます。
6.5 IANA タイムゾーンデータベースの使用
本仕様を採用する実装は、タイムゾーン対応 でなければなりません。すなわち、IANA
タイムゾーンデータベース https://www.iana.org/time-zones/
を用いて、利用可能な名前付きタイムゾーン識別子
と、ECMAScript の計算や書式設定で使用されるデータを提供しなければなりません。
本節は、タイムゾーン対応 実装が IANA
タイムゾーンデータベースをどのように用いるべきかを定義します。
IANA タイムゾーンデータベースの Zone 名または Link 名でない限り、いかなる String も 利用可能な名前付きタイムゾーン識別子 であってはなりません。
ECMAScript の組込みオブジェクトが返す 利用可能な名前付きタイムゾーン識別子 は、IANA
タイムゾーンデータベースにおける大文字小文字表記を使用しなければなりません。
IANA タイムゾーンデータベースの各 Zone は 主要タイムゾーン識別子 でなければならず、IANA
タイムゾーンデータベースの各 Link 名は、対応する Zone 名に解決される
非主要タイムゾーン識別子 でなければなりません。以下の例外は
AvailableNamedTimeZoneIdentifiers
にて実装されます。
歴史的理由により、"UTC" は 主要タイムゾーン識別子 でなければなりません。
"Etc/UTC" 、"Etc/GMT" 、"GMT"
およびそれらへ解決されるすべての Link 名は、"UTC" に解決される非主要タイムゾーン識別子でなければなりません。
zone.tab ファイルの “TZ” 列に存在する任意の Link 名は、主要タイムゾーン識別子 でなければなりません。
例えば、"Europe/Prague" と "Europe/Bratislava" の両方は 主要タイムゾーン識別子 でなければなりません。
この要件は、各 ISO 3166-1 Alpha-2
国コードについて、少なくとも 1 つの 主要タイムゾーン識別子 を保証し、一国のタイムゾーン規則の将来の変更が、領土境界の変更も伴わない限り、他国のタイムゾーンを用いる
ECMAScript プログラムに影響しないことを保証します。
zone.tab の “TZ” 列に記載されておらず、かつ単一の ISO 3166-1 Alpha-2
国コードの領域内に完全に含まれる地理的領域を表す任意の Link 名は、同一の国コードの領域内に完全に含まれる地理的領域を表す主要識別子に解決されなければなりません。
例えば、"Atlantic/Jan_Mayen" は "Arctic/Longyearbyen"
に解決されなければなりません。
注
IANA タイムゾーンデータベースは、どの 利用可能な名前付きタイムゾーン識別子
を主要とするかに影響するビルドオプションを提供します。
既定のビルドオプションでは、国の異なるタイムゾーンが統合されます。例えば、"Atlantic/Reykjavik" は Zone
"Africa/Abidjan" への Link として構築されます。
地理的・政治的に異なる場所は、将来版の IANA タイムゾーンデータベースで異なるタイムゾーン規則を導入する可能性があります。
上記の例外は、将来互換性の問題を軽減するためのものです。
Unicode Common Locale Data Repository(CLDR )は、どの
利用可能な名前付きタイムゾーン識別子
が主要か非主要かを決定する際に、上記の例外の大部分を実装しています。
実装間の一貫性のため CLDR データの使用は推奨されますが、必須ではありません。
CLDR ベースでない実装でも、timezone.xml
にある CLDR の識別子データを用いることができます。
また、PACKRATDATA=backzone PACKRATLIST=zone.tab
のようなビルドオプションを使用し、上記要件への適合を確保するために必要な後処理を行うなど、IANA タイムゾーンデータベースを直接ビルドすることもできます。
IANA タイムゾーンデータベースは、通常、年に 5〜10 回更新されます。
これらの更新では、新しい Zone 名や Link 名が追加されたり、Zone が Link に変更されたり、任意の Zone に関連する UTC オフセットや遷移が変更されたりすることがあります。
実装は、可能な限り速やかに IANA タイムゾーンデータベースの更新を取り込むことが推奨されます。
そのような迅速な対応により、ECMAScript プログラムはタイムゾーンに敏感な計算を正確に実行でき、外部入力や ホスト環境 によって提供される新たに追加された
利用可能な名前付きタイムゾーン識別子
を使用できます。
IANA タイムゾーンデータベースのメンテナーは安定性に努めていますが、まれに(平均して年 1 回未満)既存の Zone が新しい Zone に置き換えられることがあります。
例えば、2022 年には「Europe/Kiev 」が新しい「Europe/Kyiv 」Zone へ解決される Link
として非推奨になりました。
非推奨となった Link は renamed
time zone identifier と呼ばれ、新たに追加された Zone は replacement time zone
identifier と呼ばれます。
これらの希少な変更による混乱を減らすため、実装は当初、各 replacement time zone identifier を、既存の renamed time zone identifier
に解決される
非主要タイムゾーン識別子 として追加すべきです。
これにより ECMAScript プログラムは両方の識別子を認識できますが、まだそれを認識しない他システムへ replacement time zone identifier
を送ってしまう可能性を減らせます。
rename waiting period の後、実装は新しい Zone を 主要タイムゾーン識別子 に昇格し、同時に
renamed time zone identifier を非主要へ降格すべきです。
他システムが更新されるのに十分な時間を提供するため、推奨される rename waiting
period は 2 年です。
ただし、厳密や動的である必要はありません。
代わりに、実装は通常のタイムゾーンデータ更新のリリースプロセスの一部として、待機期間後に replacement time zone identifier を主要へ昇格させるべきです。
待機期間は、新しい Zone が既存の Zone を置き換える場合にのみ適用すべきです。
既存の Zone と Link が入れ替わるだけなら、改名は起きておらず、待機期間は不要です。
実装が agent
の存続中にタイムゾーン情報を改訂する場合、利用可能な名前付きタイムゾーン識別子 の一覧、任意の
利用可能な名前付きタイムゾーン識別子
に関連付けられた 主要タイムゾーン識別子 、および任意の
利用可能な名前付きタイムゾーン識別子
に関連する UTC オフセットと遷移は、その agent で以前に観測された結果と整合していなければなりません。
この要件を満たすことの複雑さから、各 agent の存続期間中は、IANA
タイムゾーンデータベースの完全に一貫したコピーを維持することが推奨されます。
本節は 21.4.1.19
を補完するものであり、これに優先するものではありません。
6.5.1 AvailableNamedTimeZoneIdentifiers ( )
実装定義 の抽象操作
AvailableNamedTimeZoneIdentifiers は引数を取らず、List
of Time Zone Identifier
Records を返します。
その結果は、当該実装におけるすべての 利用可能な名前付きタイムゾーン識別子
と、各 利用可能な名前付きタイムゾーン識別子
に対応する 主要タイムゾーン識別子
を記述します。
List
は、各 Time Zone Identifier
Record の [[Identifier]] フィールドに従って順序付けられます。
この定義は、21.4.1.23
に示される定義に優先します。
identifiers を、IANA タイムゾーンデータベース内の各 Zone 名または Link 名の String 値を含む List
とする。
Assert :
identifiers のいかなる要素も、他の要素の ASCII-case-insensitive
match ではない。
identifiers を、辞書式コードユニット順序
に従ってソートする。
result を新しい空の List
とする。
identifiers の各要素 identifier について、
primary を identifier とする。
identifier が IANA タイムゾーンデータベースにおける Link 名であり、かつ IANA タイムゾーンデータベースの
zone.tab の “TZ” 列に存在しないなら、
zone を、IANA タイムゾーンデータベースにおける Link
名解決規則に従って、identifier が解決される Zone 名とする。
zone が "Etc/" で始まるなら、
primary を zone に設定する。
それ以外の場合、
identifierCountryCode を、identifier
に対応する地理的領域を含む領土の ISO
3166-1 Alpha-2 国コードとする。
zoneCountryCode を、zone に対応する地理的領域を含む領土の
ISO 3166-1 Alpha-2 国コードとする。
もし identifierCountryCode が
zoneCountryCode と等しいなら、
primary を zone に設定する。
それ以外の場合、
countryCodeLineCount を、IANA タイムゾーンデータベースの
zone.tab において “country-code” 列が
identifierCountryCode である行の数とする。
countryCodeLineCount が 1 の場合、
countryCodeLine を、IANA タイムゾーンデータベースの
zone.tab において “country-code” 列が
identifierCountryCode である行とする。
primary を、countryCodeLine
の “TZ” 列の内容に設定する。
それ以外の場合、
backzone を
undefined とする。
backzoneLinkLines を、IANA
タイムゾーンデータベースの backzone
ファイルにおいて、"Link " または
"#PACKRATLIST zone.tab Link
" のいずれかで始まる行の List
とする。
backzoneLinkLines の各要素
line について、
i を、StringIndexOf (line ,
"Link " , 0) とする。
line を、line の
i + 5 以降の substring
に設定する。
backzoneAndLink を、StringSplitToList (line ,
" " ) とする。
Assert :
backzoneAndLink は少なくとも 2
要素を持ち、backzoneAndLink [0] と
backzoneAndLink [1] はともに
利用可能な名前付きタイムゾーン識別子
である。
backzoneAndLink [1] が
identifier と等しいなら、
Assert :
backzone は
undefined
である。
backzone を
backzoneAndLink [0]
に設定する。
Assert :
backzone は
undefined ではない。
primary を backzone に設定する。
primary が
"Etc/UTC" 、"Etc/GMT" 、"GMT"
のいずれかであるなら、primary を "UTC" に設定する。
primary が replacement time
zone identifier であり、その rename waiting period
が終了していないなら、
renamedIdentifier を、primary が置き換えた renamed time zone
identifier とする。
primary を renamedIdentifier に設定する。
record を、Time
Zone Identifier Record { [[Identifier]] : identifier , [[PrimaryIdentifier]] : primary } とする。
record を result に追加する。
Assert : result
は、r .[[Identifier]] が "UTC" であり、かつ
r .[[PrimaryIdentifier]] が "UTC"
であるような Time Zone
Identifier Record r を含む。
result を返す。
注1
上記の、Link を 主要タイムゾーン識別子
に解決するアルゴリズムは、International Components for Unicode(ICU )における icu::TimeZone::getIanaID()
の動作および Unicode Common Locale Data Repository(CLDR )における time zone
identifier データの保守過程に対応することを意図しています。
このアルゴリズムは、IANA タイムゾーンデータベースの zone.tab と backzone のデータを用いて、ISO
3166-1 Alpha-2 国コードの境界を越えることなく、Link を 主要タイムゾーン識別子
に解決します。
Link の国コードに対して zone.tab に 1 行しかなければ、その行が 主要タイムゾーン識別子
を決定します。
しかし、その国コードに zone.tab に複数行がある場合は、正しい 主要タイムゾーン識別子
を特定するために backzone の履歴対応付けを用いる必要があります。
例えば、既定ビルドの IANA タイムゾーンデータベースが "Pacific/Truk"(国コード "FM")を "Pacific/Port_Moresby"(国コード
"PG")への Link として識別する場合、zone.tab の “country-code” 列で "FM"
に対応する行を確認する必要があります。
そのような行が 1 つだけなら、その行の “TZ” 列が "Pacific/Truk" に対応する 主要タイムゾーン識別子
を決定します。
しかし zone.tab に "FM" の行が複数ある場合は、backzone を参照し、"Link
Pacific/Chuuk Pacific/Truk" のような行があるなら、"Pacific/Chuuk" を 主要タイムゾーン識別子 として用います。
zone.tab は対応付けデータの優先情報源です。というのも、backzone の対応付けは、まれに ISO 3166-1
Alpha-2 国コードの境界を越えることがあるからです。
例えば、"Atlantic/Jan_Mayen"(国コード "SJ")は backzone において "Europe/Oslo"(国コード
"NO")に対応付けられています。
IANA タイムゾーンデータベースの 2024a 版時点では、この事例は唯一です。
注2
IANA タイムゾーンデータベース内の
Time zone
identifiers は時間とともに変化し得ます。
最低限、実装は
GetAvailableNamedTimeZoneIdentifier
によって許容される変更に結果の変更を限定することが推奨されます(
surrounding agent
の存続期間中)。
これらの推奨に対応する複雑さから、
AvailableNamedTimeZoneIdentifiers
の結果(したがって GetAvailableNamedTimeZoneIdentifier の結果も)は、
surrounding agent
の存続期間中は不変であることが推奨されます。
6.5.2 GetAvailableNamedTimeZoneIdentifier (
timeZoneIdentifier )
抽象操作 GetAvailableNamedTimeZoneIdentifier は引数 timeZoneIdentifier (String)を取り、Time Zone Identifier
Record か empty を返します。
timeZoneIdentifier が 利用可能な名前付きタイムゾーン識別子
であれば、List
を返す AvailableNamedTimeZoneIdentifiers
中のいずれかの Record
を返します。
それ以外の場合は empty を返します。
呼び出し時は次の手順を行います。
AvailableNamedTimeZoneIdentifiers ()
の各要素 record について、
record .[[Identifier]] が
timeZoneIdentifier の ASCII-case-insensitive
match であるなら、その record を返す。
empty を返す。
注
任意の
timeZoneIdentifier 、またはその
ASCII-case-insensitive
match に対して、得られる
Time Zone Identifier
Record は、
surrounding agent
の存続期間中、同一のフィールド値を含むことが要求されます。
さらに、
タイムゾーン識別子
が、
surrounding agent
の存続期間中に主要から非主要へ動的に変化しないことが要求されます。すなわち、
timeZoneIdentifier が過去の
GetAvailableNamedTimeZoneIdentifier の結果の
[[PrimaryIdentifier]]
フィールドの
ASCII-case-insensitive
match
であるなら、GetAvailableNamedTimeZoneIdentifier(
timeZoneIdentifier ) は、
[[Identifier]] が
[[PrimaryIdentifier]] である
Time Zone Identifier
Record を返さなければなりません。
これらの要件に対応する複雑さから、
AvailableNamedTimeZoneIdentifiers (および
GetAvailableNamedTimeZoneIdentifier) の結果は、
surrounding agent
の存続期間中は不変であることが推奨されます。
6.5.3 AvailablePrimaryTimeZoneIdentifiers ( )
抽象操作 AvailablePrimaryTimeZoneIdentifiers は引数を取らず、String の List
を返します。返される List
は、IANA タイムゾーンデータベースにおけるサポート対象の Zone 名と Link 名の整列済みの List
です。呼び出し時は次の手順を行います。
records を、AvailableNamedTimeZoneIdentifiers ()
とする。
result を新しい空の List
とする。
records の各要素 timeZoneIdentifierRecord について、
timeZoneIdentifierRecord .[[Identifier]] が
timeZoneIdentifierRecord .[[PrimaryIdentifier]] と等しいなら、
timeZoneIdentifierRecord .[[Identifier]] を result に追加する。
result を返す。
6.5.4 StringSplitToList ( S , separator )
抽象操作 StringSplitToList は引数 S (String)と separator (String)を取り、String の
List
を返します。
返される List
には、S のうち separator を含まず、直前および/または直後が separator
の出現である、互いに素なすべての部分文字列が含まれます。
そのような各 substring は、隣接する separator の間、S の先頭直前の
separator の後、または S の末尾直後の separator
の前では空文字列になり得ますが、その他では空にはなりません。
呼び出し時は次の手順を行います。
Assert : S
は空文字列ではない。
Assert :
separator は空文字列ではない。
separatorLength を separator の長さとする。
substrings を新しい空の List
とする。
i を 0 とする。
j を、StringIndexOf (S ,
separator , 0) とする。
j が not-found でない間、繰り返す。
T を、S の i から j までの substring とする。
T を substrings に追加する。
i を j + separatorLength に設定する。
j を、StringIndexOf (S ,
separator , i ) に設定する。
T を、S の i 以降の substring とする。
T を substrings に追加する。
substrings を返す。
6.6 計量単位識別子
本仕様は、Unicode 技術標準 #35
パート2 一般、6.2 単位識別子 で定義される コア単位識別子 (または同義の コア単位ID )を用いて計量単位を識別します。正規形は、Unicode 基本ラテン小文字(U+0061
ラテン小文字 a から U+007A ラテン小文字 z)と、ゼロ個以上の中間ハイフン(U+002D ハイフンマイナス)のみからなる文字列です。
コア単位識別子のうち、限られた集合のみが認可されています。
認可されていないコア単位識別子を使用しようとすると RangeError となります。
6.6.1 IsWellFormedUnitIdentifier ( unitIdentifier )
抽象操作 IsWellFormedUnitIdentifier は、引数 unitIdentifier (String)を取り、Boolean を返します。引数
unitIdentifier が、認可された単一単位、または認可された単一単位2つの除算で構成される複合単位として整形式の コア単位識別子
であることを検証します。呼び出し時の手順は以下の通りです:
IsSanctionedSingleUnitIdentifier (unitIdentifier )
が true なら、
true を返す。
i を StringIndexOf (unitIdentifier ,
"-per-" , 0) とする。
i が not-found または StringIndexOf (unitIdentifier ,
"-per-" , i + 1) が not-found でない場合、
false を返す。
Assert : 5文字の substring
"-per-" が unitIdentifier にちょうど1回、インデックス i に現れる。
numerator を substring (unitIdentifier ,
0, i ) とする。
denominator を substring (unitIdentifier ,
i + 5) とする。
IsSanctionedSingleUnitIdentifier (numerator )
および IsSanctionedSingleUnitIdentifier (denominator )
の両方が true なら、
true を返す。
false を返す。
6.6.2 IsSanctionedSingleUnitIdentifier ( unitIdentifier )
抽象操作 IsSanctionedSingleUnitIdentifier は、引数 unitIdentifier (String)を取り、Boolean を返します。引数
unitIdentifier が、現仕様で認可されている単一単位識別子(Common Locale Data Repository release
38 unit validity data のサブセット。今後拡大の可能性あり)のいずれかであることを検証します。Unicode 技術標準 #35
パート2 一般、6.2 単位識別子 にて説明される通り、単一単位識別子とは他の単位識別子の乗算や除算で構成されていない コア単位識別子 です。呼び出し時の手順は以下の通りです:
unitIdentifier が、下記 表2
に記載されていれば、true を返す。
それ以外は false を返す。
表2: ECMAScript で使用が認可された単一単位
単一単位識別子
acre
bit
byte
celsius
centimeter
day
degree
fahrenheit
fluid-ounce
foot
gallon
gigabit
gigabyte
gram
hectare
hour
inch
kilobit
kilobyte
kilogram
kilometer
liter
megabit
megabyte
meter
microsecond
mile
mile-scandinavian
milliliter
millimeter
millisecond
minute
month
nanosecond
ounce
percent
petabyte
pound
second
stone
terabit
terabyte
week
yard
year
6.6.3 AvailableCanonicalUnits ( )
抽象操作 AvailableCanonicalUnits は引数を取らず、String の List
を返します。返される List
は 辞書式コードユニット順序
で整列され、下記 表2
の各行(ヘッダー行除く)に記載された単純単位識別子の一意な値から構成されます。
6.7 番号体系識別子
本仕様は、Unicode 技術標準 #35
パート3 数値、1. 番号体系 で参照される名前に対応する 番号体系識別子 を用いて番号体系を識別します。正規形は、Unicode 基本ラテン小文字(U+0061 ラテン小文字 a から U+007A
ラテン小文字 z)のみからなる文字列です。
6.7.1 AvailableCanonicalNumberingSystems ( )
実装定義 の抽象操作
AvailableCanonicalNumberingSystems は引数を取らず、String の List
を返します。返される List
は 辞書式コードユニット順序
で整列され、Intl.DateTimeFormat, Intl.NumberFormat, Intl.RelativeTimeFormat
オブジェクトの機能が提供される番号体系を識別する一意な正規化済み番号体系識別子を含みます。List
には、下記 表28 の各行(ヘッダー行除く)の Numbering System
値を必ず含めなければなりません。
6.8 照合タイプ
本仕様は、Unicode 技術標準 #35
パート5 照合、3.1 照合タイプ で定義される 照合タイプ
を用いて照合を識別します。正規形は、Unicode 基本ラテン小文字(U+0061 ラテン小文字 a から U+007A ラテン小文字 z)と、ゼロ個以上の中間ハイフン(U+002D
ハイフンマイナス)のみからなる文字列です。
6.8.1 AvailableCanonicalCollations ( )
実装定義 の抽象操作
AvailableCanonicalCollations は引数を取らず、String の List
を返します。返される List
は 辞書式コードユニット順序
で整列され、実装が Intl.Collator オブジェクトの機能を提供する照合を識別する一意な正規化済み 照合タイプ を含みます。
6.9 暦の種類
本仕様は、Unicode 技術標準 #35
パート4 日付、2. 暦要素 で定義される 暦の種類
を用いて暦を識別します。正規形は、Unicode 基本ラテン小文字(U+0061 ラテン小文字 a から U+007A ラテン小文字 z)と、ゼロ個以上の中間ハイフン(U+002D
ハイフンマイナス)のみからなる文字列です。
6.9.1 AvailableCalendars ( )
実装定義 の抽象操作
AvailableCalendars は引数を取らず、String の List
を返します。返される List
は 辞書式コードユニット順序
で整列され、実装が Intl.DateTimeFormat オブジェクトの機能を提供する一意な正規形 暦の種類 (6.9 )を含みます。また、エイリアスも含みます(例えば
"islamicc" と "islamic-civil" の両方またはいずれも含めないなど)。List
には "iso8601" を必ず含めなければなりません。
6.10 パターン文字列の種類
パターン文字列 は
String 値であり、"{key}" 形式の部分文字列をゼロ個以上含みます。key には ASCII
ワード文字 のみからなる空でない任意の並びが利用できます。抽象パターン文字列の構文は実装詳細であり、ECMA-402 の利用者には公開されません。
7 標準の組込み ECMAScript オブジェクトに対する要件
本書で特に指定されていない限り、本規格で記載されているオブジェクト、関数、および コンストラクタ は、ECMAScript
標準組込みオブジェクト に規定された一般的な要件および制約の対象となります。
8 Intl オブジェクト
Intl オブジェクト :
%Intl% である。
"Intl" プロパティの初期値であり、グローバルオブジェクト の一部である。
通常のオブジェクト である。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
関数オブジェクト ではない。
[[Construct]] 内部メソッドを持たず、コンストラクタ として new
演算子で使用できない。
[[Call]] 内部メソッドを持たず、関数として呼び出すことはできない。
[[FallbackSymbol]] 内部スロットを持つ。これは現在の realm における新しい %Symbol% であり、[[Description]] は "IntlLegacyConstructedSymbol" である。
8.1 Intl オブジェクトの値プロパティ
8.1.1 Intl [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は、String 値 "Intl" です。
このプロパティの属性は { [[Writable]] : false , [[Enumerable]] : false , [[Configurable]] : true } です。
8.2 Intl オブジェクトのコンストラクタのプロパティ
Intl.Locale を除き、以下の各 コンストラクタ
はロケール依存サービスを提供するオブジェクトを生成する サービスコンストラクタ です。
8.2.1 Intl.Collator ( . . . )
10
を参照。
8.2.2 Intl.DateTimeFormat ( . . . )
11 を参照。
8.2.3 Intl.DisplayNames ( . . . )
12 を参照。
8.2.4 Intl.DurationFormat ( . . . )
13 を参照。
8.2.5 Intl.ListFormat ( . . . )
14
を参照。
8.2.6 Intl.Locale ( . . . )
15 を参照。
8.2.7 Intl.NumberFormat ( . . . )
16 を参照。
8.2.8 Intl.PluralRules ( . . . )
17 を参照。
8.2.9 Intl.RelativeTimeFormat ( . . . )
18 を参照。
8.2.10 Intl.Segmenter ( . . . )
19
を参照。
8.3 Intl オブジェクトの関数プロパティ
8.3.1 Intl.getCanonicalLocales ( locales )
getCanonicalLocales メソッドが locales 引数で呼び出された場合、以下の手順を行います:
ll を ? CanonicalizeLocaleList (locales )
とする。
CreateArrayFromList (ll )
を返す。
8.3.2 Intl.supportedValuesOf ( key )
supportedValuesOf メソッドが key 引数で呼び出された場合、以下の手順を行います:
key を ? ToString (key )
とする。
key が "calendar" なら、
list を新しい空の List
とする。
AvailableCalendars () の各要素
identifier について、
canonical を CanonicalizeUValue ("ca" ,
identifier ) とする。
identifier が canonical なら、
identifier を list に追加する。
それ以外で key が "collation" なら、
list を AvailableCanonicalCollations ()
とする。
それ以外で key が "currency" なら、
list を AvailableCanonicalCurrencies ()
とする。
それ以外で key が "numberingSystem" なら、
list を AvailableCanonicalNumberingSystems ()
とする。
それ以外で key が "timeZone" なら、
list を AvailablePrimaryTimeZoneIdentifiers ()
とする。
それ以外で key が "unit" なら、
list を AvailableCanonicalUnits ()
とする。
それ以外の場合、
RangeError 例外を投げる。
CreateArrayFromList (list )
を返す。
9 ロケールとパラメータのネゴシエーション
サービスコンストラクタ は、引数 locales および
options
によって表される要求を、実装の実際の能力とネゴシエートするための共通のパターンを使用します。その共通の振る舞いは、能力を記述する内部スロット、これらの内部スロットを用いる抽象操作 、および以下で定義される特殊化されたデータ型の観点からここで説明します。
利用可能ロケール一覧 は、言語タグ からなる、任意順序で重複のないList であり、各要素は構文的に整形式 で、正規化済み であり、Unicode
ロケール拡張シーケンス を含みません。これは、特定のコンテキストにおいて実装が機能を提供するすべてのロケールを表します。
言語優先リスト は、優先度の高い順にロケールの嗜好の並びを表す、構文的に整形式 かつ正規化済み の言語タグ のList です。これは、BCP 47 の RFC 4647 セクション 2.3
で定義される同名の用語に対応しますが、"*" 要素を禁止し、内容は正規化済みのもののみを含みます。
Resolution
Option Descriptor は、Record であり、フィールド
[[Key]] (文字列。通常は [[RelevantExtensionKeys]] のList の要素)と
[[Property]] (文字列)を持ち、さらに任意で [[Type]] (boolean または string )および
[[Values]] (empty またはList (要素はECMAScript
言語値 ))のいずれかまたは両方を持ちます。これは、オブジェクト構築時にロケール解決に関係するオプションの読み取り方法を記述します。
9.1 サービスコンストラクタの内部スロット
各サービスコンストラクタ は、次の内部スロットを持ちます。
注
例として、ある DateTimeFormat の実装は、内部スロット
[[AvailableLocales]] に
言語タグ
"fa-IR" を含め、(
11.2.3
に従い)内部スロット
[[RelevantExtensionKeys]] にキー
"ca" 、
"hc" 、
"nu"
を含めなければなりません。そのロケールの既定の暦は通常
"persian" ですが、実装は
"gregory" 、
"islamic" 、
"islamic-civil"
もサポートし得ます。したがって、DateTimeFormat の
[[LocaleData]] 内部スロットにある
Record には、[[fa-IR]]
フィールドが含まれ、その値は {
[[ca]] : «
"persian" ,
"gregory" ,
"islamic" ,
"islamic-civil"
»,
[[hc]] : « … »,
[[nu]] : « … » }
のようになります。他のロケール名フィールドも同様の形状の値を持ちますが、各
List 内の要素は異なる場合があります。
9.2 抽象操作
9.2.1 CanonicalizeLocaleList ( locales )
抽象操作 CanonicalizeLocaleList は引数 locales (ECMAScript
言語値 )を取り、言語優先リスト を正常完了で含む か、throw
completion のいずれかを返します。呼び出し時には次の手順を行います。
locales が undefined のとき、
新しい空のList を返す。
seen を新しい空のList とする。
locales がString
である か、locales がObject で かつ
locales が [[InitializedLocale]] 内部スロットを持つ場合、
O を ! CreateArrayFromList («
locales ») とする。
それ以外の場合、
O を ? ToObject (locales )
とする。
len を ? LengthOfArrayLike (O )
とする。
k を 0 とする。
k < len の間、繰り返す、
Pk を ! ToString (𝔽 (k )) とする。
kPresent を ? HasProperty (O ,
Pk ) とする。
kPresent が true ならば、
kValue を ? Get (O ,
Pk ) とする。
kValue がString
でない かつ kValue がObject
でない 場合、TypeError 例外を投げる。
kValue がObject
である かつ kValue が [[InitializedLocale]] 内部スロットを持つ場合、
tag を kValue .[[Locale]] とする。
それ以外の場合、
tag を ? ToString (kValue )
とする。
IsStructurallyValidLanguageTag (tag )
が false の場合、RangeError 例外を投げる。
canonicalizedTag を CanonicalizeUnicodeLocaleId (tag )
とする。
seen が canonicalizedTag を含まない場合、seen に
canonicalizedTag を追加する。
k を k + 1 に設定する。
seen を返す。
注 1
規範的でない要約: この抽象操作は、引数
locales を配列として解釈し、その要素を
List へコピーし、要素が
言語タグ として構文的に整形式であることを検証し、正規化し、重複を省きます。
注 2
kValue が String または Object であることを要求するため、数値
NaN が
言語タグ
"nan" (閩南語を表す)として解釈されることはありません。
9.2.2 CanonicalizeUValue ( ukey , uvalue )
抽象操作 CanonicalizeUValue は引数 ukey (Unicode 技術標準 #35 パート1 コア
セクション 3.6.1 キーとタイプの定義 で定義されるUnicode
ロケール拡張シーケンス のキー)および uvalue (String)を取り、String を返します。返される String
は、uvalue を ukey の値としての正規かつ大文字小文字正規化された形にしたものです。呼び出し時には次の手順を行います。
lowerValue を、uvalue のASCII-lowercase とする。
canonicalized を、Unicode 技術標準 #35 パート1
コア、付録 C LocaleId Canonicalization セクション 5 Canonicalizing Syntax, Processing
LocaleIds に従い、キー ukey の値として lowerValue を正規化した結果の String
値とする。
注: 実装は Common Locale Data Repository が提供する common/bcp47 内の 'u' 拡張データ(https://cldr.unicode.org/ )を使用することが推奨されます。
canonicalized を返す。
9.2.3 LookupMatchingLocaleByPrefix ( availableLocales ,
requestedLocales )
抽象操作 LookupMatchingLocaleByPrefix は引数 availableLocales (利用可能ロケール一覧 )および
requestedLocales (言語優先リスト )を取り、フィールド [[locale]] (Unicode 正規化ロケール識別子 )および [[extension]] (Unicode
ロケール拡張シーケンス またはempty )を持つRecord 、または
undefined を返します。これは BCP 47 の RFC 4647 セクション 3.4 で定義される
Lookup アルゴリズムを用いて、Unicode ロケール拡張シーケンス を無視しつつ
requestedLocales を満たす availableLocales
の最適な要素を決定します。非既定の一致が見つかった場合、availableLocales から一致した言語タグ を含む
[[locale]] フィールドと、requestedLocales の対応する要素のUnicode
ロケール拡張シーケンス (または要求された言語タグ にそのシーケンスがない場合は
empty )を含む [[extension]] フィールドを持つRecord を返します。呼び出し時には次の手順を行います。
requestedLocales の各要素 locale について、
extension を empty とする。
locale がUnicode
ロケール拡張シーケンス を含む場合、
extension を locale のUnicode
ロケール拡張シーケンス に設定する。
locale を、あらゆるUnicode
ロケール拡張シーケンス が取り除かれた String 値に設定する。
prefix を locale とする。
prefix が空文字列でない間、繰り返す、
availableLocales が prefix を含む場合、Record
{ [[locale]] : prefix , [[extension]] : extension } を返す。
prefix が "-" (コードユニット 0x002D
HYPHEN-MINUS)を含む場合、pos を prefix 内で最後に現れる
"-" の位置とする。含まない場合、pos を 0 とする。
pos ≥ 2 かつ prefix の pos - 2 から
pos - 1 までのsubstring が
"-" である間、繰り返す、
pos を pos - 2 に設定する。
prefix を、prefix の 0 から pos までのsubstring に設定する。
undefined を返す。
注
要求されたロケールが
Unicode 技術標準 #35
パート1 コア BCP 47 T 拡張 の
サブタグ 列を含む場合、このアルゴリズムでの切り詰めにより、一時的に不正な
言語タグ が生成される可能性があります。しかし、
availableLocales
は有効な
言語タグ のみを含むため、それらが返されることはありません。
9.2.4 LookupMatchingLocaleByBestFit ( availableLocales ,
requestedLocales )
実装定義 の抽象操作
LookupMatchingLocaleByBestFit は、引数 availableLocales (利用可能ロケール一覧 )および
requestedLocales (言語優先リスト )を取り、フィールド [[locale]] (Unicode 正規化ロケール識別子 )および [[extension]] (Unicode
ロケール拡張シーケンス またはempty )を持つRecord 、または
undefined を返します。これは、Unicode
ロケール拡張シーケンス を無視しつつ、requestedLocales を満たす
availableLocales の最適な要素を決定します。アルゴリズムは実装依存ですが、典型的な requestedLocales
の利用者が、LookupMatchingLocaleByPrefix
アルゴリズムと同等以上と考える結果を生成すべきです。非既定の一致が見つかった場合、availableLocales から一致した言語タグ を含む
[[locale]] フィールドと、requestedLocales の対応する要素のUnicode
ロケール拡張シーケンス (または要求された言語タグ にそのシーケンスがない場合は
empty )を含む [[extension]] フィールドを持つRecord を返します。
9.2.5 UnicodeExtensionComponents ( extension )
抽象操作 UnicodeExtensionComponents は引数 extension (Unicode ロケール拡張シーケンス )を取り、フィールド
[[Attributes]] と [[Keywords]] を持つRecord を返します。これは
extension を、ユニークな属性のList と、ユニークなキーを持つkeywords のList に分解します。属性やkeyword キーの
2 回目以降の出現は無視されます。呼び出し時には次の手順を行います。
Assert :
extension のASCII-lowercase は
extension と同一である。
Assert :
extension の 0 から 3 までのsubstring は
"-u-" である。
attributes を新しい空のList とする。
keywords を新しい空のList とする。
keyword を undefined とする。
size を extension の長さとする。
k を 3 とする。
k < size の間、繰り返す、
e を StringIndexOf (extension ,
"-" , k ) とする。
e が not-found なら len を
size - k とし、そうでなければ len を e -
k とする。
subtag を、extension の k から k +
len までのsubstring とする。
注: keyword は、最初のサブタグが長さ 2
のキーであり、その後に続く(もしあれば)サブタグは長さが包含区間
[3, 8] にある一連のサブタグ で、両者の間の "-"
区切りと併せて値を構成します。属性は、すべてのkeywords に先行する、長さが包含区間
[3, 8] にある 1 つのサブタグ です。
Assert :
len ≥ 2。
keyword が undefined で len ≠ 2 の場合、
subtag が attributes の要素でなければ、attributes
に subtag を追加する。
それ以外で len = 2 の場合、
keyword をRecord
{ [[Key]] : subtag , [[Value]] : "" } に設定する。
keywords に [[Key]] が
keyword .[[Key]]
である要素が存在しなければ、keywords に keyword を追加する。
それ以外で keyword .[[Value]] が空文字列である場合、
keyword .[[Value]] を
subtag に設定する。
それ以外の場合、
keyword .[[Value]]
を、keyword .[[Value]] 、"-" 、subtag
の連結 に設定する。
k を k + len + 1 に設定する。
次を返す: Record
{ [[Attributes]] : attributes , [[Keywords]] : keywords }。
9.2.6 InsertUnicodeExtensionAndCanonicalize ( locale ,
attributes , keywords )
抽象操作 InsertUnicodeExtensionAndCanonicalize は引数 locale (言語タグ )、attributes (文字列のList )、および
keywords (Record のList )を取り、Unicode
正規化ロケール識別子 を返します。これは、locale に attributes と
keywords をUnicode
ロケール拡張シーケンス として組み込み、その結果を正規化して返します。呼び出し時には次の手順を行います。
Assert : locale
はUnicode
ロケール拡張シーケンス を含まない。
extension を "-u" とする。
attributes の各要素 attr について、
extension を
extension 、"-" 、attr の連結 に設定する。
keywords の各Record
{ [[Key]] , [[Value]] }
keyword について、
extension を
extension 、"-" 、keyword .[[Key]] の連結 に設定する。
keyword .[[Value]]
が空文字列でない場合、extension を
extension 、"-" 、keyword .[[Value]] の連結 に設定する。
extension が "-u" なら、CanonicalizeUnicodeLocaleId (locale )
を返す。
privateIndex を StringIndexOf (locale ,
"-x-" , 0) とする。
privateIndex が not-found の場合、
newLocale を locale と extension の連結 とする。
それ以外の場合、
preExtension を locale の 0 から privateIndex
までのsubstring とする。
postExtension を locale の privateIndex
以降のsubstring とする。
newLocale を
preExtension 、extension 、postExtension の連結 とする。
Assert : IsStructurallyValidLanguageTag (newLocale )
は true である。
CanonicalizeUnicodeLocaleId (newLocale )
を返す。
9.2.7 ResolveLocale ( availableLocales ,
requestedLocales , options , relevantExtensionKeys ,
localeData )
抽象操作 ResolveLocale は引数 availableLocales (利用可能ロケール一覧 )、requestedLocales (言語優先リスト )、options (Record )、relevantExtensionKeys (文字列のList )、および
localeData (Record )を取り、Record を返します。これは、BCP 47 の RFC 4647 セクション 3
で定義された「lookup」を実行し、options .[[localeMatcher]] で指定された通りに
LookupMatchingLocaleByBestFit
アルゴリズムまたは LookupMatchingLocaleByPrefix
アルゴリズムを用いて requestedLocales を満たす availableLocales の最適な要素を決定し、Unicode
ロケール拡張シーケンス を無視し、マッチの表現を返します。その表現には、localeData
からの対応するデータと、relevantExtensionKeys の各要素について解決された値(マッチしたロケールのデータを既定とし、要求されたUnicode
ロケール拡張シーケンス があればそれを優先し、さらに options
に値があればそれを優先)を含みます。requestedLocales のマッチした要素がUnicode ロケール拡張シーケンス を含む場合、[[Locale]] フィールドの言語タグ にそれがコピーされます。ただし、key の値が
relevantExtensionKeys に含まれない、または type の値が options の別値に置き換えられる
keyword のUnicode ロケール非終端記号 は省略します。呼び出し時には次の手順を行います。
matcher を options .[[localeMatcher]] とする。
matcher が "lookup" のとき、
r を LookupMatchingLocaleByPrefix (availableLocales ,
requestedLocales ) とする。
それ以外の場合、
r を LookupMatchingLocaleByBestFit (availableLocales ,
requestedLocales ) とする。
r が undefined なら、r をRecord
{ [[locale]] : DefaultLocale (), [[extension]] : empty } に設定する。
foundLocale を r .[[locale]] とする。
foundLocaleData を localeData .[[<foundLocale >]]
とする。
Assert :
foundLocaleData はRecord である。
result を新しいRecord
とする。
result .[[LocaleData]] を foundLocaleData
に設定する。
r .[[extension]] が empty
でない場合、
components を UnicodeExtensionComponents (r .[[extension]] ) とする。
keywords を components .[[Keywords]] とする。
それ以外の場合、
keywords を新しい空のList
とする。
supportedKeywords を新しい空のList
とする。
relevantExtensionKeys の各要素 key について、
keyLocaleData を foundLocaleData .[[<key >]]
とする。
Assert :
keyLocaleData はList である。
value を keyLocaleData [0] とする。
Assert :
value はString
である か、または null である。
supportedKeyword を empty とする。
keywords が [[Key]] が key
である要素を含むなら、
entry を、keywords のうち [[Key]] が key である要素とする。
requestedValue を entry .[[Value]] とする。
requestedValue が空文字列でない場合、
keyLocaleData が requestedValue を含むなら、
value を requestedValue に設定する。
supportedKeyword をRecord
{ [[Key]] : key , [[Value]] :
value } に設定する。
それ以外で keyLocaleData が "true" を含む場合、
value を "true" に設定する。
supportedKeyword をRecord
{ [[Key]] : key , [[Value]] : "" }
に設定する。
Assert :
options は [[<key >]] フィールドを持つ。
optionsValue を options .[[<key >]] とする。
Assert :
optionsValue はString
である か、または undefined もしくは
null である。
optionsValue がString
である 場合、
ukey を key のASCII-lowercase
とする。
optionsValue を CanonicalizeUValue (ukey ,
optionsValue ) に設定する。
optionsValue が空文字列である場合、
optionsValue を "true" に設定する。
SameValue (optionsValue ,
value ) が false かつ keyLocaleData が
optionsValue を含む場合、
value を optionsValue に設定する。
supportedKeyword を empty に設定する。
supportedKeyword が empty
でない場合、supportedKeywords に supportedKeyword を追加する。
result .[[<key >]] を value に設定する。
supportedKeywords が空でない場合、
supportedAttributes を新しい空のList
とする。
foundLocale を InsertUnicodeExtensionAndCanonicalize (foundLocale ,
supportedAttributes , supportedKeywords ) に設定する。
result .[[Locale]] を foundLocale に設定する。
result を返す。
9.2.8 ResolveOptions ( constructor ,
localeData , locales , options [ , specialBehaviours [
, modifyResolutionOptions ] ] )
抽象操作 ResolveOptions は引数 constructor (サービスコンストラクタ )、localeData (Record )、locales (ECMAScript
言語値 )、options (ECMAScript
言語値 )、および任意引数 specialBehaviours (enum
のList )、modifyResolutionOptions (1
つのパラメータを持つ抽象クロージャ )を取り、正常完了で含む
Record (フィールド
[[Options]] (Object)、[[ResolvedLocale]] (Record )、[[ResolutionOptions]] (Record ))か、throw
completion を返します。これは constructor
の入力を読み取り、ロケールへ解決します。呼び出し時には次の手順を行います。
requestedLocales を ? CanonicalizeLocaleList (locales )
とする。
specialBehaviours が存在し require-options を含み、かつ
options が undefined の場合、TypeError
例外を投げる。
specialBehaviours が存在し coerce-options
を含む場合、options を ? CoerceOptionsToObject (options )
に設定する。そうでなければ、options を ? GetOptionsObject (options )
に設定する。
matcher を ? GetOption (options ,
"localeMatcher" , string , «
"lookup" , "best fit" », "best
fit" ) とする。
opt をRecord
{ [[localeMatcher]] : matcher } とする。
constructor .[[ResolutionOptionDescriptors]]
の各Resolution Option Descriptor
desc について、
desc が [[Type]] フィールドを持つ場合、type を
desc .[[Type]] とし、そうでなければ type を
string とする。
desc が [[Values]]
フィールドを持つ場合、values を desc .[[Values]] とし、そうでなければ values を
empty とする。
value を ? GetOption (options ,
desc .[[Property]] , type ,
values , undefined ) とする。
value が undefined でない場合、
value を ! ToString (value )
に設定する。
value が type のUnicode
ロケール非終端記号 にマッチしない場合、RangeError
例外を投げる。
key を desc .[[Key]] とする。
opt .[[<key >]] を value に設定する。
modifyResolutionOptions
が存在する場合、! modifyResolutionOptions (opt ) を実行する。
resolution を ResolveLocale (constructor .[[AvailableLocales]] , requestedLocales ,
opt , constructor .[[RelevantExtensionKeys]] , localeData ) とする。
Record
{ [[Options]] : options , [[ResolvedLocale]] : resolution , [[ResolutionOptions]] : opt } を返す。
9.2.9 FilterLocales ( availableLocales ,
requestedLocales , options )
抽象操作 FilterLocales は引数 availableLocales (利用可能ロケール一覧 )、requestedLocales (言語優先リスト )、および options (ECMAScript
言語値 )を取り、正常完了で含む
Unicode
正規化ロケール識別子 のList 、または
throw
completion を返します。これは、BCP 47 の RFC 4647 セクション 3
で定義される「filtering」を実行し、options で指定された通りに LookupMatchingLocaleByBestFit
アルゴリズムまたは LookupMatchingLocaleByPrefix
アルゴリズムを用いて、availableLocales が一致ロケールを含む requestedLocales
の要素を相対順序を保って返します。呼び出し時には以下の手順を行います。
options を ? CoerceOptionsToObject (options )
に設定する。
matcher を ? GetOption (options ,
"localeMatcher" , string , «
"lookup" , "best fit" », "best
fit" ) とする。
subset を新しい空のList とする。
requestedLocales の各要素 locale について、
matcher が "lookup" の場合、
match を LookupMatchingLocaleByPrefix (availableLocales ,
« locale ») とする。
それ以外の場合、
match を LookupMatchingLocaleByBestFit (availableLocales ,
« locale ») とする。
match が undefined でない場合、subset に
locale を追加する。
CreateArrayFromList (subset )
を返す。
9.2.10 GetOptionsObject ( options )
抽象操作 GetOptionsObject は引数 options (ECMAScript
言語値 )を取り、Object を正常完了で含む か、throw
completion を返します。これは、GetOption での使用に適した Object を返し、options
自身または既定の空の Object のいずれかです。options が undefined でも Object でもない場合は
TypeError を投げます。呼び出し時には次の手順を行います。
options が undefined なら、
OrdinaryObjectCreate (null )
を返す。
options がObject である なら、
options を返す。
TypeError 例外を投げる。
9.2.11 CoerceOptionsToObject ( options )
抽象操作 CoerceOptionsToObject は引数 options (ECMAScript
言語値 )を取り、Object を正常完了で含む か、throw
completion を返します。これは options を GetOption での使用に適した Object へ強制変換し、既定は空の
Object です。非 null のプリミティブ値を Object へ強制するため、新機能では GetOptionsObject の使用が推奨されます。呼び出し時には次の手順を行います。
options が undefined なら、
OrdinaryObjectCreate (null )
を返す。
? ToObject (options )
を返す。
9.2.12 GetOption ( options , property ,
type , values , default )
抽象操作 GetOption は引数 options (Object)、property (property
key )、type (boolean または
string )、values (empty またはList (要素はECMAScript
言語値 ))、および default (required またはECMAScript
言語値 )を取り、ECMAScript
言語値 を正常完了で含む か、throw
completion を返します。これは、options の指定されたプロパティの値を取り出し、必要な
type に変換し、values が empty でない場合にはその中に許可されているかを検査し、値が
undefined の場合には default を代入します。呼び出し時には次の手順を行います。
value を ? Get (options ,
property ) とする。
value が undefined の場合、
default が required
なら、RangeError 例外を投げる。
default を返す。
type が boolean の場合、
value を ToBoolean (value )
に設定する。
それ以外の場合、
Assert :
type は string である。
value を ? ToString (value )
に設定する。
values が empty でなく、かつ values が
value を含まない場合、RangeError 例外を投げる。
value を返す。
9.2.13 GetBooleanOrStringNumberFormatOption ( options ,
property , stringValues , fallback )
抽象操作 GetBooleanOrStringNumberFormatOption は引数
options (Object)、property (property
key )、stringValues (文字列のList )、および
fallback (ECMAScript
言語値 )を取り、Boolean、String、または fallback のいずれかを正常完了で含む か、throw
completion を返します。これは、与えられた options オブジェクトから property
という名前のプロパティの値を取り出します。その値が undefined なら fallback を返し、その値が
true なら true を返し、その値が false に強制されれば
false を返し、それ以外の場合はそれを String に強制し、stringValues
で許可されていればその結果を返します。呼び出し時には次の手順を行います。
value を ? Get (options ,
property ) とする。
value が undefined なら、fallback を返す。
value が true なら、true を返す。
ToBoolean (value )
が false なら、false を返す。
value を ? ToString (value )
に設定する。
stringValues が value を含まない場合、RangeError 例外を投げる。
value を返す。
9.2.14 DefaultNumberOption ( value , minimum ,
maximum , fallback )
抽象操作 DefaultNumberOption は引数 value (ECMAScript
言語値 )、minimum (整数 )、maximum (整数 )、および
fallback (整数 または
undefined )を取り、正常完了で含む
整数 または
undefined 、もしくはthrow
completion を返します。これは value を整数 に変換し、許可された範囲内にあるかを検査し、必要に応じて
fallback 値を補います。呼び出し時には次の手順を行います。
value が undefined なら、fallback を返す。
value を ? ToNumber (value )
に設定する。
value が有限 でない、または ℝ (value )
< minimum 、もしくは ℝ (value ) >
maximum の場合、RangeError 例外を投げる。
floor (ℝ (value ))
を返す。
9.2.15 GetNumberOption ( options , property ,
minimum , maximum , fallback )
抽象操作 GetNumberOption は引数
options (Object)、property (String)、minimum (整数 )、maximum (整数 )、および
fallback (整数 または
undefined )を取り、正常完了で含む
整数 または
undefined 、もしくはthrow
completion を返します。これは、与えられた options オブジェクトから property
という名前のプロパティの値を取り出し、それを整数 に変換し、許可範囲にあるかを検査し、必要に応じて
fallback を補います。呼び出し時には次の手順を行います。
value を ? Get (options ,
property ) とする。
? DefaultNumberOption (value ,
minimum , maximum , fallback ) を返す。
9.2.16 PartitionPattern ( pattern )
抽象操作 PartitionPattern は引数 pattern (パターン文字列 )を取り、フィールド [[Type]] (String)および [[Value]] (String または
undefined )を持つRecord のList を返します。[[Type]] が "literal" の場合に限り [[Value]] は String 値となり、それ以外の場合は undefined
となります。呼び出し時には次の手順を行います。
result を新しい空のList とする。
placeholderEnd を -1 とする。
placeholderStart を StringIndexOf (pattern ,
"{" , 0) とする。
placeholderStart が not-found でない間、繰り返す、
literal を、pattern の placeholderEnd + 1 から
placeholderStart までのsubstring とする。
literal が空文字列でない場合、
Record
{ [[Type]] : "literal" , [[Value]] : literal } を
result に追加する。
placeholderEnd を StringIndexOf (pattern ,
"}" , placeholderStart ) に設定する。
Assert :
placeholderEnd は not-found ではなく、かつ
placeholderStart < placeholderEnd である。
placeholderName を、pattern の placeholderStart +
1 から placeholderEnd までのsubstring とする。
Record
{ [[Type]] : placeholderName , [[Value]] : undefined } を
result に追加する。
placeholderStart を StringIndexOf (pattern ,
"{" , placeholderEnd ) に設定する。
tail を、pattern の placeholderEnd + 1 以降のsubstring とする。
tail が空文字列でない場合、
Record
{ [[Type]] : "literal" , [[Value]] : tail } を result
に追加する。
result を返す。
10 Collator オブジェクト
10.1 Intl.Collator コンストラクタ
Intl.Collator のコンストラクタ :
%Intl.Collator% である。
Intl オブジェクト の
"Collator" プロパティの初期値である。
Intl
オブジェクト のすべてのサービスコンストラクタ プロパティに共通する挙動は、9.1 に規定される。
10.1.1 Intl.Collator ( [ locales [ , options ]
] )
Intl.Collator 関数が省略可能な引数 locales と options で呼び出されたとき、次の手順を行う:
NewTarget が undefined なら、newTarget を アクティブ関数オブジェクト
とし、そうでなければ newTarget を NewTarget とする。
internalSlotsList を « [[InitializedCollator]] ,
[[Locale]] , [[Usage]] , [[Collation]] , [[Numeric]] , [[CaseFirst]] , [[Sensitivity]] , [[IgnorePunctuation]] , [[BoundCompare]] » とする。
collator を ? OrdinaryCreateFromConstructor (newTarget ,
"%Intl.Collator.prototype%" , internalSlotsList ) とする。
注: ResolveOptions のためのロケールデータの情報源は
options の "usage" プロパティに依存するが、以下の 2
つのステップは、その参照に先立って観測可能でなければならず(かつ ResolveOptions の内部で観測可能に繰り返されてはならない)。
requestedLocales を ? CanonicalizeLocaleList (locales )
とする。
options を ? CoerceOptionsToObject (options )
に設定する。
usage を ? GetOption (options ,
"usage" , string , « "sort" ,
"search" », "sort" ) とする。
collator .[[Usage]] を usage に設定する。
usage が "sort" なら、
localeData を %Intl.Collator% .[[SortLocaleData]] とする。
それ以外の場合、
localeData を %Intl.Collator% .[[SearchLocaleData]] とする。
optionsResolution を ? ResolveOptions (%Intl.Collator% ,
localeData , CreateArrayFromList (requestedLocales ),
options ) とする。
r を optionsResolution .[[ResolvedLocale]]
とする。
collator .[[Locale]] を r .[[Locale]] に設定する。
もし r .[[co]] が null
なら、collation を "default" とし、そうでなければ collation を
r .[[co]] とする。
collator .[[Collation]] を collation に設定する。
collator .[[Numeric]] を SameValue (r .[[kn]] , "true" ) に設定する。
collator .[[CaseFirst]] を r .[[kf]] に設定する。
resolvedLocaleData を r .[[LocaleData]]
とする。
usage が "sort" なら defaultSensitivity を
"variant" とし、そうでなければ defaultSensitivity を
resolvedLocaleData .[[sensitivity]] とする。
collator .[[Sensitivity]] を ? GetOption (options ,
"sensitivity" , string , «
"base" , "accent" , "case" ,
"variant" », defaultSensitivity ) に設定する。
defaultIgnorePunctuation を resolvedLocaleData .[[ignorePunctuation]] とする。
collator .[[IgnorePunctuation]] を
? GetOption (options ,
"ignorePunctuation" , boolean ,
empty , defaultIgnorePunctuation ) に設定する。
collator を返す。
注
10.2 Intl.Collator コンストラクタのプロパティ
Intl.Collator のコンストラクタ :
10.2.1 Intl.Collator.prototype
Intl.Collator.prototype の値は %Intl.Collator.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
10.2.2 Intl.Collator.supportedLocalesOf ( locales [ ,
options ] )
supportedLocalesOf メソッドが引数 locales と options
で呼び出されたとき、次の手順を行う:
availableLocales を %Intl.Collator% .[[AvailableLocales]] とする。
requestedLocales を ? CanonicalizeLocaleList (locales )
とする。
? FilterLocales (availableLocales ,
requestedLocales , options ) を返す。
10.2.3 内部スロット
[[AvailableLocales]] 内部スロットの値は、9.1 に記述された制約の範囲内で実装定義 である。[[RelevantExtensionKeys]] 内部スロットの値は List
であり、要素 "co" を必ず含み、要素 "kf" および "kn"
のいずれかまたは両方を含んでもよく、その他の要素を含んではならない。
注
Unicode Technical
Standard #35 Part 1 Core, Section 3.6.1 Key and Type Definitions では、照合に関連する 10
個のロケール拡張キーが説明されている:照合器の用途と特殊化のための
"co" 、代替処理のための
"ka" 、第二レベル重みの逆順のための
"kb" 、ケースレベルのための
"kc" 、ケース優先のための
"kf" 、ひらがなの第四レベルのための
"kh" 、正規化のための
"kk" 、数値のための
"kn" 、並べ替え順序のための
"kr" 、照合強度のための
"ks" 、および可変トップのための
"vt" 。しかし Collator では、用途はオプションオブジェクトの
"usage" プロパティで、代替処理はオプションオブジェクトの
"ignorePunctuation"
プロパティで、ケースレベルおよび強度はオプションオブジェクトの
"sensitivity"
プロパティで指定される。
"co" キーは
言語タグ 内で照合器の特殊化に対してのみサポートされ、
"kb" 、
"kh" 、
"kk" 、
"kr" 、
"vt"
のキーはこのバージョンの国際化 API では許可されない。残りのキーのサポートは実装依存である。
[[ResolutionOptionDescriptors]] 内部スロットの値は « {
[[Key]] : "co" , [[Property]] : "collation" }, { [[Key]] : "kn" , [[Property]] :
"numeric" , [[Type]] : boolean
}, { [[Key]] : "kf" , [[Property]] : "caseFirst" , [[Values]] : « "upper" , "lower" ,
"false" » } » である。
[[SortLocaleData]] および [[SearchLocaleData]]
内部スロットの値は、9.1 に記述された制約および以下の追加制約の範囲内で実装定義 であり、すべてのロケール値
locale について次を満たす:
[[SortLocaleData]] .[[<locale >]].[[co]] と [[SearchLocaleData]] .[[<locale >]].[[co]] の最初の要素は null でなければならない。
"standard" および "search" の値は、いかなる [[SortLocaleData]] .[[<locale >]].[[co]] および [[SearchLocaleData]] .[[<locale >]].[[co]] の List
においても使用してはならない。
[[SearchLocaleData]] .[[<locale >]] は、[[sensitivity]] フィールドを持ち、その String 値は
"base" 、"accent" 、"case" 、"variant"
のいずれかでなければならない。
[[SearchLocaleData]] .[[<locale >]] と [[SortLocaleData]] .[[<locale >]] は、Boolean 値を持つ [[ignorePunctuation]] フィールドを持たなければならない。
10.3 Intl.Collator プロトタイプオブジェクトのプロパティ
Intl.Collator プロトタイプオブジェクト :
%Intl.Collator.prototype% である。
通常のオブジェクト である。
Intl.Collator のインスタンスではなく、[[InitializedCollator]] 内部スロットや、Intl.Collator
インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
10.3.1 Intl.Collator.prototype.constructor
Intl.Collator.prototype.constructor の初期値は %Intl.Collator% である。
10.3.2 Intl.Collator.prototype.resolvedOptions ( )
この関数は、オブジェクトの初期化中に計算されたロケールおよびオプションへのアクセスを提供する。
collator を this の値とする。
? RequireInternalSlot (collator ,
[[InitializedCollator]] ) を実行する。
options を OrdinaryObjectCreate (%Object.prototype% )
とする。
表 3
の各行(ヘッダー行を除く)について、表の順序で次を行う:
p を現在の行の Property 値とする。
v を、現在の行の Internal Slot 値という名前を持つ collator の内部スロットの値とする。
現在の行に Extension Key 値があるなら、
extensionKey を現在の行の Extension Key 値とする。
もし %Intl.Collator% .[[RelevantExtensionKeys]] が
extensionKey を含まないなら、
v を undefined に設定する。
v が undefined でないなら、
! CreateDataPropertyOrThrow (options ,
p , v ) を実行する。
options を返す。
表 3: Collator インスタンスの解決済みオプション
Internal Slot
Property
Extension Key
[[Locale]]
"locale"
[[Usage]]
"usage"
[[Sensitivity]]
"sensitivity"
[[IgnorePunctuation]]
"ignorePunctuation"
[[Collation]]
"collation"
[[Numeric]]
"numeric"
"kn"
[[CaseFirst]]
"caseFirst"
"kf"
10.3.3 get Intl.Collator.prototype.compare
この名前付きアクセサプロパティ は、この Collator
オブジェクトのソート順序 に従って 2 つの文字列を比較する関数を返す。
Intl.Collator.prototype.compare はアクセサプロパティ であり、その setter
アクセサ関数は undefined である。getter アクセサ関数は次の手順を行う:
collator を this の値とする。
? RequireInternalSlot (collator ,
[[InitializedCollator]] ) を実行する。
collator .[[BoundCompare]] が
undefined なら、
F を、10.3.3.1
で定義される新しい組込みの関数オブジェクト とする。
F .[[Collator]] を collator に設定する。
collator .[[BoundCompare]] を
F に設定する。
collator .[[BoundCompare]] を返す。
注
返される関数は collator に束縛されるため、Array.prototype.sort やその他の関数に直接渡すことができる。
10.3.3.1 Collator 比較関数
Collator 比較関数は、[[Collator]] 内部スロットを持つ無名の組込み関数である。
Collator 比較関数 F が引数 x および y で呼び出されたとき、次の手順を行う:
collator を F .[[Collator]] とする。
Assert :
collator はObject である ,かつ
collator は [[InitializedCollator]] 内部スロットを持つ。
x が与えられていなければ、x を undefined とする。
y が与えられていなければ、y を undefined とする。
X を ? ToString (x )
とする。
Y を ? ToString (y )
とする。
CompareStrings (collator ,
X , Y ) を返す。
Collator 比較関数の "length" プロパティは
2 𝔽 である。
10.3.3.2 CompareStrings ( collator , x ,
y )
実装定義 の抽象操作
CompareStrings は、引数
collator (Intl.Collator)、x (String)、y (String)を取り、Number
を返す(ただし NaN ではない)。返される Number は、実装定義 のロケール依存の文字列比較における
x と y の結果を表す。結果は、collator
の有効なロケールおよび照合オプションに従った文字列値のソート順序 に対応することを意図しており、x
が y より前の場合は負、後の場合は正、その他すべての場合(x と y の相対順序がないことを表す)は 0
となる。文字列値は ECMA-262 、6.1.4
に記述される UTF-16 コードユニット列として解釈し、文字列内のサロゲートペア (0xD800〜0xDBFF
のコードユニットに 0xDC00〜0xDFFF のコードユニットが続くもの)は対応するコードポイントとして解釈しなければならない。
以下に記述する挙動は、文字列の照合要素の並び(特に「基本文字」)のロケール依存の識別に依存し、異なる基本文字は常に不等と比較される(それらを含む文字列同士も不等と比較される)。同じ基本文字の大文字小文字、ダイアクリティカルマーク、または潜在的にその他の側面の違いによる比較結果は、collator .[[Sensitivity]] によって以下のようにさらに決まる:
表 4: Collator の Sensitivity の効果
[[Sensitivity]]
説明
"a" と "á"
"a" と "A"
"base"
同じ基本文字の文字は、大文字小文字やダイアクリティカルマークの違いにかかわらず、不等とは比較されない。
等しい
等しい
"accent"
同じ基本文字の文字は、大文字小文字の違いにかかわらず、アクセントやその他のダイアクリティカルマークが異なる場合にのみ不等と比較される。
等しくない
等しい
"case"
同じ基本文字の文字は、アクセントやその他のダイアクリティカルマークの違いにかかわらず、大文字小文字が異なる場合にのみ不等と比較される。
等しい
等しくない
"variant"
同じ基本文字の文字は、大文字小文字、ダイアクリティカルマーク、または潜在的にその他の違いがあれば不等と比較される。
等しくない
等しくない
注 1
入力のコードポイントから基本文字への対応付けは、任意の合成(contraction)、展開(expansion)、衝突(collision)を含み得る。ダイアクリティカルマークを持つ特定の文字に特別な扱いを適用するものも含まれる。例えば、スウェーデン語では「ö」は「o」と異なる基本文字であり、「v」と「w」は同じ基本文字と見なされる。スロバキア語では「ch」は
1 つの基本文字であり、英語では「æ」は「a」で始まり「e」で終わる基本文字の並びである。
collator .[[IgnorePunctuation]] が
true の場合、句読点は無視される(例えば、句読点のみが異なる文字列は等しいと比較される)。
ロケール拡張キーで設定可能なオプションの解釈については、Unicode Technical
Standard #35 Part 1 Core, Section 3.6.1 Key and Type Definitions を参照。
実際の返却値は、追加情報のエンコードを許すために実装定義 である。しかし、与えられた
collator に対するこの操作は、x および y
の関数と見なしたとき、すべての文字列集合に対して全順序を定める整合的な比較関数 であることが要求される。また、Unicode
Standard に従う正準同値性を認識し尊重し、正準同値な識別可能な文字列を比較する場合には +0 𝔽
を返すことが要求される。
注 2
CompareStrings 抽象操作は、
Unicode Technical
Standard #10: Unicode
Collation Algorithm に従って実装し、
collator
の有効なロケールおよび照合オプションに対するテーラリングを用いることが推奨される。実装には Common Locale Data Repository(
https://cldr.unicode.org/ )が提供するテーラリングを使用することが推奨される。
注 3
同じ解決済みオプションを持つ Collator インスタンスに対する CompareStrings
抽象操作の挙動が、同一実装の異なるバージョン間で同一のままであるとアプリケーションが仮定すべきではない。
10.3.4 Intl.Collator.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は、String 値 "Intl.Collator" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
10.4 Intl.Collator インスタンスのプロパティ
Intl.Collator インスタンスは、通常のオブジェクト であり、%Intl.Collator.prototype%
からプロパティを継承する。
Intl.Collator インスタンスは [[InitializedCollator]] 内部スロットを持つ。
Intl.Collator インスタンスはまた、The Intl.Collator Constructor
によって計算されるいくつかの内部スロットも持つ:
[[Locale]] は、照合においてローカライズが使用されるロケールのString
値であり、その言語タグ を表す。
[[Usage]] は、照合器の用途を識別する "sort" または
"search" のいずれかの String 値である。
[[Sensitivity]] は、照合器の感度を識別する "base" 、
"accent" 、"case" 、"variant" のいずれかの String
値である。
[[IgnorePunctuation]] は、比較において句読点を無視すべきかどうかを指定するBoolean
値である。
[[Collation]] は、照合に使用される Unicode Collation
Identifier を表すString
値である。ただし、値 "standard" および
"search" は許可されず、値 "default" は許可される。
また、表 3 において内部スロット名に対応するキーが
Intl.Collator の [[RelevantExtensionKeys]] 内部スロットに含まれている場合、Intl.Collator
インスタンスは次の内部スロットも持つ:
[[Numeric]] は、数値ソートを使用するかどうかを指定するBoolean
値である。
[[CaseFirst]]
は、"upper" 、"lower" 、または "false" のいずれかの
String 値である。
最後に、Intl.Collator インスタンスは、compare アクセサ(10.3.3 )によって返される関数をキャッシュする [[BoundCompare]] 内部スロットを持つ。
11 DateTimeFormat オブジェクト
11.1 Intl.DateTimeFormat コンストラクタ
Intl.DateTimeFormat のコンストラクタ :
%Intl.DateTimeFormat% である。
Intl オブジェクト の
"DateTimeFormat" プロパティの初期値である。
Intl オブジェクト
のすべてのサービスコンストラクタ プロパティに共通する挙動は、9.1 に規定される。
11.1.1 Intl.DateTimeFormat ( [ locales [ ,
options ] ] )
Intl.DateTimeFormat 関数が省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
NewTarget が undefined なら、newTarget を アクティブ関数オブジェクト
とし、そうでなければ newTarget を NewTarget とする。
dateTimeFormat を ? CreateDateTimeFormat (newTarget ,
locales , options , any ,
date ) とする。
実装が コンストラクタ
の規範的オプションモード(4.3 注 1 )をサポートする場合、
this を this の値とする。
? ChainDateTimeFormat (dateTimeFormat ,
NewTarget, this ) を返す。
dateTimeFormat を返す。
11.1.1.1 ChainDateTimeFormat ( dateTimeFormat ,
newTarget , this )
抽象操作 ChainDateTimeFormat は、引数
dateTimeFormat (Intl.DateTimeFormat)、newTarget (ECMAScript
言語値 )、および this (ECMAScript
言語値 )を取り、Object を正常完了で含む か、throw
completion を返す。呼び出し時に次の手順を行う:
newTarget が undefined かつ ? OrdinaryHasInstance (%Intl.DateTimeFormat% ,
this ) が true の場合、
? DefinePropertyOrThrow (this ,
%Intl% .[[FallbackSymbol]] , PropertyDescriptor{ [[Value]] : dateTimeFormat , [[Writable]] : false , [[Enumerable]] : false , [[Configurable]] : false })
を実行する。
this を返す。
dateTimeFormat を返す。
11.1.2 CreateDateTimeFormat ( newTarget ,
locales , options , required , defaults )
抽象操作 CreateDateTimeFormat は、引数 newTarget (コンストラクタ )、locales (ECMAScript
言語値 )、options (ECMAScript
言語値 )、required (date 、time 、または
any )、defaults (date 、time 、または
all )を取り、DateTimeFormat オブジェクトを正常完了で含む か、throw
completion を返す。呼び出し時に次の手順を行う:
dateTimeFormat を ? OrdinaryCreateFromConstructor (newTarget ,
"%Intl.DateTimeFormat.prototype%" , « [[InitializedDateTimeFormat]] , [[Locale]] , [[Calendar]] , [[NumberingSystem]] , [[TimeZone]] , [[HourCycle]] , [[DateStyle]] , [[TimeStyle]] , [[DateTimeFormat]] , [[BoundFormat]] ») とする。
hour12 を undefined とする。
modifyResolutionOptions を、パラメータ (options ) を持ち hour12
をキャプチャする新しい抽象クロージャ とし、呼び出されたとき次の手順を行う:
hour12 を options .[[hour12]]
に設定する。
options から [[hour12]] フィールドを削除する。
hour12 が undefined でない場合、options .[[hc]] を null に設定する。
optionsResolution を ? ResolveOptions (%Intl.DateTimeFormat% ,
%Intl.DateTimeFormat% .[[LocaleData]] , locales , options , «
coerce-options », modifyResolutionOptions ) とする。
options を optionsResolution .[[Options]]
に設定する。
r を optionsResolution .[[ResolvedLocale]]
に設定する。
dateTimeFormat .[[Locale]] を r .[[Locale]] に設定する。
resolvedCalendar を r .[[ca]] に設定する。
dateTimeFormat .[[Calendar]] を
resolvedCalendar に設定する。
dateTimeFormat .[[NumberingSystem]] を
r .[[nu]] に設定する。
resolvedLocaleData を r .[[LocaleData]]
に設定する。
hour12 が true の場合、
hc を resolvedLocaleData .[[hourCycle12]] に設定する。
それ以外で hour12 が false の場合、
hc を resolvedLocaleData .[[hourCycle24]] に設定する。
それ以外の場合、
Assert :
hour12 は undefined である。
hc を r .[[hc]] に設定する。
hc が null の場合、hc を
resolvedLocaleData .[[hourCycle]] に設定する。
timeZone を ? Get (options ,
"timeZone" ) とする。
timeZone が undefined の場合、
timeZone を SystemTimeZoneIdentifier ()
に設定する。
それ以外の場合、
timeZone を ? ToString (timeZone )
に設定する。
IsTimeZoneOffsetString (timeZone )
が true の場合、
parseResult を ParseText (StringToCodePoints (timeZone ),
UTCOffset )
に設定する。
Assert :
parseResult は構文ノード である。
parseResult が複数の MinuteSecond
構文ノード
を含む場合、RangeError 例外を投げる。
offsetNanoseconds を ParseTimeZoneOffsetString (timeZone )
に設定する。
offsetMinutes を offsetNanoseconds / (6 ×
1010 ) に設定する。
Assert :
offsetMinutes は整数 である。
timeZone を FormatOffsetTimeZoneIdentifier (offsetMinutes )
に設定する。
それ以外の場合、
timeZoneIdentifierRecord を GetAvailableNamedTimeZoneIdentifier (timeZone )
に設定する。
timeZoneIdentifierRecord が empty
の場合、RangeError 例外を投げる。
timeZone を timeZoneIdentifierRecord .[[PrimaryIdentifier]] に設定する。
dateTimeFormat .[[TimeZone]] を
timeZone に設定する。
formatOptions を新しいRecord とする。
formatOptions .[[hourCycle]] を hc に設定する。
hasExplicitFormatComponents を false に設定する。
表 16
の各行(ヘッダー行を除く)について、表の順序で次を行う:
prop を現在の行の Property 列の名前とする。
prop が "fractionalSecondDigits" なら、
value を ? GetNumberOption (options ,
"fractionalSecondDigits" , 1, 3,
undefined ) とする。
それ以外の場合、
values を現在の行の Values 列の文字列からなるList とする。
value を ? GetOption (options ,
prop , string , values ,
undefined ) とする。
formatOptions .[[<prop >]] を value に設定する。
value が undefined でない場合、
hasExplicitFormatComponents を true に設定する。
formatMatcher を ? GetOption (options ,
"formatMatcher" , string , «
"basic" , "best fit" », "best
fit" ) に設定する。
dateStyle を ? GetOption (options ,
"dateStyle" , string , «
"full" , "long" , "medium" ,
"short" », undefined ) に設定する。
dateTimeFormat .[[DateStyle]] を
dateStyle に設定する。
timeStyle を ? GetOption (options ,
"timeStyle" , string , «
"full" , "long" , "medium" ,
"short" », undefined ) に設定する。
dateTimeFormat .[[TimeStyle]] を
timeStyle に設定する。
dateStyle が undefined でない、または timeStyle
がundefined でない場合、
hasExplicitFormatComponents が true の場合、
TypeError 例外を投げる。
required が date かつ timeStyle が
undefined でない場合、
TypeError 例外を投げる。
required が time かつ dateStyle が
undefined でない場合、
TypeError 例外を投げる。
styles を resolvedLocaleData .[[styles]] .[[<resolvedCalendar >]]
に設定する。
bestFormat を DateTimeStyleFormat (dateStyle ,
timeStyle , styles ) に設定する。
それ以外の場合、
needDefaults を true に設定する。
required が date または any
の場合、
« "weekday" , "year" ,
"month" , "day" » の各プロパティ名
prop について、
value を
formatOptions .[[<prop >]] に設定する。
value が undefined
でない場合、needDefaults を false に設定する。
required が time または any
の場合、
« "dayPeriod" , "hour" ,
"minute" , "second" ,
"fractionalSecondDigits" » の各プロパティ名
prop について、
value を
formatOptions .[[<prop >]] に設定する。
value が undefined
でない場合、needDefaults を false に設定する。
needDefaults が true かつ defaults が
date または all の場合、
« "year" , "month" ,
"day" » の各プロパティ名
prop について、
formatOptions .[[<prop >]] を
"numeric" に設定する。
needDefaults が true かつ defaults が
time または all の場合、
« "hour" , "minute" ,
"second" » の各プロパティ名
prop について、
formatOptions .[[<prop >]] を
"numeric" に設定する。
formats を resolvedLocaleData .[[formats]] .[[<resolvedCalendar >]]
に設定する。
formatMatcher が "basic" の場合、
bestFormat を BasicFormatMatcher (formatOptions ,
formats ) に設定する。
それ以外の場合、
bestFormat を BestFitFormatMatcher (formatOptions ,
formats ) に設定する。
dateTimeFormat .[[DateTimeFormat]] を
bestFormat に設定する。
bestFormat が [[hour]] フィールドを持つ場合、
dateTimeFormat .[[HourCycle]] を
hc に設定する。
dateTimeFormat を返す。
11.1.3 FormatOffsetTimeZoneIdentifier ( offsetMinutes )
抽象操作 FormatOffsetTimeZoneIdentifier は、引数 offsetMinutes (整数 )を取り、String を返す。
UTC オフセット(分単位)を ±HH:MM の形式で表現した UTC オフセット文字列に変換する。
呼び出し時に次の手順を行う:
offsetMinutes ≥ 0 の場合、sign をコードユニット 0x002B(PLUS SIGN)とし、そうでなければ
sign をコードユニット 0x002D(HYPHEN-MINUS)とする。
absoluteMinutes を abs (offsetMinutes )
に設定する。
hours を floor (absoluteMinutes
/ 60) に設定する。
minutes を absoluteMinutes modulo 60 に設定する。
sign 、ToZeroPaddedDecimalString (hours ,
2)、コードユニット 0x003A(COLON)、および ToZeroPaddedDecimalString (minutes ,
2) の連結 を返す。
11.2 Intl.DateTimeFormat コンストラクタのプロパティ
Intl.DateTimeFormat のコンストラクタ :
11.2.1 Intl.DateTimeFormat.prototype
Intl.DateTimeFormat.prototype の値は %Intl.DateTimeFormat.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
11.2.2 Intl.DateTimeFormat.supportedLocalesOf ( locales [
, options ] )
supportedLocalesOf メソッドが引数 locales と options
で呼び出されたとき、次の手順を行う:
availableLocales を %Intl.DateTimeFormat% .[[AvailableLocales]] とする。
requestedLocales を ? CanonicalizeLocaleList (locales )
とする。
? FilterLocales (availableLocales ,
requestedLocales , options ) を返す。
11.2.3 内部スロット
[[AvailableLocales]] 内部スロットの値は、9.1 に記述された制約の範囲内で実装定義 である。
[[RelevantExtensionKeys]] 内部スロットの値は «
"ca" , "hc" , "nu" » である。
注 1
Unicode Technical Standard
#35 Part 1 Core, Section 3.6.1 Key and Type Definitions では、日付と時刻の書式設定に関連する 4
つのロケール拡張キーが説明されている。暦のための
"ca" 、時刻の時間制のための
"hc" 、(書式化された数値の)数字体系のための
"nu" 、およびタイムゾーンのための
"tz" である。ただし DateTimeFormat では、タイムゾーンはオプションオブジェクトの
"timeZone" プロパティによって指定することが要求される。
[[ResolutionOptionDescriptors]] 内部スロットの値は « {
[[Key]] : "ca" , [[Property]] : "calendar" }, { [[Key]] : "nu" , [[Property]] :
"numberingSystem" }, { [[Key]] :
"hour12" , [[Property]] : "hour12" ,
[[Type]] : boolean }, { [[Key]] : "hc" , [[Property]] :
"hourCycle" , [[Values]] : « "h11" ,
"h12" , "h23" , "h24" » } » である。
[[LocaleData]] 内部スロットの値は、すべてのロケール値 locale について、9.1
に記述された制約および以下の追加制約の範囲内で実装定義 である:
[[LocaleData]] .[[<locale >]].[[nu]] は List
でなければならず、その中に
"native" 、"traditio" 、"finance"
の値を含んではならない。
[[LocaleData]] .[[<locale >]].[[hc]] は « null , "h11" ,
"h12" , "h23" , "h24" » でなければならない。
[[LocaleData]] .[[<locale >]].[[hourCycle]] は
"h11" 、"h12" 、"h23" 、または
"h24" のいずれかの String 値でなければならない。
[[LocaleData]] .[[<locale >]].[[hourCycle12]] は "h11" または
"h12" のいずれかの String 値でなければならない。
[[LocaleData]] .[[<locale >]].[[hourCycle24]] は "h23" または
"h24" のいずれかの String 値でなければならない。
[[LocaleData]] .[[<locale >]] は [[formats]] フィールドを持たなければならない。この [[formats]]
フィールドの値は、各暦の値 calendar に対する [[<calendar >]] フィールドを持つ Record
でなければならない。各 [[<calendar >]] フィールドの値は、DateTime Format Records
のList
でなければならない。そのような List
内の複数の Records
は、対応する値が少なくとも 1 つのフィールドで異なる限り、同じフィールドの部分集合を使用してよい。各ロケールについて、次の部分集合が利用可能でなければならない:
weekday, year, month, day, hour, minute, second, fractionalSecondDigits
weekday, year, month, day, hour, minute, second
weekday, year, month, day
year, month, day
year, month
month, day
month
hour, minute, second, fractionalSecondDigits
hour, minute, second
hour, minute
dayPeriod, hour, minute, second, fractionalSecondDigits
dayPeriod, hour, minute, second
dayPeriod, hour, minute
dayPeriod, hour
[[LocaleData]] .[[<locale >]] は [[styles]] フィールドを持たなければならない。この [[styles]]
フィールドの値は、各暦の値 calendar に対する [[<calendar >]] フィールドを持つ Record
でなければならない。各 [[<calendar >]] フィールドの値は DateTime Styles Record
でなければならない。
11.2.3.1 DateTime フォーマットレコード
各 DateTime Format Record は、表 5 に定義されるフィールドを持つ。
表 5: DateTime Format Record
フィールド名
値の型
説明
[[weekday]]
[[Weekday]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に substring
"{weekday}" が含まれる場合に存在する。
[[era]]
[[Era]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に substring
"{era}" が含まれる場合に存在する。
[[year]]
[[Year]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に
"{year}" 、"{yearName}" 、"{relatedYear}"
のいずれかの部分文字列が含まれる場合に存在する。
[[month]]
[[Month]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に substring
"{month}" が含まれる場合に存在する。
[[day]]
[[Day]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に substring
"{day}" が含まれる場合に存在する。
[[dayPeriod]]
[[DayPeriod]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に substring
"{dayPeriod}" が含まれる場合に存在する。
[[hour]]
[[Hour]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に substring
"{hour}" が含まれる場合に存在する。
[[minute]]
[[Minute]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に substring
"{minute}" が含まれる場合に存在する。
[[second]]
[[Second]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に substring
"{second}" が含まれる場合に存在する。
[[fractionalSecondDigits]]
[[FractionalSecondDigits]] (表
16 の Values 列)
任意フィールド。[[pattern]] に substring
"{fractionalSecondDigits}" が含まれる場合に存在する。
[[timeZoneName]]
[[TimeZoneName]] (表 16 の
Values 列)
任意フィールド。[[pattern]] に substring
"{timeZoneName}" が含まれる場合に存在する。
[[pattern]]
Pattern String
Contains :そのレコードの各日付・時刻の書式構成フィールドに対して、substring
の先頭が "{" で始まり、続いてフィールド名、続いて "}"
が来る部分文字列を含む。レコードに [[year]] フィールドがある場合、文字列は
"{yearName}" および
"{relatedYear}" の部分文字列を含んでもよい。
[[pattern12]]
Pattern String
任意フィールド。[[hour]] フィールドが存在する場合に存在する。[[pattern]]
フィールドの部分文字列に加えて、"{ampm}" または
"{dayPeriod}" の少なくとも一方の部分文字列を含む。
[[rangePatterns]]
DateTime Range
Pattern Record
このフィールドのパターン文字列は、[[pattern]] と同様である。
[[rangePatterns12]]
DateTime Range
Pattern Record
任意フィールド。[[hour]]
フィールドが存在する場合に存在する。このフィールドのパターン文字列は [[pattern12]] と同様である。
11.2.3.2 DateTime 範囲パターンレコード
各 DateTime Range Pattern
Record は、表 6
に定義されるフィールドを持つ。
表 6: DateTime Range
Pattern Record
11.2.3.3 DateTime 範囲パターンフォーマットレコード
各 DateTime Range
Pattern Format Record は、表 7
に定義されるフィールドを持つ。
表 7: DateTime
Range Pattern Format Record
11.2.3.4 DateTime 範囲パターンパートレコード
各 DateTime Range Pattern Part
Record は、表
8 に定義されるフィールドを持つ。
表 8: DateTime Range
Pattern Part Record
フィールド名
値の型
説明
[[Source]]
"shared" , "startRange" , または
"endRange"
どちらの範囲の日付を [[Pattern]] フィールドの値を用いて書式化すべきかを示す。
[[Pattern]]
Pattern String
通常の日付パターン文字列と同じ形式の文字列。
11.2.3.5 DateTime スタイルレコード
各 DateTime Styles Record
は、表 9 に定義されるフィールドを持つ。
表 9: DateTime Styles Record
11.2.3.6 DateTime スタイルレコード(詳細)
各 DateTime Style Record は、表 10 に定義されるフィールドを持つ。
表 10: DateTime Style Record
11.2.3.7 DateTime コネクターレコード
各 DateTime Connector Record
は、表 11
に定義されるフィールドを持つ。すべてのコネクターパターン文字列は、"{0}" および
"{1}" という文字列を含まなければならない。
表 11: DateTime Connector
Record
11.2.3.8 DateTime 日付レンジレコード
各 DateTime Date Range
Record は、表 12 に定義されるフィールドを持つ。
表 12: DateTime Date Range
Record
11.2.3.9 DateTime 時刻レンジレコード
各 DateTime Time Range
Record は、表 13 に定義されるフィールドを持つ。
表 13: DateTime Time Range
Record
11.2.3.10 DateTime スタイルレンジレコード
各 DateTime Style Range
Record は、表 14 に定義されるフィールドを持つ。
表 14: DateTime Style Range
Record
注 2
例えば、ある実装は、英語ロケールデータの一部として次の
Record
を含むことがある:
[[hour]] : "numeric"
[[minute]] : "numeric"
[[pattern]] : "{hour}:{minute}"
[[pattern12]] : "{hour}:{minute} {ampm}"
[[rangePatterns]] :
[[Hour]] :
[[hour]] : "numeric"
[[minute]] : "numeric"
[[PatternParts]] :
{[[Source]] :
"startRange" , [[Pattern]] :
"{hour}:{minute}" }
{[[Source]] :
"shared" , [[Pattern]] : " –
" }
{[[Source]] :
"endRange" , [[Pattern]] :
"{hour}:{minute}" }
[[Minute]] :
[[hour]] : "numeric"
[[minute]] : "numeric"
[[PatternParts]] :
{[[Source]] :
"startRange" , [[Pattern]] :
"{hour}:{minute}" }
{[[Source]] :
"shared" , [[Pattern]] : " –
" }
{[[Source]] :
"endRange" , [[Pattern]] :
"{hour}:{minute}" }
[[Default]] :
[[year]] : "2-digit"
[[month]] : "numeric"
[[day]] : "numeric"
[[hour]] : "numeric"
[[minute]] : "numeric"
[[PatternParts]] :
{[[Source]] :
"startRange" , [[Pattern]] :
"{day}/{month}/{year}, {hour}:{minute}" }
{[[Source]] :
"shared" , [[Pattern]] : " –
" }
{[[Source]] :
"endRange" , [[Pattern]] :
"{day}/{month}/{year}, {hour}:{minute}" }
[[rangePatterns12]] :
[[Hour]] :
[[hour]] : "numeric"
[[minute]] : "numeric"
[[PatternParts]] :
{[[Source]] :
"startRange" , [[Pattern]] :
"{hour}:{minute}" }
{[[Source]] :
"shared" , [[Pattern]] : " –
" }
{[[Source]] :
"endRange" , [[Pattern]] :
"{hour}:{minute}" }
{[[Source]] :
"shared" , [[Pattern]] : "
{ampm}" }
[[Minute]] :
[[hour]] : "numeric"
[[minute]] : "numeric"
[[PatternParts]] :
{[[Source]] :
"startRange" , [[Pattern]] :
"{hour}:{minute}" }
{[[Source]] :
"shared" , [[Pattern]] : " –
" }
{[[Source]] :
"endRange" , [[Pattern]] :
"{hour}:{minute}" }
{[[Source]] :
"shared" , [[Pattern]] : "
{ampm}" }
[[Default]] :
[[year]] : "2-digit"
[[month]] : "numeric"
[[day]] : "numeric"
[[hour]] : "numeric"
[[minute]] : "numeric"
[[PatternParts]] :
{[[Source]] :
"startRange" , [[Pattern]] :
"{day}/{month}/{year}, {hour}:{minute}
{ampm}" }
{[[Source]] :
"shared" , [[Pattern]] : " –
" }
{[[Source]] :
"endRange" , [[Pattern]] :
"{day}/{month}/{year}, {hour}:{minute}
{ampm}" }
注 3
実装においては、Common Locale Data Repository(
https://cldr.unicode.org/ )が提供するロケールデータを使用することが推奨される。
11.3 Intl.DateTimeFormat プロトタイプオブジェクトのプロパティ
Intl.DateTimeFormat プロトタイプオブジェクト :
%Intl.DateTimeFormat.prototype% である。
通常のオブジェクト である。
Intl.DateTimeFormat のインスタンスではなく、[[InitializedDateTimeFormat]]
内部スロットや、Intl.DateTimeFormat インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
11.3.1 Intl.DateTimeFormat.prototype.constructor
Intl.DateTimeFormat.prototype.constructor の初期値は %Intl.DateTimeFormat% である。
11.3.2 Intl.DateTimeFormat.prototype.resolvedOptions ( )
この関数は、オブジェクトの初期化時に計算されたロケールおよびオプションへのアクセスを提供する。
dtf を this の値とする。
実装が コンストラクタ
の規範的オプションモード(4.3 注 1 )をサポートする場合、
dtf を ? UnwrapDateTimeFormat (dtf )
に設定する。
? RequireInternalSlot (dtf ,
[[InitializedDateTimeFormat]] ) を実行する。
options を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
表
15 の各行(ヘッダー行を除く)について、表の順序で次を行う:
p を現在の行の Property 値とする。
現在の行に Internal Slot 値がある場合、
v を dtf の Internal Slot 名が現在の行の値である内部スロットの値とする。
それ以外の場合、
format を dtf .[[DateTimeFormat]] とする。
format が [[<p >]]
フィールドを持ち、dtf .[[DateStyle]] が
undefined かつ dtf .[[TimeStyle]] が undefined なら、
v を format .[[<p >]] に設定する。
それ以外の場合、
v を undefined に設定する。
v が undefined でない場合、
現在の行に Conversion 値がある場合、
conversion を現在の行の Conversion 値とする。
conversion が hour12 なら、
v が "h11" または
"h12" なら v を
true に、そうでなければ v を
false に設定する。
それ以外の場合、
Assert :
conversion は number
である。
v を 𝔽 (v )
に設定する。
! CreateDataPropertyOrThrow (options ,
p , v ) を実行する。
options を返す。
表 15: DateTimeFormat インスタンスの解決済みオプション
Internal Slot
Property
Conversion
[[Locale]]
"locale"
[[Calendar]]
"calendar"
[[NumberingSystem]]
"numberingSystem"
[[TimeZone]]
"timeZone"
[[HourCycle]]
"hourCycle"
[[HourCycle]]
"hour12"
hour12
"weekday"
"era"
"year"
"month"
"day"
"dayPeriod"
"hour"
"minute"
"second"
"fractionalSecondDigits"
number
"timeZoneName"
[[DateStyle]]
"dateStyle"
[[TimeStyle]]
"timeStyle"
Web互換性の理由から、プロパティ "hourCycle" が設定されている場合は、"hourCycle" が
"h11" または "h12" の時 "hour12" を
true に、"h23" または "h24" の時
"hour12" を false に設定すべきである。
注 1
このAPIのバージョンでは、Intl.DateTimeFormat
コンストラクタ に options オブジェクトで
"timeZone" プロパティが与えられなかった場合、プロパティ
"timeZone"
は
ホスト環境 のタイムゾーンの識別子となる。第1版ではこの場合
"timeZone" プロパティは
undefined であった。
注 2
第5版より前のバージョンとの互換性のため、"hourCycle" プロパティに加え "hour12"
プロパティも設定される。
11.3.3 get Intl.DateTimeFormat.prototype.format
Intl.DateTimeFormat.prototype.format はアクセサプロパティ であり、その setter
アクセサ関数は undefined である。getter アクセサ関数は次の手順を行う:
dtf を this の値とする。
実装が コンストラクタ
の規範的オプションモード(4.3 注 1 )をサポートする場合、
dtf を ? UnwrapDateTimeFormat (dtf )
に設定する。
? RequireInternalSlot (dtf ,
[[InitializedDateTimeFormat]] ) を実行する。
dtf .[[BoundFormat]] が
undefined の場合、
F を DateTime Format Functions (11.5.4 )
で定義される新しい組込みの関数オブジェクト とする。
F .[[DateTimeFormat]] を dtf に設定する。
dtf .[[BoundFormat]] を F に設定する。
dtf .[[BoundFormat]] を返す。
注
返される関数は dtf に束縛されるため、Array.prototype.map やその他の関数に直接渡すことができる。
これは新機能では継承されない慣習の名残であり、既存プログラムとの互換性維持のために保持されている。
11.3.4 Intl.DateTimeFormat.prototype.formatRange (
startDate , endDate )
formatRange メソッドが引数 startDate と endDate で呼び出されたとき、次の手順を行う:
dtf を this の値とする。
? RequireInternalSlot (dtf ,
[[InitializedDateTimeFormat]] ) を実行する。
startDate が undefined または endDate が
undefined の場合、TypeError 例外を投げる。
x を ? ToNumber (startDate )
に設定する。
y を ? ToNumber (endDate )
に設定する。
? FormatDateTimeRange (dtf ,
x , y ) を返す。
11.3.5 Intl.DateTimeFormat.prototype.formatRangeToParts (
startDate , endDate )
formatRangeToParts メソッドが引数 startDate と endDate
で呼び出されたとき、次の手順を行う:
dtf を this の値とする。
? RequireInternalSlot (dtf ,
[[InitializedDateTimeFormat]] ) を実行する。
startDate が undefined または endDate が
undefined の場合、TypeError 例外を投げる。
x を ? ToNumber (startDate )
に設定する。
y を ? ToNumber (endDate )
に設定する。
? FormatDateTimeRangeToParts (dtf ,
x , y ) を返す。
11.3.6 Intl.DateTimeFormat.prototype.formatToParts ( date
)
formatToParts メソッドが引数 date で呼び出されたとき、次の手順を行う:
dtf を this の値とする。
? RequireInternalSlot (dtf ,
[[InitializedDateTimeFormat]] ) を実行する。
date が undefined の場合、
x を ! Call (%Date.now%,
undefined ) に設定する。
それ以外の場合、
x を ? ToNumber (date )
に設定する。
? FormatDateTimeToParts (dtf ,
x ) を返す。
11.3.7 Intl.DateTimeFormat.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は、String 値 "Intl.DateTimeFormat" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
11.4 Intl.DateTimeFormat インスタンスのプロパティ
Intl.DateTimeFormat インスタンスは、通常のオブジェクト であり、%Intl.DateTimeFormat.prototype%
からプロパティを継承する。
Intl.DateTimeFormat インスタンスは [[InitializedDateTimeFormat]] 内部スロットを持つ。
Intl.DateTimeFormat インスタンスはまた、Intl.DateTimeFormat
コンストラクタ によって計算されるいくつかの内部スロットも持つ:
最後に、Intl.DateTimeFormat インスタンスは、format アクセサ(11.3.3 )によって返される関数をキャッシュする
[[BoundFormat]] 内部スロットを持つ。
11.5 DateTimeFormat オブジェクトの抽象操作
いくつかの DateTimeFormat のアルゴリズムは、次の表の値を使用する。この表は、日付および時刻の書式の構成要素に対する内部スロット、プロパティ名、許容される値を提供する:
表 16: 日付および時刻の書式の構成要素
フィールド名
プロパティ
値
[[Weekday]]
"weekday"
"narrow" , "short" ,
"long"
[[Era]]
"era"
"narrow" , "short" ,
"long"
[[Year]]
"year"
"2-digit" , "numeric"
[[Month]]
"month"
"2-digit" , "numeric" ,
"narrow" , "short" ,
"long"
[[Day]]
"day"
"2-digit" , "numeric"
[[DayPeriod]]
"dayPeriod"
"narrow" , "short" ,
"long"
[[Hour]]
"hour"
"2-digit" , "numeric"
[[Minute]]
"minute"
"2-digit" , "numeric"
[[Second]]
"second"
"2-digit" , "numeric"
[[FractionalSecondDigits]]
"fractionalSecondDigits"
1, 2, 3
[[TimeZoneName]]
"timeZoneName"
"short" , "long" ,
"shortOffset" , "longOffset" ,
"shortGeneric" , "longGeneric"
11.5.1 DateTimeStyleFormat ( dateStyle ,
timeStyle , styles )
抽象操作 DateTimeStyleFormat は引数 dateStyle
("full" , "long" , "medium" ,
"short" , または undefined )、timeStyle
("full" , "long" , "medium" ,
"short" , または undefined )、および styles (DateTime Styles Record )を取り、DateTime Format Record を返す。
styles は、あるロケール locale と暦 calendar について、%Intl.DateTimeFormat% .[[LocaleData]] .[[<locale >]].[[styles]] .[[<calendar >]] から得られる Record
である。パラメータに基づき、日付時刻の書式化に適切な Record
を返す。呼び出し時に次の手順を行う:
Assert :
dateStyle が undefined でない、または timeStyle が
undefined でない。
timeStyle が undefined でないなら、
Assert :
timeStyle は
"full" 、"long" 、"medium" 、"short"
のいずれかである。
timeFormat を styles .[[Time]] .[[<timeStyle >]] とする。
dateStyle が undefined でないなら、
Assert :
dateStyle は
"full" 、"long" 、"medium" 、"short"
のいずれかである。
dateFormat を styles .[[Date]] .[[<dateStyle >]] とする。
dateStyle が undefined でなく、かつ timeStyle も
undefined でないなら、
format を新しい DateTime Format
Record とする。
format に、dateFormat のすべてのフィールド(ただし [[pattern]] および [[rangePatterns]] を除く)を追加する。
format に、timeFormat のすべてのフィールド(ただし [[pattern]] 、[[rangePatterns]] 、
[[pattern12]] 、および [[rangePatterns12]] (存在する場合)を除く)を追加する。
connector を styles .[[Connector]] .[[<dateStyle >]] とする。
pattern を、connector の文字列中の substring
"{0}" を timeFormat .[[pattern]] で置換し、substring
"{1}" を dateFormat .[[pattern]] で置換した結果の文字列とする。
format .[[pattern]] を
pattern に設定する。
timeFormat が [[pattern12]] フィールドを持つなら、
pattern12 を、connector の文字列中の substring
"{0}" を timeFormat .[[pattern12]] で置換し、substring
"{1}" を dateFormat .[[pattern]] で置換した結果の文字列とする。
format .[[pattern12]] を
pattern12 に設定する。
dateTimeRangeFormat を styles .[[DateTimeRangeFormat]] .[[<dateStyle >]].[[<timeStyle >]]
とする。
format .[[rangePatterns]] を
dateTimeRangeFormat .[[rangePatterns]] に設定する。
dateTimeRangeFormat が [[rangePatterns12]]
フィールドを持つなら、
format .[[rangePatterns12]] を
dateTimeRangeFormat .[[rangePatterns12]] に設定する。
format を返す。
timeStyle が undefined でないなら、
timeFormat を返す。
Assert :
dateStyle は undefined ではない。
dateFormat を返す。
11.5.2 BasicFormatMatcher ( options , formats )
抽象操作 BasicFormatMatcher は引数 options (Record )および
formats (List 。各要素は
DateTime Format
Records )を取り、DateTime Format Record
を返す。呼び出し時に次の手順を行う:
removalPenalty を 120 とする。
additionPenalty を 20 とする。
longLessPenalty を 8 とする。
longMorePenalty を 6 とする。
shortLessPenalty を 6 とする。
shortMorePenalty を 3 とする。
offsetPenalty を 1 とする。
bestScore を -∞ とする。
bestFormat を undefined とする。
formats の各要素 format について、次を行う:
score を 0 とする。
表
16 の各行(ヘッダー行を除く)について、表の順序で次を行う:
property を現在の行の Property 列に与えられた名前とする。
options が [[<property >]]
フィールドを持つなら、optionsProp を
options .[[<property >]] とし、そうでなければ
optionsProp を undefined とする。
format が [[<property >]]
フィールドを持つなら、formatProp を
format .[[<property >]] とし、そうでなければ
formatProp を undefined とする。
optionsProp が undefined で
formatProp が undefined でないなら、
score を score - additionPenalty
に設定する。
それ以外で optionsProp が undefined でなく
formatProp が undefined なら、
score を score - removalPenalty
に設定する。
それ以外で property が "timeZoneName" の場合、
optionsProp が "short" または
"shortGeneric" の場合、
formatProp が "shortOffset"
なら、score を score -
offsetPenalty に設定する。
それ以外で formatProp が
"longOffset" なら、score を
score - (offsetPenalty +
shortMorePenalty ) に設定する。
それ以外で optionsProp が
"short" かつ formatProp が
"long" の場合、score を
score - shortMorePenalty に設定する。
それ以外で optionsProp が
"shortGeneric" かつ
formatProp が
"longGeneric" の場合、score を
score - shortMorePenalty に設定する。
それ以外で optionsProp ≠ formatProp
の場合、score を score -
removalPenalty に設定する。
それ以外で optionsProp が
"shortOffset" かつ formatProp が
"longOffset" の場合、
score を score -
shortMorePenalty に設定する。
それ以外で optionsProp が "long" または
"longGeneric" の場合、
formatProp が "longOffset"
なら、score を
score - offsetPenalty に設定する。
それ以外で formatProp が
"shortOffset" なら、score を
score - (offsetPenalty +
longLessPenalty ) に設定する。
それ以外で optionsProp が
"long" かつ formatProp が
"short" の場合、score を
score - longLessPenalty に設定する。
それ以外で optionsProp が
"longGeneric" かつ
formatProp が
"shortGeneric" の場合、score を
score - longLessPenalty に設定する。
それ以外で optionsProp ≠ formatProp
の場合、score を score -
removalPenalty に設定する。
それ以外で optionsProp が
"longOffset" かつ formatProp が
"shortOffset" の場合、
score を score -
longLessPenalty に設定する。
それ以外で optionsProp ≠ formatProp の場合、
score を score -
removalPenalty に設定する。
それ以外で optionsProp ≠ formatProp の場合、
property が
"fractionalSecondDigits" なら、
values を « 1, 2, 3 » とする。
それ以外なら、
values を « "2-digit" ,
"numeric" ,
"narrow" , "short" ,
"long" » とする。
optionsPropIndex を values 内における
optionsProp のインデックスとする。
formatPropIndex を values 内における
formatProp のインデックスとする。
delta を max (min (formatPropIndex
- optionsPropIndex , 2), -2) とする。
もし delta = 2 なら、score を
score - longMorePenalty に設定する。
それ以外で delta = 1 なら、score を
score - shortMorePenalty に設定する。
それ以外で delta = -1 なら、score を
score - shortLessPenalty に設定する。
それ以外で delta = -2 なら、score を
score - longLessPenalty に設定する。
もし score > bestScore なら、
bestScore を score に設定する。
bestFormat を format に設定する。
bestFormat を返す。
11.5.3 BestFitFormatMatcher ( options , formats
)
実装定義 の抽象操作
BestFitFormatMatcher は引数 options (Record )および
formats (List 。各要素は
DateTime Format
Records )を取り、DateTime Format Record
を返す。これは、選択されたロケールの一般的なユーザーが、BasicFormatMatcher
が返すものと少なくとも同等と感じる構成要素表現の集合を返す。
11.5.4 DateTime Format Functions
DateTime フォーマット関数は、[[DateTimeFormat]] 内部スロットを持つ無名の組込み関数である。
DateTime フォーマット関数 F が省略可能な引数 date とともに呼び出されたとき、次の手順を行う:
dtf を F .[[DateTimeFormat]] とする。
Assert : dtf
はObject であり 、かつ
dtf は [[InitializedDateTimeFormat]] 内部スロットを持つ。
date が与えられていないか undefined の場合、
x を ! Call (%Date.now%,
undefined ) とする。
それ以外の場合、
x を ? ToNumber (date )
とする。
? FormatDateTime (dtf ,
x ) を返す。
DateTime フォーマット関数の "length" プロパティは
1 𝔽 である。
11.5.5 FormatDateTimePattern ( dateTimeFormat ,
format , pattern , epochNanoseconds )
抽象操作 FormatDateTimePattern は、引数
dateTimeFormat (Intl.DateTimeFormat)、format (DateTime Format Record
または DateTime Range Pattern Format
Record )、pattern (Pattern
String )、epochNanoseconds (BigInt)を取り、Records (各レコードは
[[Type]] (String)および [[Value]] (String)を持つ)のList
を返す。これは、pattern 、有効なロケール、および dateTimeFormat と format
の書式オプションに従って、epoch 時刻
epochNanoseconds に対応するパーツを生成する。呼び出し時に次の手順を行う:
locale を dateTimeFormat .[[Locale]] とする。
nfOptions を OrdinaryObjectCreate (null )
とする。
! CreateDataPropertyOrThrow (nfOptions ,
"numberingSystem" , dateTimeFormat .[[NumberingSystem]] ) を実行する。
! CreateDataPropertyOrThrow (nfOptions ,
"useGrouping" , false ) を実行する。
nf を ! Construct (%Intl.NumberFormat% , «
locale , nfOptions ») とする。
nf2Options を OrdinaryObjectCreate (null )
とする。
! CreateDataPropertyOrThrow (nf2Options ,
"minimumIntegerDigits" , 2 𝔽 ) を実行する。
! CreateDataPropertyOrThrow (nf2Options ,
"numberingSystem" , dateTimeFormat .[[NumberingSystem]] ) を実行する。
! CreateDataPropertyOrThrow (nf2Options ,
"useGrouping" , false ) を実行する。
nf2 を ! Construct (%Intl.NumberFormat% , «
locale , nf2Options ») とする。
もし format が [[fractionalSecondDigits]] フィールドを持つなら、
fractionalSecondDigits を format .[[fractionalSecondDigits]] とする。
nf3Options を OrdinaryObjectCreate (null )
とする。
! CreateDataPropertyOrThrow (nf3Options ,
"minimumIntegerDigits" , 𝔽 (fractionalSecondDigits ))
を実行する。
! CreateDataPropertyOrThrow (nf3Options ,
"numberingSystem" , dateTimeFormat .[[NumberingSystem]] ) を実行する。
! CreateDataPropertyOrThrow (nf3Options ,
"useGrouping" , false ) を実行する。
nf3 を ! Construct (%Intl.NumberFormat% ,
« locale , nf3Options ») とする。
tm を ToLocalTime (epochNanoseconds ,
dateTimeFormat .[[Calendar]] ,
dateTimeFormat .[[TimeZone]] ) とする。
patternParts を PartitionPattern (pattern )
とする。
result を新しい空の List
とする。
patternParts の各 Record
{ [[Type]] , [[Value]] }
patternPart について、次を行う:
p を patternPart .[[Type]] とする。
p が "literal" なら、
Record
{ [[Type]] : "literal" , [[Value]] : patternPart .[[Value]] } を result に追加する。
それ以外で p が "fractionalSecondDigits" なら、
Assert :
format は [[fractionalSecondDigits]]
フィールドを持つ。
v を tm .[[Millisecond]]
とする。
v を floor (v
× 10( fractionalSecondDigits - 3 ) ) に設定する。
fv を FormatNumeric (nf3 ,
v ) とする。
Record
{ [[Type]] :
"fractionalSecond" , [[Value]] : fv } を
result に追加する。
それ以外で p が "dayPeriod" なら、
Assert :
format は [[dayPeriod]] フィールドを持つ。
f を format .[[dayPeriod]]
とする。
fv を、tm の昼夜区分を f で与えられた形で表す String
値とする(String 値は実装および dateTimeFormat の有効なロケールに依存する)。
Record
{ [[Type]] : p , [[Value]] : fv } を
result に追加する。
それ以外で p が "timeZoneName" なら、
Assert :
format は [[timeZoneName]] フィールドを持つ。
f を format .[[timeZoneName]] とする。
v を dateTimeFormat .[[TimeZone]] とする。
fv を、v を f で与えられた形で表す String
値とする(String 値は実装および dateTimeFormat
の有効なロケールに依存する)。f が
"short" 、"long" 、"shortOffset" 、"longOffset"
のいずれかの場合、String 値は tm の [[InDST]]
フィールドの値にも依存し得る。実装に f のローカライズされた表現がない場合、v 自体の
String 値を使用する。
Record
{ [[Type]] : p , [[Value]] : fv } を
result に追加する。
それ以外で p が 表 16
の Property 列のいずれかに一致する場合、
Assert :
format は [[<p >]] フィールドを持つ。
f を format .[[<p >]] とする。
v を、一致する行の Internal Slot 列の名前を持つ tm のフィールドの値とする。
p が "year" で v ≤ 0
の場合、v を 1 - v に設定する。
p が "month" の場合、v を
v + 1 に設定する。
p が "hour" かつ
dateTimeFormat .[[HourCycle]] が
"h11" または "h12" の場合、
v を v modulo
12 に設定する。
もし v が 0 かつ dateTimeFormat .[[HourCycle]] が
"h12" なら、v を 12 に設定する。
p が "hour" かつ
dateTimeFormat .[[HourCycle]] が
"h24" の場合、
もし v が 0 なら、v を 24 に設定する。
f が "numeric" の場合、
fv を FormatNumeric (nf ,
v ) とする。
それ以外で f が "2-digit" の場合、
fv を FormatNumeric (nf2 ,
v ) とする。
codePoints を StringToCodePoints (fv )
とする。
count を codePoints の要素数とする。
もし count > 2 なら、
tens を
codePoints [count - 2] とする。
ones を
codePoints [count - 1] とする。
fv を CodePointsToString («
tens , ones ») に設定する。
それ以外で f が "narrow" 、
"short" 、または "long" の場合、
fv を、v を f で与えられた形で表す String
値とする(String 値は実装および dateTimeFormat
の有効なロケールと暦に依存する)。p が
"month" の場合、String 値は format .[[day]] の有無にも依存し得る。実装に f
のローカライズされた表現がない場合、v 自体の String 値を使用する。
Record
{ [[Type]] : p , [[Value]] : fv } を
result に追加する。
それ以外で p が "ampm" の場合、
v を tm .[[Hour]] とする。
もし v が 11 より大きいなら、
fv を ILD
の String 値("post meridiem" を表す)とする。
それ以外なら、
fv を ILD
の String 値("ante meridiem" を表す)とする。
Record
{ [[Type]] : "dayPeriod" ,
[[Value]] : fv } を
result に追加する。
それ以外で p が "relatedYear" の場合、
v を tm .[[RelatedYear]]
とする。
fv を FormatNumeric (nf ,
v ) とする。
Record
{ [[Type]] : "relatedYear" ,
[[Value]] : fv } を
result に追加する。
それ以外で p が "yearName" の場合、
v を tm .[[YearName]] とする。
fv を ILD の
String 値(v を表す)とする。
Record
{ [[Type]] : "yearName" , [[Value]] : fv } を
result に追加する。
それ以外の場合、
unknown を、epochNanoseconds および
p に基づく実装・ロケール・数字体系依存の String とする。
Record
{ [[Type]] : "unknown" , [[Value]] : unknown } を
result に追加する。
result を返す。
注
実装では、Common Locale Data Repository(
https://cldr.unicode.org/ )が提供するロケールおよび暦依存の文字列を使用し、DateTimeFormat
の
"short" 文字列には CLDR の
"abbreviated"
文字列を、DateTimeFormat の
"long" 文字列には CLDR の
"wide"
文字列を使用することが推奨される。
11.5.6 PartitionDateTimePattern ( dateTimeFormat ,
x )
抽象操作 PartitionDateTimePattern は、引数 dateTimeFormat (Intl.DateTimeFormat)および
x (Number)を取り、正常完了(normal
completion)で Records (各レコードは
[[Type]] (String)および [[Value]] (String)を持つ)のList を返すか、throw
completion を返す。x は time
value (ECMA-262 , 21.4.1.1
参照)として解釈され、有効なロケールと dateTimeFormat の書式オプションに従って対応するパーツを生成する。呼び出し時に次の手順を行う:
x を TimeClip (x )
とする。
x が NaN なら、RangeError 例外を投げる。
epochNanoseconds を ℤ (ℝ (x ) ×
106 ) とする。
format を dateTimeFormat .[[DateTimeFormat]] とする。
dateTimeFormat .[[HourCycle]] が
"h11" または "h12" の場合、
pattern を format .[[pattern12]]
とする。
それ以外なら、
pattern を format .[[pattern]] とする。
result を FormatDateTimePattern (dateTimeFormat ,
format , pattern , epochNanoseconds ) とする。
result を返す。
11.5.7 FormatDateTime ( dateTimeFormat , x )
抽象操作 FormatDateTime は、引数 dateTimeFormat (Intl.DateTimeFormat)および
x (Number)を取り、正常完了(normal
completion)で String を返すか、throw
completion を返す。呼び出し時に次の手順を行う:
parts を ? PartitionDateTimePattern (dateTimeFormat ,
x ) とする。
result を空文字列とする。
各 Record
{ [[Type]] , [[Value]] }
part ∈ parts について、
result を result と part .[[Value]] の連結 に設定する。
result を返す。
11.5.8 FormatDateTimeToParts ( dateTimeFormat ,
x )
抽象操作 FormatDateTimeToParts は、引数 dateTimeFormat (Intl.DateTimeFormat)および
x (Number)を取り、正常完了(normal
completion)で Array を返すか、throw
completion を返す。呼び出し時に次の手順を行う:
parts を ? PartitionDateTimePattern (dateTimeFormat ,
x ) とする。
result を ! ArrayCreate (0)
とする。
n を 0 とする。
各 Record
{ [[Type]] , [[Value]] }
part ∈ parts について、
O を OrdinaryObjectCreate (%Object.prototype% )
とする。
! CreateDataPropertyOrThrow (O ,
"type" , part .[[Type]] )
を実行する。
! CreateDataPropertyOrThrow (O ,
"value" , part .[[Value]] )
を実行する。
! CreateDataPropertyOrThrow (result ,
! ToString (𝔽 (n )),
O ) を実行する。
n を 1 増やす。
result を返す。
11.5.9 PartitionDateTimeRangePattern ( dateTimeFormat ,
x , y )
抽象操作 PartitionDateTimeRangePattern は、引数
dateTimeFormat (Intl.DateTimeFormat)、x (Number)、y (Number)を取り、正常完了(normal
completion)で Records (各レコードは
[[Type]] (String)、[[Value]] (String)、[[Source]] (String)を持つ)のList を返すか、throw
completion を返す。x および y は time
values (ECMA-262 , 21.4.1.1
参照)として解釈され、有効なロケールと dateTimeFormat の書式オプションに従って対応するパーツを生成する。呼び出し時に次の手順を行う:
x を TimeClip (x )
に設定する。
x が NaN なら、RangeError 例外を投げる。
y を TimeClip (y )
に設定する。
y が NaN なら、RangeError 例外を投げる。
xEpochNanoseconds を ℤ (ℝ (x ) ×
106 ) とする。
yEpochNanoseconds を ℤ (ℝ (y ) ×
106 ) とする。
tm1 を ToLocalTime (xEpochNanoseconds ,
dateTimeFormat .[[Calendar]] ,
dateTimeFormat .[[TimeZone]] ) とする。
tm2 を ToLocalTime (yEpochNanoseconds ,
dateTimeFormat .[[Calendar]] ,
dateTimeFormat .[[TimeZone]] ) とする。
format を dateTimeFormat .[[DateTimeFormat]] とする。
dateTimeFormat .[[HourCycle]] が
"h11" または "h12" の場合、
pattern を format .[[pattern12]]
とする。
rangePatterns を format .[[rangePatterns12]] とする。
それ以外なら、
pattern を format .[[pattern]] とする。
rangePatterns を format .[[rangePatterns]] とする。
selectedRangePattern を undefined とする。
relevantFieldsEqual を true とする。
checkMoreFields を true とする。
表
6 の各行(ヘッダー行を除く)について、表の順序で次を行う:
fieldName を、その行の Field Name 列に与えられた名前とする。
rangePatterns が fieldName という名前のフィールドを持つなら
rangePattern をそのフィールド値とし、そうでなければ rangePattern を
undefined とする。
selectedRangePattern が undefined でなく、かつ
rangePattern が undefined なら、
注: このフィールドまたはそれ以下の差分の範囲パターンが存在しないため、これ以上のチェックは行われない。
checkMoreFields を false に設定する。
fieldName が [[Default]]
に等しくなく、relevantFieldsEqual が true
で、checkMoreFields が true の場合、
selectedRangePattern を rangePattern に設定する。
fieldName が [[AmPm]] の場合、
tm1 .[[Hour]] が 12 未満なら
v1 を "am" 、そうでなければ v1 を
"pm" とする。
tm2 .[[Hour]] が 12 未満なら
v2 を "am" 、そうでなければ v2 を
"pm" とする。
それ以外で fieldName が [[DayPeriod]] の場合、
v1 を tm1 の昼夜区分を表す String 値とする(String
値は実装および dateTimeFormat の有効なロケールに依存)。
v2 を tm2 の昼夜区分を表す String 値とする(String
値は実装および dateTimeFormat の有効なロケールに依存)。
それ以外で fieldName が [[FractionalSecondDigits]] の場合、
もし format が [[fractionalSecondDigits]] フィールドを持つなら、
fractionalSecondDigits を
format .[[fractionalSecondDigits]] とする。
それ以外なら、
fractionalSecondDigits を 3 とする。
exp を fractionalSecondDigits - 3 とする。
v1 を floor (tm1 .[[Millisecond]] ×
10exp ) とする。
v2 を floor (tm2 .[[Millisecond]] ×
10exp ) とする。
それ以外の場合、
v1 を tm1 の fieldName
という名前のフィールド値とする。
v2 を tm2 の fieldName
という名前のフィールド値とする。
もし v1 ≠ v2 なら、
relevantFieldsEqual を false に設定する。
relevantFieldsEqual が true なら、
collapsedResult を新しい空の List
とする。
resultParts を FormatDateTimePattern (dateTimeFormat ,
format , pattern , xEpochNanoseconds ) とする。
各 Record
{ [[Type]] , [[Value]] }
r ∈ resultParts について、
Record
{ [[Type]] : r .[[Type]] , [[Value]] :
r .[[Value]] , [[Source]] : "shared" } を
collapsedResult に追加する。
collapsedResult を返す。
rangeResult を新しい空の List
とする。
selectedRangePattern が undefined なら、
selectedRangePattern を rangePatterns .[[Default]] に設定する。
各 Record
{ [[Pattern]] , [[Source]] }
rangePatternPart ∈ selectedRangePattern .[[PatternParts]] について、
pattern を rangePatternPart .[[Pattern]] とする。
source を rangePatternPart .[[Source]] とする。
source が "startRange" または
"shared" の場合、
z を xEpochNanoseconds とする。
それ以外なら、
z を yEpochNanoseconds とする。
resultParts を FormatDateTimePattern (dateTimeFormat ,
selectedRangePattern , pattern , z ) とする。
各 Record
{ [[Type]] , [[Value]] }
r ∈ resultParts について、
Record
{ [[Type]] : r .[[Type]] , [[Value]] :
r .[[Value]] , [[Source]] : source } を
rangeResult に追加する。
rangeResult を返す。
11.5.10 FormatDateTimeRange ( dateTimeFormat ,
x , y )
抽象操作 FormatDateTimeRange は、引数
dateTimeFormat (Intl.DateTimeFormat)、x (Number)、y (Number)を取り、正常完了(normal
completion)で String を返すか、throw
completion を返す。呼び出し時に次の手順を行う:
parts を ? PartitionDateTimeRangePattern (dateTimeFormat ,
x , y ) とする。
result を空文字列とする。
各 Record
{ [[Type]] , [[Value]] , [[Source]] } part ∈ parts について、
result を result と part .[[Value]] の連結 に設定する。
result を返す。
11.5.11 FormatDateTimeRangeToParts ( dateTimeFormat ,
x , y )
抽象操作 FormatDateTimeRangeToParts は、引数
dateTimeFormat (Intl.DateTimeFormat)、x (Number)、y (Number)を取り、正常完了(normal
completion)で Array を返すか、throw
completion を返す。呼び出し時に次の手順を行う:
parts を ? PartitionDateTimeRangePattern (dateTimeFormat ,
x , y ) とする。
result を ! ArrayCreate (0)
とする。
n を 0 とする。
各 Record
{ [[Type]] , [[Value]] , [[Source]] } part ∈ parts について、
O を OrdinaryObjectCreate (%Object.prototype% )
とする。
! CreateDataPropertyOrThrow (O ,
"type" , part .[[Type]] )
を実行する。
! CreateDataPropertyOrThrow (O ,
"value" , part .[[Value]] )
を実行する。
! CreateDataPropertyOrThrow (O ,
"source" , part .[[Source]] ) を実行する。
! CreateDataPropertyOrThrow (result ,
! ToString (𝔽 (n )),
O ) を実行する。
n を 1 増やす。
result を返す。
11.5.12 ToLocalTime ( epochNs , calendar ,
timeZoneIdentifier )
実装定義 の抽象操作
ToLocalTime は、引数
epochNs (BigInt)、calendar (String)、timeZoneIdentifier (String)を取り、ToLocalTime Record
を返す。呼び出し時に次の手順を行う:
IsTimeZoneOffsetString (timeZoneIdentifier )
が true の場合、
offsetNs を ParseTimeZoneOffsetString (timeZoneIdentifier )
とする。
それ以外なら、
Assert : GetAvailableNamedTimeZoneIdentifier (timeZoneIdentifier )
は empty ではない。
offsetNs を GetNamedTimeZoneOffsetNanoseconds (timeZoneIdentifier ,
epochNs ) とする。
tz を ℝ (epochNs ) +
offsetNs とする。
calendar が "gregory" の場合、
tz から計算されたフィールドを持つ ToLocalTime
Record を 表
17 に従って返す。
それ以外なら、
与えられた calendar に対して tz から計算されたフィールドを持つ ToLocalTime
Record を返す。計算には、指定された calendar
に関する可能な限り最良の情報を使用する。
11.5.13 ToLocalTime レコード
各 ToLocalTime Record は、表 17 に定義されるフィールドを持つ。
表 17: Record
(ToLocalTime により返される)
11.5.14 UnwrapDateTimeFormat ( dtf )
抽象操作 UnwrapDateTimeFormat は、引数 dtf (ECMAScript
言語値 )を取り、正常完了(normal
completion)で ECMAScript
言語値 を返すか、throw
completion を返す。
これは、入力オブジェクトの DateTimeFormat インスタンスを返す。インスタンスは、値自体であるか、%Intl.DateTimeFormat%
により、コンストラクタ の規範的オプションモード(4.3 Note
1 )に従って、その値に関連付けられた値である。呼び出し時に次の手順を行う:
dtf が Object
でない なら、TypeError 例外を投げる。
dtf が [[InitializedDateTimeFormat]] 内部スロットを持たず、かつ
? OrdinaryHasInstance (%Intl.DateTimeFormat% ,
dtf ) が true なら、
? Get (dtf ,
%Intl% .[[FallbackSymbol]] ) を返す。
dtf を返す。
12 DisplayNames オブジェクト
12.1 Intl.DisplayNames コンストラクタ
Intl.DisplayNames のコンストラクタ :
%Intl.DisplayNames% である。
Intl オブジェクト の
"DisplayNames" プロパティの初期値である。
Intl オブジェクト
のすべてのサービスコンストラクタ プロパティに共通する挙動は、9.1 に規定される。
12.1.1 Intl.DisplayNames ( locales , options )
Intl.DisplayNames 関数が引数 locales と options で呼び出されたとき、次の手順を行う:
NewTarget が undefined なら、TypeError 例外を投げる。
displayNames を ? OrdinaryCreateFromConstructor (NewTarget,
"%Intl.DisplayNames.prototype%" , « [[InitializedDisplayNames]] , [[Locale]] , [[Style]] , [[Type]] , [[Fallback]] , [[LanguageDisplay]] , [[Fields]] »)
とする。
optionsResolution を ? ResolveOptions (%Intl.DisplayNames% ,
%Intl.DisplayNames% .[[LocaleData]] , locales , options , «
require-options ») とする。
options を optionsResolution .[[Options]]
に設定する。
r を optionsResolution .[[ResolvedLocale]]
に設定する。
style を ? GetOption (options ,
"style" , string , «
"narrow" , "short" ,
"long" », "long" ) に設定する。
displayNames .[[Style]] を style に設定する。
type を ? GetOption (options ,
"type" , string , «
"language" , "region" , "script" ,
"currency" , "calendar" ,
"dateTimeField" », undefined ) に設定する。
type が undefined なら、TypeError 例外を投げる。
displayNames .[[Type]] を type に設定する。
fallback を ? GetOption (options ,
"fallback" , string , «
"code" , "none" », "code" )
に設定する。
displayNames .[[Fallback]] を
fallback に設定する。
displayNames .[[Locale]] を r .[[Locale]] に設定する。
resolvedLocaleData を r .[[LocaleData]]
に設定する。
types を resolvedLocaleData .[[types]]
に設定する。
Assert : types
はRecord
である(12.2.3 を参照)。
languageDisplay を ? GetOption (options ,
"languageDisplay" , string , «
"dialect" , "standard" »,
"dialect" ) に設定する。
typeFields を types .[[<type >]] に設定する。
Assert :
typeFields はRecord
である(12.2.3 を参照)。
type が "language" の場合、
displayNames .[[LanguageDisplay]] を
languageDisplay に設定する。
typeFields を
typeFields .[[<languageDisplay >]] に設定する。
Assert :
typeFields はRecord
である(12.2.3 を参照)。
styleFields を typeFields .[[<style >]] に設定する。
Assert :
styleFields はRecord
である(12.2.3 を参照)。
displayNames .[[Fields]] を
styleFields に設定する。
displayNames を返す。
12.2 Intl.DisplayNames コンストラクタのプロパティ
Intl.DisplayNames のコンストラクタ :
12.2.1 Intl.DisplayNames.prototype
Intl.DisplayNames.prototype の値は %Intl.DisplayNames.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
12.2.2 Intl.DisplayNames.supportedLocalesOf ( locales [ ,
options ] )
supportedLocalesOf メソッドが引数 locales と options
で呼び出されたとき、次の手順を行う:
availableLocales を %Intl.DisplayNames% .[[AvailableLocales]] とする。
requestedLocales を ? CanonicalizeLocaleList (locales )
とする。
? FilterLocales (availableLocales ,
requestedLocales , options ) を返す。
12.2.3 内部スロット
[[AvailableLocales]] 内部スロットの値は、9.1 に記述された制約の範囲内で実装定義 である。
[[RelevantExtensionKeys]] 内部スロットの値は « » である。
[[ResolutionOptionDescriptors]] 内部スロットの値は « » である。
[[LocaleData]] 内部スロットの値は、9.1
に記述された制約および以下の追加制約の範囲内で実装定義 である:
[[LocaleData]] .[[<locale >]] は、すべてのロケール値
locale について [[types]]
フィールドを持たなければならない。このフィールドの値はRecord
であり、すべての表示名タイプの名前を持つフィールドを含まなければならない:
"language" 、"region" 、"script" 、
"currency" 、"calendar" 、および
"dateTimeField" 。
フィールド "language" の値はRecord
でなければならず、有効な言語表示のいずれかの名前を持つフィールドを含まなければならない:
"dialect" および "standard" 。
表示名タイプ "language" における言語表示フィールドは、Records
を含むべきであり、有効な表示名スタイルのいずれかの名前を持つフィールドを含まなければならない:
"narrow" 、"short" 、"long" 。
フィールド "region" 、"script" 、
"currency" 、"calendar" 、および
"dateTimeField" の値はRecords
でなければならず、すべての表示名スタイルの名前を持つフィールドを含まなければならない:
"narrow" 、"short" 、"long" 。
表示名タイプ "language" の表示名スタイルフィールドは、Records
を含むべきであり、そのキーは unicode_language_id が照合可能な言語コードに対応する必要がある(Unicode
ロケール非終端記号 )。これらのフィールドの値は文字列値でなければならない。
表示名タイプ "region" の表示名スタイルフィールドは、地域コードに対応するキーを持つRecords
を含むべきである。これらのフィールドの値は文字列値でなければならない。
表示名タイプ "script" の表示名スタイルフィールドは、スクリプトコードに対応するキーを持つRecords
を含むべきである。これらのフィールドの値は文字列値でなければならない。
表示名タイプ "currency" の表示名スタイルフィールドは、通貨コードに対応するキーを持つRecords
を含むべきである。これらのフィールドの値は文字列値でなければならない。
表示名タイプ "calendar" の表示名スタイルフィールドは、type
が照合可能なカレンダー識別子に対応するキーを持つRecords
を含むべきである(Unicode
ロケール非終端記号 )。これらのフィールドの値は文字列値でなければならない。
表示名タイプ "dateTimeField" の表示名スタイルフィールドは、表 19
に列挙されたコードに対応するキーを持つRecords
を含むべきである。これらのフィールドの値は文字列値でなければならない。
注
実装においては、Common Locale Data Repository(
https://cldr.unicode.org/ )が提供するロケールデータを使用することが推奨される。
12.3 Intl.DisplayNames プロトタイプオブジェクトのプロパティ
Intl.DisplayNames プロトタイプオブジェクト :
%Intl.DisplayNames.prototype% である。
通常のオブジェクト である。
Intl.DisplayNames のインスタンスではなく、[[InitializedDisplayNames]]
内部スロットや、Intl.DisplayNames インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
12.3.1 Intl.DisplayNames.prototype.constructor
Intl.DisplayNames.prototype.constructor の初期値は %Intl.DisplayNames% である。
12.3.2 Intl.DisplayNames.prototype.resolvedOptions ( )
この関数は、オブジェクトの初期化時に計算されたロケールおよびオプションへのアクセスを提供する。
displayNames を this の値とする。
? RequireInternalSlot (displayNames ,
[[InitializedDisplayNames]] ) を実行する。
options を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
表
18 の各行(ヘッダー行を除く)について、表の順序で次を行う:
p を現在の行の Property の値とする。
v を、現在の行の Internal Slot の値という名前を持つ displayNames
の内部スロットの値とする。
Assert :
v は undefined ではない。
! CreateDataPropertyOrThrow (options ,
p , v ) を実行する。
options を返す。
表 18: DisplayNames インスタンスの解決済みオプション
Internal Slot
Property
[[Locale]]
"locale"
[[Style]]
"style"
[[Type]]
"type"
[[Fallback]]
"fallback"
[[LanguageDisplay]]
"languageDisplay"
12.3.3 Intl.DisplayNames.prototype.of ( code )
Intl.DisplayNames.prototype.of が引数 code で呼び出されたとき、次の手順を行う:
displayNames を this の値とする。
? RequireInternalSlot (displayNames ,
[[InitializedDisplayNames]] ) を実行する。
code を ? ToString (code )
に設定する。
code を ? CanonicalCodeForDisplayNames (displayNames .[[Type]] , code ) に設定する。
fields を displayNames .[[Fields]] とする。
fields が [[<code >]] フィールドを持つなら、
fields .[[<code >]] を返す。
displayNames .[[Fallback]] が
"code" なら、code を返す。
undefined を返す。
12.3.4 Intl.DisplayNames.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は、String 値 "Intl.DisplayNames" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
12.4 Intl.DisplayNames インスタンスのプロパティ
Intl.DisplayNames インスタンスは、通常のオブジェクト であり、%Intl.DisplayNames.prototype%
からプロパティを継承する。
Intl.DisplayNames インスタンスは [[InitializedDisplayNames]] 内部スロットを持つ。
Intl.DisplayNames インスタンスはまた、Intl.DisplayNames
コンストラクタ によって計算されるいくつかの内部スロットも持つ:
[[Locale]] は、書式化においてローカライズが使用されるロケールのString
値であり、その言語タグ を表す。
[[Style]] は、使用される表示名スタイルを識別する
"narrow" 、"short" 、"long" のいずれかの String
値である。
[[Type]] は、要求された表示名の種類を識別する "language" 、
"region" 、"script" 、"currency" 、
"calendar" 、または "dateTimeField" のいずれかの String 値である。
[[Fallback]] は、要求された表示名がシステムに存在しない場合のフォールバックの戻り値を識別する
"code" または
"none" のいずれかの String 値である。
[[LanguageDisplay]] は、言語表示の種類を識別する "dialect" または
"standard" のいずれかの String 値である。これは [[Type]] が
"language" のときのみ使用される。
[[Fields]] は Record (12.2.3 参照)であり、[[Style]] 、[[Type]] 、および [[LanguageDisplay]] に従ってコードに対応するキーを持つフィールドを含まなければならない。
12.5 DisplayNames オブジェクトの抽象操作
12.5.1 CanonicalCodeForDisplayNames ( type ,
code )
抽象操作 CanonicalCodeForDisplayNames は、引数 type (String)および
code (String)を取り、正常完了で含む
String か、throw
completion のいずれかを返す。これは、type に従って code
が整形式のコードであることを検証し、code の大文字小文字正規化された形式を返す。呼び出し時に次の手順を行う:
type が "language" の場合、
code が unicode_language_id によって照合できない場合(Unicode
ロケール非終端記号 )、RangeError 例外を投げる。
IsStructurallyValidLanguageTag (code )
が false なら、RangeError 例外を投げる。
CanonicalizeUnicodeLocaleId (code )
を返す。
type が "region" の場合、
code が unicode_region_subtag によって照合できない場合(Unicode
ロケール非終端記号 )、RangeError 例外を投げる。
code の ASCII-uppercase
を返す。
type が "script" の場合、
code が unicode_script_subtag によって照合できない場合(Unicode
ロケール非終端記号 )、RangeError 例外を投げる。
Assert :
code の長さは 4 であり、code の各コードユニットは ASCII 文字(0x0041〜0x005A および
0x0061〜0x007A を含む)である。
first を、code の 0 から 1 までのsubstring の
ASCII-uppercase
とする。
rest を、code の 1 からのsubstring の
ASCII-lowercase
とする。
first と rest のstring-concatenation
を返す。
type が "calendar" の場合、
code が type によって照合できない場合(Unicode
ロケール非終端記号 )、RangeError 例外を投げる。
code が Unicode
Technical
Standard #35 Part 1 Core, Section 3.3 BCP 47 Conformance
に記述された後方互換の構文をいずれか使用している場合、RangeError 例外を投げる。
code の ASCII-lowercase
を返す。
type が "dateTimeField" の場合、
IsValidDateTimeFieldCode (code )
の結果が false なら、RangeError 例外を投げる。
code を返す。
Assert : type は
"currency" である。
IsWellFormedCurrencyCode (code )
が false なら、RangeError 例外を投げる。
code の ASCII-uppercase
を返す。
12.5.2 IsValidDateTimeFieldCode ( field )
抽象操作 IsValidDateTimeFieldCode は、引数 field (String)を取り、Boolean を返す。field
引数が有効な日時フィールドコードを表していることを検証する。呼び出し時に次の手順を行う:
field が 表 19 の Code
列に列挙されているなら、true を返す。
false を返す。
表 19: DisplayNames の日時フィールドのコード
コード
説明
"era"
紀元を示すフィールド。例:グレゴリオ暦またはユリウス暦における AD/BC。
"year"
(紀元内の)年を示すフィールド。
"quarter"
四半期を示すフィールド。例:Q2、第2四半期 など。
"month"
月を示すフィールド。例:Sep、September など。
"weekOfYear"
年内の週番号を示すフィールド。
"weekday"
曜日を示すフィールド。例:Tue、Tuesday など。
"day"
月内の日を示すフィールド。
"dayPeriod"
昼夜区分を示すフィールド。am/pm など、または noon、evening など。
"hour"
時を示すフィールド。
"minute"
分を示すフィールド。
"second"
秒を示すフィールド。
"timeZoneName"
タイムゾーン名を示すフィールド。例:PDT、Pacific Daylight Time など。
13 DurationFormat オブジェクト
13.1 Intl.DurationFormat コンストラクタ
Intl.DurationFormat のコンストラクタ :
%Intl.DurationFormat% である。
Intl オブジェクト の
"DurationFormat" プロパティの初期値である。
Intl オブジェクト
のすべてのサービスコンストラクタ プロパティに共通する挙動は、9.1
に規定される。
13.1.1 Intl.DurationFormat ( [ locales [ ,
options ] ] )
Intl.DurationFormat 関数が省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
NewTarget が undefined なら、TypeError 例外を投げる。
durationFormat を ? OrdinaryCreateFromConstructor (NewTarget,
"%Intl.DurationFormatPrototype%" , « [[InitializedDurationFormat]] , [[Locale]] , [[NumberingSystem]] , [[Style]] , [[YearsOptions]] , [[MonthsOptions]] , [[WeeksOptions]] ,
[[DaysOptions]] , [[HoursOptions]] ,
[[MinutesOptions]] , [[SecondsOptions]] , [[MillisecondsOptions]] , [[MicrosecondsOptions]] , [[NanosecondsOptions]] , [[HourMinuteSeparator]] , [[MinuteSecondSeparator]] , [[FractionalDigits]] ») に設定する。
optionsResolution を ? ResolveOptions (%Intl.DurationFormat% ,
%Intl.DurationFormat% .[[LocaleData]] , locales , options ) に設定する。
options を optionsResolution .[[Options]]
に設定する。
r を optionsResolution .[[ResolvedLocale]]
に設定する。
durationFormat .[[Locale]] を r .[[Locale]] に設定する。
resolvedLocaleData を r .[[LocaleData]]
に設定する。
digitalFormat を resolvedLocaleData .[[DigitalFormat]] に設定する。
durationFormat .[[HourMinuteSeparator]] を
digitalFormat .[[HourMinuteSeparator]] に設定する。
durationFormat .[[MinuteSecondSeparator]] を
digitalFormat .[[MinuteSecondSeparator]] に設定する。
durationFormat .[[NumberingSystem]] を
r .[[nu]] に設定する。
style を ? GetOption (options ,
"style" , string , « "long" ,
"short" , "narrow" ,
"digital" », "short" ) に設定する。
durationFormat .[[Style]] を style に設定する。
prevStyle を空文字列に設定する。
表
20 の各行(ヘッダー行を除く)について、表の順序で次を行う:
slot を現在の行の Internal Slot の値とする。
unit を現在の行の Unit の値とする。
styles を現在の行の Styles の値とする。
digitalBase を現在の行の Digital Default の値とする。
unitOptions を ? GetDurationUnitOptions (unit ,
options , style , styles , digitalBase ,
prevStyle , digitalFormat .[[TwoDigitHours]] ) に設定する。
durationFormat の slot という名前の内部スロットの値を
unitOptions に設定する。
unit が
"hours" 、"minutes" 、"seconds" 、"milliseconds" 、または
"microseconds" のいずれかなら、
prevStyle を unitOptions .[[Style]] に設定する。
durationFormat .[[FractionalDigits]] を
? GetNumberOption (options ,
"fractionalDigits" , 0, 9, undefined ) に設定する。
durationFormat を返す。
表 20: DurationFormat インスタンスの内部スロットとプロパティ名
内部スロット
単位
スタイル
デジタル既定値
[[YearsOptions]]
"years"
« "long" , "short" ,
"narrow" »
"short"
[[MonthsOptions]]
"months"
« "long" , "short" ,
"narrow" »
"short"
[[WeeksOptions]]
"weeks"
« "long" , "short" ,
"narrow" »
"short"
[[DaysOptions]]
"days"
« "long" , "short" ,
"narrow" »
"short"
[[HoursOptions]]
"hours"
« "long" , "short" ,
"narrow" , "numeric" ,
"2-digit" »
"numeric"
[[MinutesOptions]]
"minutes"
« "long" , "short" ,
"narrow" , "numeric" ,
"2-digit" »
"numeric"
[[SecondsOptions]]
"seconds"
« "long" , "short" ,
"narrow" , "numeric" ,
"2-digit" »
"numeric"
[[MillisecondsOptions]]
"milliseconds"
« "long" , "short" ,
"narrow" , "numeric" »
"numeric"
[[MicrosecondsOptions]]
"microseconds"
« "long" , "short" ,
"narrow" , "numeric" »
"numeric"
[[NanosecondsOptions]]
"nanoseconds"
« "long" , "short" ,
"narrow" , "numeric" »
"numeric"
13.2 Intl.DurationFormat コンストラクタのプロパティ
Intl.DurationFormat のコンストラクタ :
13.2.1 Intl.DurationFormat.prototype
Intl.DurationFormat.prototype の値は %Intl.DurationFormat.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
13.2.2 Intl.DurationFormat.supportedLocalesOf ( locales [
, options ] )
supportedLocalesOf メソッドが引数 locales と options
で呼び出されたとき、次の手順を行う:
availableLocales を %Intl.DurationFormat% .[[AvailableLocales]] とする。
requestedLocales を ? CanonicalizeLocaleList (locales )
とする。
? FilterLocales (availableLocales ,
requestedLocales , options ) を返す。
13.2.3 内部スロット
[[AvailableLocales]] 内部スロットの値は、9.1 に記述された制約の範囲内で実装定義である。
[[RelevantExtensionKeys]] 内部スロットの値は «
"nu" » である。
[[ResolutionOptionDescriptors]] 内部スロットの値は « {
[[Key]] : "nu" , [[Property]] : "numberingSystem" } » である。
[[LocaleData]] 内部スロットの値は、9.1
に記述された制約および以下の追加制約の範囲内で、すべてのロケール値 locale に対し実装定義である:
[[LocaleData]] .[[<locale >]] は、Record
であり、[[nu]] フィールドと [[DigitalFormat]]
フィールドを持たなければならない。
[[LocaleData]] .[[<locale >]].[[nu]] は、List (16.2.3 参照)でなければならず、値
"native" 、"traditio" 、"finance"
を含んではならない。
[[LocaleData]] .[[<locale >]].[[DigitalFormat]] は、Record
であり、そのキーは locale で利用可能な各数字体系に対応する。各キーに対応する値は、以下のフィールドを含むRecord
でなければならない:
[[HourMinuteSeparator]] :そのロケールと数字体系の組み合わせに対し、スタイル
"numeric" または "2-digit"
使用時に、時間と分の間に使う適切な区切り文字列。
[[MinuteSecondSeparator]] :そのロケールと数字体系の組み合わせに対し、スタイル
"numeric" または "2-digit"
使用時に、分と秒の間に使う適切な区切り文字列。
[[TwoDigitHours]] :スタイル "numeric"
使用時に、常に2桁で時間を表示するかどうかを示す真偽値。
注
実装においては、Common Locale Data Repository(
http://cldr.unicode.org/ )が提供するロケールデータを使用することが推奨される。
13.3 Intl.DurationFormat プロトタイプオブジェクトのプロパティ
Intl.DurationFormat プロトタイプオブジェクト :
%Intl.DurationFormat.prototype% である。
通常のオブジェクト である。
Intl.DurationFormat のインスタンスではなく、[[InitializedDurationFormat]]
内部スロットや、Intl.DurationFormat インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
13.3.1 Intl.DurationFormat.prototype.constructor
Intl.DurationFormat.prototype.constructor の初期値は、組込みオブジェクト %Intl.DurationFormat% である。
13.3.2 Intl.DurationFormat.prototype.resolvedOptions ( )
この関数は、オブジェクトの初期化時に計算されたロケールおよびオプションへのアクセスを提供する。
df を this の値とする。
? RequireInternalSlot (df ,
[[InitializedDurationFormat]] ) を実行する。
options を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
表
21 の各行(ヘッダー行を除く)について、表の順序で次を行う:
p を現在の行の Property の値とする。
v を、現在の行の Internal Slot の値という名前を持つ df の内部スロットの値とする。
v が undefined でない場合、
現在の行に Conversion 値があれば conversion をその値とし、なければ
conversion を empty とする。
conversion が number の場合、
v を 𝔽 (v )
に設定する。
それ以外で conversion が empty でない場合、
Assert :
conversion は style+display
であり、v は Duration Unit
Options Record である。
注:v .[[Style]] は p
という名前のプロパティ(複数形のTemporal単位)で表現され、v .[[Display]] は p の末尾に
"Display" を付加した名前のプロパティで表現される。
style を v .[[Style]] に設定する。
style が "fractional" の場合、
Assert :
IsFractionalSecondUnitName (p )
は true である。
style を "numeric" に設定する。
! CreateDataPropertyOrThrow (options ,
p , style ) を実行する。
p を p と "Display"
の連結 に設定する。
v を v .[[Display]]
に設定する。
! CreateDataPropertyOrThrow (options ,
p , v ) を実行する。
options を返す。
表 21: DurationFormat インスタンスの解決済みオプション
内部スロット
プロパティ
変換
[[Locale]]
"locale"
[[NumberingSystem]]
"numberingSystem"
[[Style]]
"style"
[[YearsOptions]]
"years"
style+display
[[MonthsOptions]]
"months"
style+display
[[WeeksOptions]]
"weeks"
style+display
[[DaysOptions]]
"days"
style+display
[[HoursOptions]]
"hours"
style+display
[[MinutesOptions]]
"minutes"
style+display
[[SecondsOptions]]
"seconds"
style+display
[[MillisecondsOptions]]
"milliseconds"
style+display
[[MicrosecondsOptions]]
"microseconds"
style+display
[[NanosecondsOptions]]
"nanoseconds"
style+display
[[FractionalDigits]]
"fractionalDigits"
number
13.3.3 Intl.DurationFormat.prototype.format ( duration )
format メソッドが引数 duration で呼び出されたとき、次の手順を行う:
df を this の値とする。
? RequireInternalSlot (df ,
[[InitializedDurationFormat]] ) を実行する。
record を ? ToDurationRecord (duration )
に設定する。
parts を PartitionDurationFormatPattern (df ,
record ) に設定する。
result を空文字列に設定する。
Record
{ [[Type]] , [[Value]] , [[Unit]] } 各 part ∈ parts について、
result を result と part .[[Value]] の連結 に設定する。
result を返す。
13.3.4 Intl.DurationFormat.prototype.formatToParts (
duration )
formatToParts メソッドが引数 duration で呼び出されたとき、次の手順を行う:
df を this の値とする。
? RequireInternalSlot (df ,
[[InitializedDurationFormat]] ) を実行する。
record を ? ToDurationRecord (duration )
に設定する。
parts を PartitionDurationFormatPattern (df ,
record ) に設定する。
result を ! ArrayCreate (0)
に設定する。
n を 0 に設定する。
Record
{ [[Type]] , [[Value]] , [[Unit]] } 各 part ∈ parts について、
obj を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
! CreateDataPropertyOrThrow (obj ,
"type" , part .[[Type]] )
を実行する。
! CreateDataPropertyOrThrow (obj ,
"value" , part .[[Value]] )
を実行する。
part .[[Unit]] が
empty でない場合、! CreateDataPropertyOrThrow (obj ,
"unit" , part .[[Unit]] )
を実行する。
! CreateDataPropertyOrThrow (result ,
! ToString (n ),
obj ) を実行する。
n を n + 1 に設定する。
result を返す。
13.3.5 Intl.DurationFormat.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は、String 値 "Intl.DurationFormat" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
13.4 Intl.DurationFormat インスタンスのプロパティ
Intl.DurationFormat インスタンスは、%Intl.DurationFormat.prototype%
からプロパティを継承する。
Intl.DurationFormat インスタンスは [[InitializedDurationFormat]] 内部スロットを持つ。
Intl.DurationFormat インスタンスはまた、Intl.DurationFormat
コンストラクタ によって計算されるいくつかの内部スロットも持つ:
13.5 DurationFormat オブジェクトの抽象操作
13.5.1 Duration Record
Duration Record は、Duration を表現するために用いられる
Record
値である。
Duration Record は 表 22 に示すフィールドを持つ。
表 22: Duration Record のフィールド
フィールド
意味
[[Years]]
継続時間における年の数。
[[Months]]
継続時間における月の数。
[[Weeks]]
継続時間における週の数。
[[Days]]
継続時間における日の数。
[[Hours]]
継続時間における時の数。
[[Minutes]]
継続時間における分の数。
[[Seconds]]
継続時間における秒の数。
[[Milliseconds]]
継続時間におけるミリ秒の数。
[[Microseconds]]
継続時間におけるマイクロ秒の数。
[[Nanoseconds]]
継続時間におけるナノ秒の数。
13.5.2 ToIntegerIfIntegral ( argument )
抽象操作 ToIntegerIfIntegral は引数 argument (ECMAScript
言語値 )を取り、正常完了(normal
completion)で integer を含むか、throw
completion を返す。これは argument を、その Number 値を表す integer
に変換するか、その値が整数 でない場合は
RangeError を投げる。呼び出し時に次の手順を行う:
number を ? ToNumber (argument )
とする。
number が integral Number
でないなら、RangeError 例外を投げる。
ℝ (number ) を返す。
13.5.3 ToDurationRecord ( input )
抽象操作 ToDurationRecord は引数 input (ECMAScript
言語値 )を取り、正常完了(normal
completion)で Duration Record を含むか、throw
completion を返す。これは、Duration を表す与えられたオブジェクトを Duration
Record に変換する。呼び出し時に次の手順を行う:
input が Object でない なら、
input が String
である なら、RangeError 例外を投げる。
TypeError 例外を投げる。
result を、各フィールドが 0 に設定された新しい Duration Record とする。
days を ? Get (input ,
"days" ) とする。
days が undefined でないなら、result .[[Days]] を ? ToIntegerIfIntegral (days )
に設定する。
hours を ? Get (input ,
"hours" ) とする。
hours が undefined でないなら、result .[[Hours]] を ? ToIntegerIfIntegral (hours )
に設定する。
microseconds を ? Get (input ,
"microseconds" ) とする。
microseconds が undefined でないなら、
result .[[Microseconds]] を ? ToIntegerIfIntegral (microseconds )
に設定する。
milliseconds を ? Get (input ,
"milliseconds" ) とする。
milliseconds が undefined でないなら、
result .[[Milliseconds]] を ? ToIntegerIfIntegral (milliseconds )
に設定する。
minutes を ? Get (input ,
"minutes" ) とする。
minutes が undefined でないなら、result .[[Minutes]] を ? ToIntegerIfIntegral (minutes )
に設定する。
months を ? Get (input ,
"months" ) とする。
months が undefined でないなら、result .[[Months]] を ? ToIntegerIfIntegral (months )
に設定する。
nanoseconds を ? Get (input ,
"nanoseconds" ) とする。
nanoseconds が undefined でないなら、
result .[[Nanoseconds]] を ? ToIntegerIfIntegral (nanoseconds )
に設定する。
seconds を ? Get (input ,
"seconds" ) とする。
seconds が undefined でないなら、result .[[Seconds]] を ? ToIntegerIfIntegral (seconds )
に設定する。
weeks を ? Get (input ,
"weeks" ) とする。
weeks が undefined でないなら、result .[[Weeks]] を ? ToIntegerIfIntegral (weeks )
に設定する。
years を ? Get (input ,
"years" ) とする。
years が undefined でないなら、result .[[Years]] を ? ToIntegerIfIntegral (years )
に設定する。
years 、months 、weeks 、days 、hours 、minutes 、seconds 、milliseconds 、microseconds 、および
nanoseconds がすべて undefined なら、TypeError
例外を投げる。
もし IsValidDuration (
result .[[Years]] , result .[[Months]] , result .[[Weeks]] , result .[[Days]] ,
result .[[Hours]] , result .[[Minutes]] , result .[[Seconds]] , result .[[Milliseconds]] , result .[[Microseconds]] , result .[[Nanoseconds]] ) が false なら、
RangeError 例外を投げる。
result を返す。
13.5.4 DurationSign ( duration )
抽象操作 DurationSign は引数 duration (Duration Record )を取り、-1、0、または 1
を返す。duration 引数のうち最も上位の非ゼロフィールドが正なら 1、負なら -1 を返す。duration のすべてのフィールドが 0
の場合は 0 を返す。呼び出し時に次の手順を行う:
« duration .[[Years]] 、duration .[[Months]] 、duration .[[Weeks]] 、duration .[[Days]] 、duration .[[Hours]] 、duration .[[Minutes]] 、duration .[[Seconds]] 、duration .[[Milliseconds]] 、duration .[[Microseconds]] 、duration .[[Nanoseconds]] » の各値 v について、次を行う:
v < 0 なら、-1 を返す。
v > 0 なら、1 を返す。
0 を返す。
13.5.5 IsValidDuration ( years , months ,
weeks , days , hours , minutes , seconds ,
milliseconds , microseconds , nanoseconds )
抽象操作 IsValidDuration は引数 years (integer )、months (integer )、weeks (integer )、days (integer )、hours (integer )、minutes (integer )、seconds (integer )、milliseconds (integer )、microseconds (integer )、および
nanoseconds (integer )を取り、Boolean を返す。引数が
Duration
Record を構築するための有効な入力を成す場合は true 、それ以外は
false を返す。呼び出し時に次の手順を行う:
sign を 0 とする。
«
years 、months 、weeks 、days 、hours 、minutes 、seconds 、milliseconds 、microseconds 、nanoseconds
» の各値 v について、次を行う:
𝔽 (v ) が
有限 でないなら、false
を返す。
v < 0 の場合、
sign > 0 なら、false を返す。
sign を -1 に設定する。
それ以外で v > 0 の場合、
sign < 0 なら、false を返す。
sign を 1 に設定する。
abs (years ) ≥
232 なら、false を返す。
abs (months ) ≥
232 なら、false を返す。
abs (weeks ) ≥
232 なら、false を返す。
normalizedSeconds を days × 86,400 + hours × 3600 +
minutes × 60 + seconds + ℝ (𝔽 (milliseconds )) ×
10-3 + ℝ (𝔽 (microseconds )) ×
10-6 + ℝ (𝔽 (nanoseconds )) ×
10-9 とする。
注:上記の手順は浮動小数点演算を直接用いて実装することはできない。milliseconds 、microseconds 、または
nanoseconds が安全でない整数 の場合、10-3 、10-6 、10-9
をそれぞれ乗算するのは不正確になり得る。この乗算は、商のビット数が十分な std::remquo() の実装を用いて C++
で実装できる。文字列操作でも、10 の冪による乗算であるため、正確な結果が得られる。
abs (normalizedSeconds )
≥ 253 なら、false を返す。
true を返す。
13.5.6 GetDurationUnitOptions ( unit , options ,
baseStyle , stylesList , digitalBase , prevStyle ,
twoDigitHours )
抽象操作 GetDurationUnitOptions は引数
unit (String)、options (Object)、baseStyle (String)、stylesList (List (String
のリスト))、digitalBase (String)、prevStyle (String)、および
twoDigitHours (Boolean)を取り、正常完了(normal
completion)で Duration Unit Options
Record を含むか、throw
completion を返す。これは、与えられた unit に関する関連オプションを Object
から抽出し、Record
として返す。呼び出し時に次の手順を行う:
style を ? GetOption (options ,
unit , string , stylesList ,
undefined ) とする。
displayDefault を "always" とする。
style が undefined の場合、
baseStyle が "digital" の場合、
style を digitalBase に設定する。
unit が
"hours" 、"minutes" 、"seconds"
のいずれでもない場合、displayDefault を "auto" に設定する。
それ以外で prevStyle が
"fractional" 、"numeric" 、または
"2-digit" のいずれかなら、
style を "numeric" に設定する。
unit が "minutes" または
"seconds" でないなら、displayDefault を
"auto" に設定する。
それ以外なら、
style を baseStyle に設定する。
displayDefault を "auto" に設定する。
style が "numeric" で、IsFractionalSecondUnitName (unit )
が true の場合、
style を "fractional" に設定する。
displayDefault を "auto" に設定する。
displayField を、unit と "Display" の連結 とする。
display を ? GetOption (options ,
displayField , string , « "auto" ,
"always" », displayDefault ) とする。
? ValidateDurationUnitStyle (unit ,
style , display , prevStyle ) を実行する。
unit が "hours" かつ twoDigitHours が
true なら、style を "2-digit" に設定する。
unit が "minutes" または "seconds" で、かつ
prevStyle が "numeric" または "2-digit"
の場合、style を "2-digit" に設定する。
Duration Unit Options
Record { [[Style]] : style ,
[[Display]] : display } を返す。
13.5.6.1 Duration Unit Options Record
各 Duration Unit Options
Record は、表 23
で定義されるフィールドを持つ。
表 23: Duration Unit
Options Record
フィールド名
値の型
[[Style]]
表 20 の Styles 列にある
String のいずれか
[[Display]]
"auto" または "always"
13.5.6.2 ValidateDurationUnitStyle ( unit ,
style , display , prevStyle )
抽象操作 ValidateDurationUnitStyle は引数
unit (String)、style (String)、display (String)、prevStyle (String)を取り、正常完了(normal
completion)で unused を返すか、throw
completion を返す。呼び出し時に次の手順を行う:
display が "always" で、かつ style が
"fractional" なら、RangeError 例外を投げる。
prevStyle が "fractional" で、かつ style が
"fractional" でないなら、RangeError 例外を投げる。
prevStyle が "numeric" または
"2-digit" で、かつ style が
"fractional" 、"numeric" 、"2-digit"
のいずれでもないなら、RangeError 例外を投げる。
unused を返す。
注
unit
は上記のアルゴリズムでは参照されないが、例外メッセージの構築に際して実装がそれを用いることが推奨される。
13.5.7 ComputeFractionalDigits ( durationFormat ,
duration )
抽象操作 ComputeFractionalDigits は引数 durationFormat (DurationFormat オブジェクト)および
duration (Duration Record )を取り、数学的値
を返す。これは、durationFormat のうちスタイルが "fractional"
であるすべての単位の値を、"fractional" を用いない durationFormat
の最小単位の分数として合計する。呼び出し時に次の手順を行う:
result を 0 とする。
exponent を 3 とする。
表 24
の各行(ヘッダー行を除く)について、表の順序で次を行う:
unitOptions を、現在の行の Internal Slot の値という名前を持つ
durationFormat の内部スロットの値とする。
unitOptions .[[Style]] が
"fractional" の場合、
unit を現在の行の Unit の値とする。
Assert :
IsFractionalSecondUnitName (unit )
は true である。
value を、現在の行の Value Field の値という名前を持つ duration
のフィールドの値とする。
result を result + (value /
10exponent ) に設定する。
exponent を exponent + 3 に設定する。
result を返す。
13.5.8 NextUnitFractional ( durationFormat ,
unit )
抽象操作 NextUnitFractional は引数 durationFormat (DurationFormat オブジェクト)および
unit (String)を取り、Boolean を返す。次に小さい単位が "fractional"
スタイルを用いる場合、true を返す。呼び出し時に次の手順を行う:
unit が "seconds" で、かつ durationFormat .[[MillisecondsOptions]] .[[Style]] が
"fractional" なら、true を返す。
unit が "milliseconds" で、かつ
durationFormat .[[MicrosecondsOptions]] .[[Style]] が "fractional" なら、
true を返す。
unit が "microseconds" で、かつ
durationFormat .[[NanosecondsOptions]] .[[Style]] が "fractional" なら、
true を返す。
false を返す。
13.5.9 FormatNumericHours ( durationFormat ,
hoursValue , signDisplayed )
抽象操作 FormatNumericHours は引数 durationFormat (DurationFormat
オブジェクト)、hoursValue (integer )、および
signDisplayed (Boolean)を取り、Records
のList
を返す。hoursValue は時の数を示す integer である。有効なロケールおよび
durationFormat の書式オプションに従って、hoursValue のパーツを生成する。呼び出し時に次の手順を行う:
result を新しい空の List
とする。
hoursStyle を durationFormat .[[HoursOptions]] .[[Style]] とする。
Assert :
hoursStyle は "numeric" または "2-digit"
である。
nfOpts を OrdinaryObjectCreate (null )
とする。
numberingSystem を durationFormat .[[NumberingSystem]] とする。
! CreateDataPropertyOrThrow (nfOpts ,
"numberingSystem" , numberingSystem ) を実行する。
hoursStyle が "2-digit" の場合、
! CreateDataPropertyOrThrow (nfOpts ,
"minimumIntegerDigits" , 2 𝔽 )
を実行する。
signDisplayed が false の場合、
! CreateDataPropertyOrThrow (nfOpts ,
"signDisplay" , "never" ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"useGrouping" , false ) を実行する。
nf を ! Construct (%Intl.NumberFormat% , «
durationFormat .[[Locale]] ,
nfOpts ») とする。
hoursParts を PartitionNumberPattern (nf ,
hoursValue ) とする。
hoursParts の各 Record
{ [[Type]] , [[Value]] }
part について、
result に、Record
{ [[Type]] : part .[[Type]] , [[Value]] :
part .[[Value]] , [[Unit]] : "hour" } を追加する。
result を返す。
13.5.10 FormatNumericMinutes ( durationFormat ,
minutesValue , hoursDisplayed , signDisplayed )
抽象操作 FormatNumericMinutes は引数 durationFormat (DurationFormat
オブジェクト)、minutesValue (integer )、hoursDisplayed (Boolean)、および
signDisplayed (Boolean)を取り、Records
のList
を返す。minutesValue は分の数を示す integer である。有効なロケールおよび
durationFormat の書式オプションに従って、minutesValue のパーツを生成する。呼び出し時に次の手順を行う:
result を新しい空の List
とする。
hoursDisplayed が true の場合、
separator を durationFormat .[[HourMinuteSeparator]] とする。
result に、Record
{ [[Type]] : "literal" , [[Value]] : separator , [[Unit]] : empty } を追加する。
minutesStyle を durationFormat .[[MinutesOptions]] .[[Style]] とする。
Assert :
minutesStyle は "numeric" または "2-digit"
である。
nfOpts を OrdinaryObjectCreate (null )
とする。
numberingSystem を durationFormat .[[NumberingSystem]] とする。
! CreateDataPropertyOrThrow (nfOpts ,
"numberingSystem" , numberingSystem ) を実行する。
minutesStyle が "2-digit" の場合、
! CreateDataPropertyOrThrow (nfOpts ,
"minimumIntegerDigits" , 2 𝔽 )
を実行する。
signDisplayed が false の場合、
! CreateDataPropertyOrThrow (nfOpts ,
"signDisplay" , "never" ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"useGrouping" , false ) を実行する。
nf を ! Construct (%Intl.NumberFormat% , «
durationFormat .[[Locale]] ,
nfOpts ») とする。
minutesParts を PartitionNumberPattern (nf ,
minutesValue ) とする。
minutesParts の各 Record
{ [[Type]] , [[Value]] }
part について、
result に、Record
{ [[Type]] : part .[[Type]] , [[Value]] :
part .[[Value]] , [[Unit]] : "minute" } を追加する。
result を返す。
13.5.11 FormatNumericSeconds ( durationFormat ,
secondsValue , minutesDisplayed , signDisplayed )
抽象操作 FormatNumericSeconds は引数 durationFormat (DurationFormat
オブジェクト)、secondsValue (数学的値 )、minutesDisplayed (Boolean)、および
signDisplayed (Boolean)を取り、Records
のList
を返す。secondsValue は秒の数を示す 数学的値 である。有効なロケールおよび
durationFormat の書式オプションに従って、secondsValue のパーツを生成する。呼び出し時に次の手順を行う:
result を新しい空の List
とする。
minutesDisplayed が true の場合、
separator を durationFormat .[[MinuteSecondSeparator]] とする。
result に、Record
{ [[Type]] : "literal" , [[Value]] : separator , [[Unit]] : empty } を追加する。
secondsStyle を durationFormat .[[SecondsOptions]] .[[Style]] とする。
Assert :
secondsStyle は "numeric" または "2-digit"
である。
nfOpts を OrdinaryObjectCreate (null )
とする。
numberingSystem を durationFormat .[[NumberingSystem]] とする。
! CreateDataPropertyOrThrow (nfOpts ,
"numberingSystem" , numberingSystem ) を実行する。
secondsStyle が "2-digit" の場合、
! CreateDataPropertyOrThrow (nfOpts ,
"minimumIntegerDigits" , 2 𝔽 )
を実行する。
signDisplayed が false の場合、
! CreateDataPropertyOrThrow (nfOpts ,
"signDisplay" , "never" ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"useGrouping" , false ) を実行する。
fractionDigits を durationFormat .[[FractionalDigits]] とする。
fractionDigits が undefined の場合、
! CreateDataPropertyOrThrow (nfOpts ,
"maximumFractionDigits" , 9 𝔽 )
を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"minimumFractionDigits" , +0 𝔽 )
を実行する。
それ以外なら、
! CreateDataPropertyOrThrow (nfOpts ,
"maximumFractionDigits" , fractionDigits ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"minimumFractionDigits" , fractionDigits ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"roundingMode" , "trunc" ) を実行する。
nf を ! Construct (%Intl.NumberFormat% , «
durationFormat .[[Locale]] ,
nfOpts ») とする。
secondsParts を PartitionNumberPattern (nf ,
secondsValue ) とする。
secondsParts の各 Record
{ [[Type]] , [[Value]] }
part について、
result に、Record
{ [[Type]] : part .[[Type]] , [[Value]] :
part .[[Value]] , [[Unit]] : "second" } を追加する。
result を返す。
13.5.12 FormatNumericUnits ( durationFormat ,
duration , firstNumericUnit , signDisplayed )
抽象操作 FormatNumericUnits は引数 durationFormat (DurationFormat
オブジェクト)、duration (Duration
Record )、firstNumericUnit (String)、および
signDisplayed (Boolean)を取り、Records
のList
を返す。有効なロケールおよび durationFormat の書式オプションに従って、duration のうち
"numeric" または "2-digit"
スタイルを用いる要素を表すパーツを生成する。呼び出し時に次の手順を行う:
Assert :
firstNumericUnit は
"hours" 、"minutes" 、または "seconds"
である。
numericPartsList を新しい空の List
とする。
hoursValue を duration .[[Hours]] とする。
hoursDisplay を durationFormat .[[HoursOptions]] .[[Display]] とする。
minutesValue を duration .[[Minutes]] とする。
minutesDisplay を durationFormat .[[MinutesOptions]] .[[Display]] とする。
secondsValue を duration .[[Seconds]] とする。
duration .[[Milliseconds]] が 0 でない、または
duration .[[Microseconds]] が 0 でない、または
duration .[[Nanoseconds]] が 0 でない場合、
secondsValue を secondsValue + ComputeFractionalDigits (durationFormat ,
duration ) に設定する。
secondsDisplay を durationFormat .[[SecondsOptions]] .[[Display]] とする。
hoursFormatted を false とする。
firstNumericUnit が "hours" の場合、
hoursValue が 0 でない、または hoursDisplay が
"always" なら、
hoursFormatted を true に設定する。
secondsValue が 0 でない、または secondsDisplay が
"always" なら、
secondsFormatted を true に設定する。
それ以外なら、
secondsFormatted を false に設定する。
minutesFormatted を false とする。
firstNumericUnit が "hours" または
"minutes" の場合、
hoursFormatted が true かつ
secondsFormatted が true なら、
minutesFormatted を true に設定する。
それ以外で minutesValue が 0 でない、または minutesDisplay が
"always" なら、
minutesFormatted を true に設定する。
hoursFormatted が true の場合、
signDisplayed が true の場合、
hoursValue が 0 で、かつ DurationSign (duration )
が -1 なら、
hoursValue を
negative-zero に設定する。
hoursParts を FormatNumericHours (durationFormat ,
hoursValue , signDisplayed ) とする。
numericPartsList を numericPartsList と
hoursParts のリスト連結
に設定する。
signDisplayed を false に設定する。
minutesFormatted が true の場合、
signDisplayed が true の場合、
minutesValue が 0 で、かつ DurationSign (duration )
が -1 なら、
minutesValue を
negative-zero に設定する。
minutesParts を FormatNumericMinutes (durationFormat ,
minutesValue , hoursFormatted , signDisplayed )
とする。
numericPartsList を numericPartsList と
minutesParts のリスト連結
に設定する。
signDisplayed を false に設定する。
secondsFormatted が true の場合、
secondsParts を FormatNumericSeconds (durationFormat ,
secondsValue , minutesFormatted , signDisplayed )
とする。
numericPartsList を numericPartsList と
secondsParts のリスト連結
に設定する。
numericPartsList を返す。
13.5.13 IsFractionalSecondUnitName ( unit )
抽象操作 IsFractionalSecondUnitName は引数 unit (String)を取り、Boolean を返す。呼び出し時に次の手順を行う:
unit が
"milliseconds" 、"microseconds" 、または
"nanoseconds" のいずれかなら、true を返す。
false を返す。
13.5.14 ListFormatParts ( durationFormat ,
partitionedPartsList )
抽象操作 ListFormatParts は引数 durationFormat (DurationFormat オブジェクト)および
partitionedPartsList (Lists (Records
のリスト)のList )を取り、List
を返す。有効なロケールおよび durationFormat の書式オプションに従って、partitionedPartsList 内の
Lists
に含まれるパーツに対応する List
を生成する。呼び出し時に次の手順を行う:
lfOpts を OrdinaryObjectCreate (null )
とする。
! CreateDataPropertyOrThrow (lfOpts ,
"type" , "unit" ) を実行する。
listStyle を durationFormat .[[Style]] とする。
listStyle が "digital" の場合、
listStyle を "short" に設定する。
! CreateDataPropertyOrThrow (lfOpts ,
"style" , listStyle ) を実行する。
lf を ! Construct (%Intl.ListFormat% , «
durationFormat .[[Locale]] ,
lfOpts ») とする。
strings を新しい空の List
とする。
partitionedPartsList の各要素 parts について、
string を空文字列とする。
parts 内の各 Record
{ [[Type]] , [[Value]] , [[Unit]] } part について、
string を string と part .[[Value]] の連結 に設定する。
strings に string を追加する。
formattedPartsList を CreatePartsFromList (lf ,
strings ) とする。
partitionedPartsIndex を 0 とする。
partitionedLength を partitionedPartsList の要素数とする。
flattenedPartsList を新しい空の List
とする。
formattedPartsList の各 Record
{ [[Type]] , [[Value]] }
listPart について、
listPart .[[Type]] が
"element" の場合、
Assert :
partitionedPartsIndex < partitionedLength である。
parts を
partitionedPartsList [partitionedPartsIndex ] とする。
parts 内の各 Record
{ [[Type]] , [[Value]] ,
[[Unit]] } part について、
flattenedPartsList に part を追加する。
partitionedPartsIndex を partitionedPartsIndex + 1
に設定する。
それ以外なら、
Assert :
listPart .[[Type]] は
"literal" である。
flattenedPartsList に、Record
{ [[Type]] : "literal" , [[Value]] : listPart .[[Value]] , [[Unit]] :
empty } を追加する。
flattenedPartsList を返す。
13.5.15 PartitionDurationFormatPattern ( durationFormat ,
duration )
抽象操作 PartitionDurationFormatPattern は引数 durationFormat (DurationFormat)および
duration (Duration Record )を取り、List
を返す。有効なロケールおよび durationFormat の書式オプションに従って、duration
に対応するパーツを生成する。呼び出し時に次の手順を行う:
result を新しい空の List
とする。
signDisplayed を true とする。
numericUnitFound を false とする。
numericUnitFound が false の間、表 24
のヘッダー行を除く各行について、表の順序で繰り返す:
value を、現在の行の Value Field の値という名前を持つ duration のフィールドの値とする。
unitOptions を、現在の行の Internal Slot の値という名前を持つ
durationFormat の内部スロットの値とする。
style を unitOptions .[[Style]]
とする。
display を unitOptions .[[Display]]
とする。
unit を現在の行の Unit の値とする。
numberFormatUnit を現在の行の NumberFormat Unit の値とする。
style が "numeric" または
"2-digit" の場合、
numericPartsList を FormatNumericUnits (durationFormat ,
duration , unit , signDisplayed ) とする。
numericPartsList が空でないなら、result に
numericPartsList を追加する。
numericUnitFound を true に設定する。
それ以外なら、
nfOpts を OrdinaryObjectCreate (null )
とする。
NextUnitFractional (durationFormat ,
unit ) が true の場合、
value を value + ComputeFractionalDigits (durationFormat ,
duration ) に設定する。
fractionDigits を durationFormat .[[FractionalDigits]] とする。
fractionDigits が undefined の場合、
! CreateDataPropertyOrThrow (nfOpts ,
"maximumFractionDigits" ,
9 𝔽 ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"minimumFractionDigits" ,
+0 𝔽 ) を実行する。
それ以外なら、
! CreateDataPropertyOrThrow (nfOpts ,
"maximumFractionDigits" ,
fractionDigits ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"minimumFractionDigits" ,
fractionDigits ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"roundingMode" , "trunc" )
を実行する。
numericUnitFound を true に設定する。
display が "always" である、または
value が 0 でない場合、
! CreateDataPropertyOrThrow (nfOpts ,
"numberingSystem" ,
durationFormat .[[NumberingSystem]] ) を実行する。
signDisplayed が true の場合、
signDisplayed を false
に設定する。
value が 0 で、かつ DurationSign (duration )
が -1 なら、value を
negative-zero に設定する。
それ以外なら、
! CreateDataPropertyOrThrow (nfOpts ,
"signDisplay" ,
"never" ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"style" , "unit" ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"unit" , numberFormatUnit ) を実行する。
! CreateDataPropertyOrThrow (nfOpts ,
"unitDisplay" , style ) を実行する。
nf を ! Construct (%Intl.NumberFormat% ,
« durationFormat .[[Locale]] ,
nfOpts ») とする。
parts を PartitionNumberPattern (nf ,
value ) とする。
list を新しい空の List
とする。
parts の各 Record
{ [[Type]] , [[Value]] } part について、
list に、Record
{ [[Type]] :
part .[[Type]] , [[Value]] : part .[[Value]] , [[Unit]] :
numberFormatUnit } を追加する。
result に list を追加する。
ListFormatParts (durationFormat ,
result ) を返す。
表 24: PartitionDurationFormatPattern
に関連する DurationFormat インスタンスの内部スロットとプロパティ
値フィールド
内部スロット
単位
NumberFormat の単位
[[Years]]
[[YearsOptions]]
"years"
"year"
[[Months]]
[[MonthsOptions]]
"months"
"month"
[[Weeks]]
[[WeeksOptions]]
"weeks"
"week"
[[Days]]
[[DaysOptions]]
"days"
"day"
[[Hours]]
[[HoursOptions]]
"hours"
"hour"
[[Minutes]]
[[MinutesOptions]]
"minutes"
"minute"
[[Seconds]]
[[SecondsOptions]]
"seconds"
"second"
[[Milliseconds]]
[[MillisecondsOptions]]
"milliseconds"
"millisecond"
[[Microseconds]]
[[MicrosecondsOptions]]
"microseconds"
"microsecond"
[[Nanoseconds]]
[[NanosecondsOptions]]
"nanoseconds"
"nanosecond"
14 ListFormat オブジェクト
14.1 Intl.ListFormat コンストラクタ
Intl.ListFormat のコンストラクタ :
%Intl.ListFormat% である。
Intl オブジェクト の
"ListFormat" プロパティの初期値である。
Intl
オブジェクト のすべてのサービスコンストラクタ プロパティに共通の挙動は、9.1 に規定される。
14.1.1 Intl.ListFormat ( [ locales [ , options
] ] )
Intl.ListFormat 関数が省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
NewTarget が undefined なら、TypeError 例外を投げる。
listFormat を ? OrdinaryCreateFromConstructor (NewTarget,
"%Intl.ListFormat.prototype%" , « [[InitializedListFormat]] , [[Locale]] ,
[[Type]] , [[Style]] , [[Templates]] ») とする。
optionsResolution を ? ResolveOptions (%Intl.ListFormat% ,
%Intl.ListFormat% .[[LocaleData]] , locales , options ) とする。
options を optionsResolution .[[Options]]
に設定する。
r を optionsResolution .[[ResolvedLocale]]
に設定する。
listFormat .[[Locale]] を r .[[Locale]] に設定する。
type を ? GetOption (options ,
"type" , string , «
"conjunction" , "disjunction" ,
"unit" », "conjunction" ) に設定する。
listFormat .[[Type]] を type に設定する。
style を ? GetOption (options ,
"style" , string , « "long" ,
"short" , "narrow" »,
"long" ) に設定する。
listFormat .[[Style]] を style に設定する。
resolvedLocaleData を r .[[LocaleData]]
に設定する。
dataLocaleTypes を
resolvedLocaleData .[[<type >]] とする。
listFormat .[[Templates]] を
dataLocaleTypes .[[<style >]] に設定する。
listFormat を返す。
14.2 Intl.ListFormat コンストラクタのプロパティ
Intl.ListFormat のコンストラクタ :
14.2.1 Intl.ListFormat.prototype
Intl.ListFormat.prototype の値は %Intl.ListFormat.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
14.2.2 Intl.ListFormat.supportedLocalesOf ( locales [ ,
options ] )
supportedLocalesOf メソッドが引数 locales と options
で呼び出されたとき、次の手順を行う:
availableLocales を %Intl.ListFormat% .[[AvailableLocales]] とする。
requestedLocales を ? CanonicalizeLocaleList (locales )
とする。
? FilterLocales (availableLocales ,
requestedLocales , options ) を返す。
14.2.3 内部スロット
[[AvailableLocales]] 内部スロットの値は、9.1 に記述された制約の範囲内で実装定義 である。
[[RelevantExtensionKeys]] 内部スロットの値は « » である。
[[ResolutionOptionDescriptors]] 内部スロットの値は « » である。
注 1
Intl.ListFormat には関連する拡張キーは存在しない。
[[LocaleData]] 内部スロットの値は、9.1 に記述された制約および、%Intl.ListFormat% .[[AvailableLocales]] の各ロケール値 locale に対する以下の追加制約の範囲内で実装定義 である:
[[LocaleData]] .[[<locale >]] は、3 つのフィールド [[conjunction]] 、[[disjunction]] 、[[unit]] を持つRecord
である。これらはそれぞれ、書式スタイルの 3 つの名前 [[long]] 、[[short]] 、[[narrow]] をフィールドとして持つRecord
でなければならない。
それぞれのフィールドはListFormat テンプレートセット と見なされ、List (Records
のリスト)であり、[[Pair]] 、[[Start]] 、[[Middle]] 、[[End]]
という名前のフィールドを持たなければならない。各フィールドは LDML の List Format Rules で規定されるテンプレート文字列でなければならない。各テンプレート文字列は
"{0}" と "{1}" という部分文字列をそれぞれ 1 回だけ含まなければならない。substring
"{0}" は、substring
"{1}" より前に現れるべきである。
注 2
実装では、Common Locale Data Repository(
https://cldr.unicode.org/ )が提供するロケールデータを用いることが推奨される。
LDML の
listPattern において、
conjunction は "standard"、
disjunction は
"or"、
unit は "unit" に対応する。
注 3
リストタイプのうち、conjunction は「and」に基づくリスト(例: "A, B, and C")、disjunction
は「or」に基づくリスト(例: "A, B, or C")、unit は単位を伴う値のリスト(例: "5 pounds, 12 ounces")を表す。
14.3 Intl.ListFormat プロトタイプオブジェクトのプロパティ
Intl.ListFormat プロトタイプオブジェクト :
%Intl.ListFormat.prototype% である。
通常のオブジェクト である。
Intl.ListFormat のインスタンスではなく、[[InitializedListFormat]]
内部スロットや、Intl.ListFormat インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
14.3.1 Intl.ListFormat.prototype.constructor
Intl.ListFormat.prototype.constructor の初期値は %Intl.ListFormat% である。
14.3.2 Intl.ListFormat.prototype.resolvedOptions ( )
この関数は、オブジェクトの初期化時に計算されたロケールおよびオプションへのアクセスを提供する。
lf を this の値とする。
? RequireInternalSlot (lf ,
[[InitializedListFormat]] ) を実行する。
options を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
表 25
の各行(ヘッダー行を除く)について、表の順序で次を行う:
p を現在の行の Property の値とする。
v を、現在の行の Internal Slot の値という名前を持つ lf の内部スロットの値とする。
Assert :
v は undefined ではない。
! CreateDataPropertyOrThrow (options ,
p , v ) を実行する。
options を返す。
表 25: ListFormat インスタンスの解決済みオプション
内部スロット
プロパティ
[[Locale]]
"locale"
[[Type]]
"type"
[[Style]]
"style"
14.3.3 Intl.ListFormat.prototype.format ( list )
format メソッドが引数 list で呼び出されたとき、次の手順を行う:
lf を this の値とする。
? RequireInternalSlot (lf ,
[[InitializedListFormat]] ) を実行する。
stringList を ? StringListFromIterable (list )
に設定する。
FormatList (lf ,
stringList ) を返す。
14.3.4 Intl.ListFormat.prototype.formatToParts ( list )
formatToParts メソッドが引数 list で呼び出されたとき、次の手順を行う:
lf を this の値とする。
? RequireInternalSlot (lf ,
[[InitializedListFormat]] ) を実行する。
stringList を ? StringListFromIterable (list )
に設定する。
FormatListToParts (lf ,
stringList ) を返す。
14.3.5 Intl.ListFormat.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は、String 値 "Intl.ListFormat" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
14.4 Intl.ListFormat インスタンスのプロパティ
Intl.ListFormat インスタンスは、%Intl.ListFormat.prototype%
からプロパティを継承する。
Intl.ListFormat インスタンスは [[InitializedListFormat]] 内部スロットを持つ。
Intl.ListFormat インスタンスはまた、Intl.ListFormat
コンストラクタ によって計算されるいくつかの内部スロットも持つ:
[[Locale]] は、リスト書式スタイルに用いられるローカライズのロケールのString
値(その言語タグ )である。
[[Type]] は、使用されるタイプのリストを識別する String 値
"conjunction" 、"disjunction" 、または "unit"
のいずれかである。
[[Style]] は、使用されるリスト書式スタイルを識別する String 値
"long" 、"short" 、または "narrow" のいずれかである。
[[Templates]] は ListFormat
テンプレートセット である。
14.5 ListFormat オブジェクトの抽象操作
14.5.1 DeconstructPattern ( pattern ,
placeables )
抽象操作 DeconstructPattern は引数 pattern (Pattern String )および
placeables (Record )を取り、List
を返す。
これは、パターン文字列をパーツのList
に分解する。
placeables は、そのキーがパターン文字列内で使用されるプレースホルダトークン、値が結果のList でトークン部分を表現するために用いるパーツのRecords (PartitionPattern によるもの)である。
例:
入力:
DeconstructPattern("AA{xx}BB{yy}CC", {
[[xx]]: {[[Type]]: "hour", [[Value]]: "15"},
[[yy]]: {[[Type]]: "minute", [[Value]]: "06"}
})
出力(パーツ Record の List):
«
{[[Type]]: "literal", [[Value]]: "AA"},
{[[Type]]: "hour", [[Value]]: "15"},
{[[Type]]: "literal", [[Value]]: "BB"},
{[[Type]]: "minute", [[Value]]: "06"},
{[[Type]]: "literal", [[Value]]: "CC"}
»
呼び出し時に次の手順を行う:
patternParts を PartitionPattern (pattern )
とする。
result を新しい空のList
とする。
patternParts の各 Record
{ [[Type]] , [[Value]] }
patternPart について、
part を patternPart .[[Type]] とする。
part が "literal" なら、
result に Record
{ [[Type]] : "literal" , [[Value]] : patternPart .[[Value]] } を追加する。
それ以外なら、
Assert :
placeables はフィールド [[<part >]] を持つ。
subst を
placeables .[[<part >]] とする。
subst が List
なら、
subst の各要素 s について、
result に s を追加する。
それ以外なら、
result に subst を追加する。
result を返す。
14.5.2 CreatePartsFromList ( listFormat , list
)
抽象操作 CreatePartsFromList は引数 listFormat (Intl.ListFormat)および
list (文字列のList )を取り、Records
のList (フィールド
[[Type]] ("element" または
"literal" )および [[Value]] (String)を持つ)を返す。有効なロケールおよび
listFormat の書式オプションに従って対応するパーツのList を生成する。呼び出し時に次の手順を行う:
size を list の要素数とする。
size が 0 なら、
新しい空のList を返す。
size が 2 なら、
n を、listFormat .[[Locale]] 、list [0]、list [1] に基づいて
listFormat .[[Templates]] を指すインデックスとする。
pattern を listFormat .[[Templates]] [n ].[[Pair]] とする。
first を Record
{ [[Type]] : "element" , [[Value]] : list [0] } とする。
second を Record
{ [[Type]] : "element" , [[Value]] : list [1] } とする。
placeables を Record
{ [[0]] : first , [[1]] : second } とする。
DeconstructPattern (pattern ,
placeables ) を返す。
last を Record
{ [[Type]] : "element" , [[Value]] : list [size - 1] } とする。
parts を « last » とする。
i を size - 2 とする。
i ≥ 0 の間、繰り返す:
head を Record
{ [[Type]] : "element" , [[Value]] : list [i ] } とする。
n を listFormat .[[Locale]] 、head 、および parts
に基づく実装定義 の
listFormat .[[Templates]] のインデックスとする。
i が 0 なら、
pattern を listFormat .[[Templates]] [n ].[[Start]] とする。
それ以外で i が size - 2 より小さいなら、
pattern を listFormat .[[Templates]] [n ].[[Middle]] とする。
それ以外なら、
pattern を listFormat .[[Templates]] [n ].[[End]] とする。
placeables を Record
{ [[0]] : head , [[1]] : parts } とする。
parts を DeconstructPattern (pattern ,
placeables ) に設定する。
i を 1 減らす。
parts を返す。
注
複数のテンプレートから選択するためのインデックス n により、例えばスペイン語のように、後続の語に応じて "y" と "e"
を使い分けるなど、接続詞を文脈依存にできる。
14.5.3 FormatList ( listFormat , list )
抽象操作 FormatList は引数 listFormat (Intl.ListFormat)および list (文字列のList )を取り、String
を返す。呼び出し時に次の手順を行う:
parts を CreatePartsFromList (listFormat ,
list ) とする。
result を空文字列とする。
parts の各 Record
{ [[Type]] , [[Value]] }
part について、
result を result と part .[[Value]] の連結 に設定する。
result を返す。
14.5.4 FormatListToParts ( listFormat , list )
抽象操作 FormatListToParts は引数 listFormat (Intl.ListFormat)および
list (文字列のList )を取り、Array
を返す。呼び出し時に次の手順を行う:
parts を CreatePartsFromList (listFormat ,
list ) とする。
result を ! ArrayCreate (0)
とする。
n を 0 とする。
parts の各 Record
{ [[Type]] , [[Value]] }
part について、
O を OrdinaryObjectCreate (%Object.prototype% )
とする。
! CreateDataPropertyOrThrow (O ,
"type" , part .[[Type]] )
を実行する。
! CreateDataPropertyOrThrow (O ,
"value" , part .[[Value]] )
を実行する。
! CreateDataPropertyOrThrow (result ,
! ToString (𝔽 (n )),
O ) を実行する。
n を 1 増やす。
result を返す。
14.5.5 StringListFromIterable ( iterable )
抽象操作 StringListFromIterable は引数 iterable (ECMAScript
言語値 )を取り、文字列のList をnormal
completion で含むか、throw
completion を返す。呼び出し時に次の手順を行う:
iterable が undefined なら、
新しい空のList を返す。
iteratorRecord を ? GetIterator (iterable ,
sync ) とする。
list を新しい空のList
とする。
繰り返す:
next を ? IteratorStepValue (iteratorRecord )
とする。
next が done なら、
list を返す。
next が String
でない なら、
error を ThrowCompletion (新たに作成された
TypeError オブジェクト) とする。
? IteratorClose (iteratorRecord ,
error ) を返す。
list に next を追加する。
注
このアルゴリズムは、String でない値に遭遇した場合に例外を送出する。任意の値に対する明らかなロケール対応の強制変換が存在しないためである。
15 Locale オブジェクト
15.1 Intl.Locale コンストラクタ
Intl.Locale のコンストラクタ :
15.1.1 Intl.Locale ( tag [ , options ] )
Intl.Locale 関数が引数 tag と省略可能な引数 options で呼び出されたとき、次の手順を行う:
NewTarget が undefined なら、TypeError 例外を投げる。
localeExtensionKeys を %Intl.Locale% .[[LocaleExtensionKeys]] とする。
internalSlotsList を « [[InitializedLocale]] ,
[[Locale]] , [[Calendar]] , [[Collation]] , [[HourCycle]] , [[NumberingSystem]] » とする。
localeExtensionKeys が "kf" を含むなら、
[[CaseFirst]] を internalSlotsList に追加する。
localeExtensionKeys が "kn" を含むなら、
[[Numeric]] を internalSlotsList に追加する。
locale を ? OrdinaryCreateFromConstructor (NewTarget,
"%Intl.Locale.prototype%" , internalSlotsList ) とする。
tag が String
でなく 、かつ tag が Object
でもない なら、TypeError 例外を投げる。
tag が Object
で、tag が [[InitializedLocale]] 内部スロットを持つなら、
tag を tag .[[Locale]] に設定する。
それ以外なら、
tag を ? ToString (tag )
に設定する。
options を ? CoerceOptionsToObject (options )
に設定する。
IsStructurallyValidLanguageTag (tag )
が false なら、RangeError 例外を投げる。
tag を CanonicalizeUnicodeLocaleId (tag )
に設定する。
tag を ? UpdateLanguageId (tag ,
options ) に設定する。
opt を新しいRecord
とする。
calendar を ? GetOption (options ,
"calendar" , string ,
empty , undefined ) とする。
calendar が undefined でないなら、
calendar が type Unicode locale
nonterminal にマッチしないなら、RangeError
例外を投げる。
opt .[[ca]] を calendar に設定する。
collation を ? GetOption (options ,
"collation" , string ,
empty , undefined ) とする。
collation が undefined でないなら、
collation が type Unicode locale
nonterminal にマッチしないなら、RangeError
例外を投げる。
opt .[[co]] を collation に設定する。
hc を ? GetOption (options ,
"hourCycle" , string , «
"h11" , "h12" , "h23" ,
"h24" », undefined ) とする。
opt .[[hc]] を hc に設定する。
kf を ? GetOption (options ,
"caseFirst" , string , «
"upper" , "lower" ,
"false" », undefined ) とする。
opt .[[kf]] を kf に設定する。
kn を ? GetOption (options ,
"numeric" , boolean ,
empty , undefined ) とする。
kn が undefined でないなら、kn を ! ToString (kn )
に設定する。
opt .[[kn]] を kn に設定する。
numberingSystem を ? GetOption (options ,
"numberingSystem" , string ,
empty , undefined ) とする。
numberingSystem が undefined でないなら、
numberingSystem が type Unicode
locale nonterminal
にマッチしないなら、RangeError 例外を投げる。
opt .[[nu]] を numberingSystem に設定する。
r を MakeLocaleRecord (tag ,
opt , localeExtensionKeys ) とする。
locale .[[Locale]] を r .[[locale]] に設定する。
locale .[[Calendar]] を r .[[ca]] に設定する。
locale .[[Collation]] を r .[[co]] に設定する。
locale .[[HourCycle]] を r .[[hc]] に設定する。
localeExtensionKeys が "kf" を含むなら、
locale .[[CaseFirst]] を
r .[[kf]] に設定する。
localeExtensionKeys が "kn" を含むなら、
SameValue (r .[[kn]] , "true" ) が
true である、または r .[[kn]]
が空文字列なら、
locale .[[Numeric]] を
true に設定する。
それ以外なら、
locale .[[Numeric]] を
false に設定する。
locale .[[NumberingSystem]] を r .[[nu]] に設定する。
locale を返す。
15.1.2 UpdateLanguageId ( tag , options )
抽象操作 UpdateLanguageId は引数 tag (Unicode 正規化済みロケール識別子 )および
options (Object)を取り、言語タグ をnormal
completion で含むか、throw
completion を返す。これは tag の unicode_language_id
のサブタグ を
options の対応するプロパティから更新し、構造的に妥当(ただし非正規化)な結果を返す。呼び出し時に次の手順を行う:
baseName を GetLocaleBaseName (tag )
とする。
language を ? GetOption (options ,
"language" , string ,
empty , GetLocaleLanguage (baseName ))
とする。
language が unicode_language_subtag Unicode locale
nonterminal にマッチしないなら、RangeError 例外を投げる。
script を ? GetOption (options ,
"script" , string ,
empty , GetLocaleScript (baseName ))
とする。
script が undefined でないなら、
script が unicode_script_subtag Unicode
locale nonterminal
にマッチしないなら、RangeError 例外を投げる。
region を ? GetOption (options ,
"region" , string ,
empty , GetLocaleRegion (baseName ))
とする。
region が undefined でないなら、
region が unicode_region_subtag Unicode
locale nonterminal
にマッチしないなら、RangeError 例外を投げる。
variants を ? GetOption (options ,
"variants" , string ,
empty , GetLocaleVariants (baseName ))
とする。
variants が undefined でないなら、
variants が空文字列なら、RangeError 例外を投げる。
lowerVariants を variants のASCII
小文字 とする。
variantSubtags を StringSplitToList (lowerVariants ,
"-" ) とする。
variantSubtags の各要素 variant について、
variant が unicode_variant_subtag Unicode locale
nonterminal
にマッチしないなら、RangeError 例外を投げる。
variantSubtags に重複要素が含まれるなら、RangeError 例外を投げる。
allExtensions を tag のうち baseName に続くサフィックスとする。
newTag を language とする。
script が undefined でないなら、newTag を
newTag 、"-" 、script の連結 に設定する。
region が undefined でないなら、newTag を
newTag 、"-" 、region の連結に設定する。
variants が undefined でないなら、newTag を
newTag 、"-" 、variants の連結に設定する。
newTag を newTag と allExtensions の連結に設定する。
newTag を返す。
15.1.3 MakeLocaleRecord ( tag , options ,
localeExtensionKeys )
抽象操作 MakeLocaleRecord は引数 tag (言語タグ )、options (Record )、localeExtensionKeys (String
のList )を取り、Record
を返す。これは、tag のUnicode
ロケール拡張シーケンス に含まれるデータを、options
の対応するフィールドで上書きして取り込み、さらにそれらのフィールドを tag に組み込んで得られるUnicode 正規化済みロケール識別子 を含む [[locale]] フィールドを追加した Record を構築して返す。呼び出し時に次の手順を行う:
tag に、Unicode
ロケール拡張シーケンス であるsubstring が含まれるなら、
extension を、tag
内の該当substring (Unicode
ロケール拡張シーケンス )から成る String 値とする。
components を UnicodeExtensionComponents (extension )
とする。
attributes を components .[[Attributes]] とする。
keywords を components .[[Keywords]] とする。
それ以外なら、
attributes を新しい空のList
とする。
keywords を新しい空のList
とする。
result を新しいRecord
とする。
localeExtensionKeys の各要素 key について、
keywords に [[Key]] が key
である要素が含まれるなら、
entry を、その [[Key]] が key
である keywords の要素とする。
value を entry .[[Value]]
とする。
それ以外なら、
entry を empty とする。
value を undefined とする。
Assert :
options は [[<key >]] フィールドを持つ。
overrideValue を options .[[<key >]] とする。
overrideValue が undefined でないなら、
value を CanonicalizeUValue (key ,
overrideValue ) に設定する。
entry が empty でないなら、
entry .[[Value]] を
value に設定する。
それ以外なら、
keywords に Record
{ [[Key]] : key , [[Value]] : value } を追加する。
result .[[<key >]] を value に設定する。
locale を、tag からUnicode
ロケール拡張シーケンス をすべて取り除いた String 値とする。
attributes が空でない、または keywords が空でないなら、
result .[[locale]] を InsertUnicodeExtensionAndCanonicalize (locale ,
attributes , keywords ) に設定する。
それ以外なら、
result .[[locale]] を CanonicalizeUnicodeLocaleId (locale )
に設定する。
result を返す。
15.2 Intl.Locale コンストラクタのプロパティ
Intl.Locale のコンストラクタ :
15.2.1 Intl.Locale.prototype
Intl.Locale.prototype の値は %Intl.Locale.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
15.2.2 内部スロット
[[LocaleExtensionKeys]] 内部スロットの値は、«
"ca" 、"co" 、"hc" 、"nu"
» のすべての要素を含み、さらに %Intl.Collator% .[[RelevantExtensionKeys]] の要素でもある «
"kf" 、"kn" » の任意の要素を追加で含み、それ以外の要素を含まないList である。
15.3 Intl.Locale プロトタイプオブジェクトのプロパティ
Intl.Locale プロトタイプオブジェクト :
%Intl.Locale.prototype% である。
通常のオブジェクト である。
Intl.Locale のインスタンスではなく、[[InitializedLocale]] 内部スロットや、Intl.Locale
インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
15.3.1 Intl.Locale.prototype.constructor
Intl.Locale.prototype.constructor の初期値は %Intl.Locale% である。
15.3.2 get Intl.Locale.prototype.baseName
Intl.Locale.prototype.baseName は、その setter アクセサ関数が undefined
であるアクセサプロパティ である。getter
アクセサ関数は次の手順を行う:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
GetLocaleBaseName (loc .[[Locale]] ) を返す。
15.3.3 get Intl.Locale.prototype.calendar
Intl.Locale.prototype.calendar は、その setter アクセサ関数が undefined
であるアクセサプロパティ である。getter
アクセサ関数は次の手順を行う:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
loc .[[Calendar]] を返す。
15.3.4 get Intl.Locale.prototype.caseFirst
このプロパティは、%Intl.Locale% .[[LocaleExtensionKeys]] が "kf" を含む場合にのみ存在する。
Intl.Locale.prototype.caseFirst は、その setter アクセサ関数が undefined
であるアクセサプロパティ である。getter
アクセサ関数は次の手順を行う:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
loc .[[CaseFirst]] を返す。
15.3.5 get Intl.Locale.prototype.collation
Intl.Locale.prototype.collation は、その setter アクセサ関数が undefined
であるアクセサプロパティ である。getter
アクセサ関数は次の手順を行う:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
loc .[[Collation]] を返す。
15.3.6 get Intl.Locale.prototype.hourCycle
Intl.Locale.prototype.hourCycle は、その setter アクセサ関数が undefined
であるアクセサプロパティ である。getter
アクセサ関数は次の手順を行う:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
loc .[[HourCycle]] を返す。
15.3.7 get Intl.Locale.prototype.language
Intl.Locale.prototype.language は、その setter アクセサ関数が undefined
であるアクセサプロパティ である。getter
アクセサ関数は次の手順を行う:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
GetLocaleLanguage (loc .[[Locale]] ) を返す。
15.3.8 Intl.Locale.prototype.maximize ( )
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
maximal を、Add
Likely Subtags アルゴリズムを loc .[[Locale]]
に適用した結果とする。エラーが通知された場合、maximal を loc .[[Locale]] に設定する。
! Construct (%Intl.Locale% ,
maximal ) を返す。
15.3.9 Intl.Locale.prototype.minimize ( )
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
minimal を、Remove
Likely Subtags アルゴリズムを loc .[[Locale]]
に適用した結果とする。エラーが通知された場合、minimal を loc .[[Locale]] に設定する。
! Construct (%Intl.Locale% ,
minimal ) を返す。
15.3.10 get Intl.Locale.prototype.numberingSystem
Intl.Locale.prototype.numberingSystem は アクセサプロパティ であり、その setter
アクセサ関数は undefined である。getter アクセサ関数は次の手順を実行する:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
loc .[[NumberingSystem]] を返す。
15.3.11 get Intl.Locale.prototype.numeric
このプロパティは %Intl.Locale% .[[LocaleExtensionKeys]] が "kn" を含む場合にのみ存在する。
Intl.Locale.prototype.numeric は アクセサプロパティ であり、その setter
アクセサ関数は undefined である。getter アクセサ関数は次の手順を実行する:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
loc .[[Numeric]] を返す。
15.3.12 get Intl.Locale.prototype.region
Intl.Locale.prototype.region は アクセサプロパティ であり、その setter
アクセサ関数は undefined である。getter アクセサ関数は次の手順を実行する:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
GetLocaleRegion (loc .[[Locale]] ) を返す。
15.3.13 get Intl.Locale.prototype.script
Intl.Locale.prototype.script は アクセサプロパティ であり、その setter
アクセサ関数は undefined である。getter アクセサ関数は次の手順を実行する:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
GetLocaleScript (loc .[[Locale]] ) を返す。
15.3.14 Intl.Locale.prototype.toString ( )
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
loc .[[Locale]] を返す。
15.3.15 get Intl.Locale.prototype.variants
Intl.Locale.prototype.variants は アクセサプロパティ であり、その setter
アクセサ関数は undefined である。getter アクセサ関数は次の手順を実行する:
loc を this の値とする。
? RequireInternalSlot (loc ,
[[InitializedLocale]] ) を実行する。
GetLocaleVariants (loc .[[Locale]] ) を返す。
15.3.16 Intl.Locale.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は String 値 "Intl.Locale" である。
このプロパティの属性は { [[Writable]] : false , [[Enumerable]] : false , [[Configurable]] : true } である。
15.4 Intl.Locale インスタンスのプロパティ
Intl.Locale インスタンスは 通常のオブジェクト であり、%Intl.Locale.prototype%
からプロパティを継承する。
Intl.Locale インスタンスは [[InitializedLocale]] 内部スロットを持つ。
Intl.Locale インスタンスはまた、Intl.Locale コンストラクタ
によって計算されるいくつかの内部スロットも持つ:
15.5 Locale オブジェクトの抽象操作
15.5.1 GetLocaleBaseName ( locale )
抽象操作 GetLocaleBaseName は引数 locale (String)を受け取り、String を返す。呼び出し時に次の手順を行う:
Assert : locale
は unicode_locale_id Unicode locale nonterminal にマッチできる。
locale のうち unicode_language_id Unicode locale
nonterminal にマッチする最長のプレフィックスを返す。
15.5.2 GetLocaleLanguage ( locale )
抽象操作 GetLocaleLanguage は引数 locale (String)を受け取り、String を返す。呼び出し時に次の手順を行う:
baseName を GetLocaleBaseName (locale )
に設定する。
Assert :
baseName の最初の subtag は
unicode_language_subtag Unicode locale nonterminal
にマッチできる。
baseName の最初の subtag を返す。
15.5.3 GetLocaleScript ( locale )
抽象操作 GetLocaleScript は引数 locale (String)を受け取り、String または undefined
を返す。呼び出し時に次の手順を行う:
baseName を GetLocaleBaseName (locale )
に設定する。
Assert :
baseName には unicode_script_subtag Unicode locale
nonterminal にマッチする subtag が高々1つだけ含まれている。
baseName に unicode_script_subtag Unicode locale
nonterminal にマッチする subtag が含まれていれば、その subtag
を返す。
undefined を返す。
15.5.4 GetLocaleRegion ( locale )
抽象操作 GetLocaleRegion は、引数 locale (String)を受け取り、String または undefined
を返す。呼び出し時に次の手順を行う:
baseName を GetLocaleBaseName (locale )
に設定する。
注:unicode_region_subtag subtag は、最初の
unicode_language_subtag subtag の直後、オプションで単一の
unicode_script_subtag subtag の後にのみ有効である。この位置では
unicode_region_subtag は他の有効な subtag
と混同されることはなく、すべての生成規則が排他的である。
Assert :baseName
の最初の subtag は
unicode_language_subtag Unicode locale nonterminal
にマッチできる。
baseNameTail を baseName の最初の subtag の後のサフィックスとする。
Assert :baseNameTail
には unicode_region_subtag Unicode locale nonterminal
にマッチする subtag が高々1つだけ含まれている。
baseNameTail に unicode_region_subtag Unicode locale
nonterminal にマッチする subtag が含まれていれば、その subtag
を返す。
undefined を返す。
15.5.5 GetLocaleVariants ( locale )
抽象操作 GetLocaleVariants は、引数 locale (String)を受け取り、String または
undefined を返す。呼び出し時に次の手順を行う:
baseName を GetLocaleBaseName (locale )
に設定する。
注:baseName 内で "-" の直後に現れる各 subtag
は、unicode_script_subtag、unicode_region_subtag、または
unicode_variant_subtag のいずれかであるが、unicode_variant_subtag にマッチする
substring は、他の生成規則にもマッチし得る任意のプレフィックスよりも必ず長い。
variants を、baseName のうち "-" で始まり、その直後に
unicode_variant_subtag Unicode locale nonterminal にマッチする
substring が現れる最長のサフィックスとする。そのようなサフィックスがなければ
undefined を返す。
variants の 1 文字目以降のsubstring を返す。
16 NumberFormat オブジェクト
16.1 Intl.NumberFormat コンストラクタ
Intl.NumberFormat の コンストラクタ :
%Intl.NumberFormat% である。
"NumberFormat" プロパティは Intl オブジェクト の初期値である。
Intl オブジェクト のすべての
サービスコンストラクタ プロパティに共通する動作は、9.1
に規定される。
16.1.1 Intl.NumberFormat ( [ locales [ ,
options ] ] )
Intl.NumberFormat 関数が省略可能な引数 locales および options
で呼び出された場合、次の手順を行う:
NewTarget が undefined の場合、newTarget を アクティブな関数オブジェクト
とし、それ以外の場合は NewTarget を newTarget とする。
numberFormat を ? OrdinaryCreateFromConstructor (newTarget ,
"%Intl.NumberFormat.prototype%" , « [[InitializedNumberFormat]] , [[Locale]] , [[LocaleData]] , [[NumberingSystem]] , [[Style]] , [[Unit]] , [[UnitDisplay]] , [[Currency]] , [[CurrencyDisplay]] , [[CurrencySign]] , [[MinimumIntegerDigits]] , [[MinimumFractionDigits]] , [[MaximumFractionDigits]] , [[MinimumSignificantDigits]] , [[MaximumSignificantDigits]] , [[RoundingType]] , [[Notation]] , [[CompactDisplay]] , [[UseGrouping]] ,
[[SignDisplay]] , [[RoundingIncrement]] , [[RoundingMode]] , [[ComputedRoundingPriority]] , [[TrailingZeroDisplay]] , [[BoundFormat]] ») とする。
optionsResolution を ? ResolveOptions (%Intl.NumberFormat% ,
%Intl.NumberFormat% .[[LocaleData]] , locales , options , «
coerce-options ») とする。
options を optionsResolution .[[Options]]
に設定する。
r を optionsResolution .[[ResolvedLocale]]
に設定する。
numberFormat .[[Locale]] を r .[[Locale]] に設定する。
numberFormat .[[LocaleData]] を r .[[LocaleData]] に設定する。
numberFormat .[[NumberingSystem]] を
r .[[nu]] に設定する。
? SetNumberFormatUnitOptions (numberFormat ,
options ) を実行する。
style を numberFormat .[[Style]] に設定する。
notation を ? GetOption (options ,
"notation" , string , «
"standard" , "scientific" ,
"engineering" , "compact" »,
"standard" ) に設定する。
numberFormat .[[Notation]] を
notation に設定する。
もし style が "currency" かつ notation が
"standard" なら、
currency を numberFormat .[[Currency]] に設定する。
cDigits を CurrencyDigits (currency )
に設定する。
mnfdDefault を cDigits に設定する。
mxfdDefault を cDigits に設定する。
それ以外の場合、
mnfdDefault を 0 に設定する。
もし style が "percent" なら、
mxfdDefault を 0 に設定する。
それ以外の場合、
mxfdDefault を 3 に設定する。
? SetNumberFormatDigitOptions (numberFormat ,
options , mnfdDefault , mxfdDefault ,
notation ) を実行する。
compactDisplay を ? GetOption (options ,
"compactDisplay" , string , «
"short" , "long" »,
"short" ) に設定する。
defaultUseGrouping を "auto" に設定する。
もし notation が "compact" なら、
numberFormat .[[CompactDisplay]] を
compactDisplay に設定する。
defaultUseGrouping を "min2" に設定する。
注:歴史的理由により、"true" や "false"
という文字列も受け入れられ、デフォルト値に置き換えられる。
useGrouping を ? GetBooleanOrStringNumberFormatOption (options ,
"useGrouping" , « "min2" ,
"auto" , "always" , "true" ,
"false" », defaultUseGrouping ) に設定する。
useGrouping が "true" または "false"
なら、useGrouping を defaultUseGrouping に設定する。
useGrouping が true なら、useGrouping を
"always" に設定する。
numberFormat .[[UseGrouping]] を
useGrouping に設定する。
signDisplay を ? GetOption (options ,
"signDisplay" , string , «
"auto" , "never" , "always" ,
"exceptZero" , "negative" »,
"auto" ) に設定する。
numberFormat .[[SignDisplay]] を
signDisplay に設定する。
実装が 4.3
注 1 の規範的オプション コンストラクタ モードをサポートする場合、
this を this の値とする。
? ChainNumberFormat (numberFormat ,
NewTarget, this ) を返す。
numberFormat を返す。
16.1.1.1 ChainNumberFormat ( numberFormat ,
newTarget , this )
抽象操作 ChainNumberFormat は引数
numberFormat (Intl.NumberFormat)、newTarget (ECMAScript
言語値 )、this (ECMAScript
言語値 )を受け取り、Object を含む 正常完了
または throw
completion を返す。呼び出し時に次の手順を行う:
newTarget が undefined かつ ? OrdinaryHasInstance (%Intl.NumberFormat% ,
this ) が true なら、
? DefinePropertyOrThrow (this ,
%Intl% .[[FallbackSymbol]] , PropertyDescriptor{ [[Value]] : numberFormat , [[Writable]] : false , [[Enumerable]] : false , [[Configurable]] : false }) を実行する。
this を返す。
numberFormat を返す。
16.1.2 SetNumberFormatDigitOptions ( intlObj ,
options , mnfdDefault , mxfdDefault , notation )
抽象操作 SetNumberFormatDigitOptions は引数
intlObj (Object)、options (Object)、mnfdDefault (integer )、mxfdDefault
(integer )、notation
(String)を受け取り、unused を含む 正常完了
または throw
completion を返す。これは intlObj
のロケール非依存の数値丸めに関わる内部スロットを設定する(16.5.3 を参照)。呼び出し時に次の手順を行う:
mnid を ? GetNumberOption (options ,
"minimumIntegerDigits," , 1, 21, 1) に設定する。
mnfd を ? Get (options ,
"minimumFractionDigits" ) に設定する。
mxfd を ? Get (options ,
"maximumFractionDigits" ) に設定する。
mnsd を ? Get (options ,
"minimumSignificantDigits" ) に設定する。
mxsd を ? Get (options ,
"maximumSignificantDigits" ) に設定する。
intlObj .[[MinimumIntegerDigits]] を
mnid に設定する。
roundingIncrement を ? GetNumberOption (options ,
"roundingIncrement" , 1, 5000, 1) に設定する。
roundingIncrement が « 1, 2, 5, 10, 20, 25, 50, 100, 200, 250, 500,
1000, 2000, 2500, 5000 » に含まれない場合、RangeError 例外を投げる。
roundingMode を ? GetOption (options ,
"roundingMode" , string , «
"ceil" , "floor" , "expand" ,
"trunc" , "halfCeil" ,
"halfFloor" , "halfExpand" ,
"halfTrunc" , "halfEven" »,
"halfExpand" ) に設定する。
roundingPriority を ? GetOption (options ,
"roundingPriority" , string , «
"auto" , "morePrecision" ,
"lessPrecision" », "auto" ) に設定する。
trailingZeroDisplay を ? GetOption (options ,
"trailingZeroDisplay" , string , «
"auto" , "stripIfInteger" »,
"auto" ) に設定する。
注:SetNumberFormatDigitOptions
で必要となるすべてのフィールドは options から取得済み。残りの手順は options の解釈および例外送出。
roundingIncrement が 1 でない場合、mxfdDefault を mnfdDefault
に設定する。
intlObj .[[RoundingIncrement]] を
roundingIncrement に設定する。
intlObj .[[RoundingMode]] を
roundingMode に設定する。
intlObj .[[TrailingZeroDisplay]] を
trailingZeroDisplay に設定する。
mnsd が undefined かつ mxsd が
undefined なら hasSd を false 、そうでなければ
hasSd を true に設定する。
mnfd が undefined かつ mxfd が
undefined なら hasFd を false 、そうでなければ
hasFd を true に設定する。
needSd を true に設定する。
needFd を true に設定する。
roundingPriority が "auto" の場合、
needSd を hasSd に設定する。
needSd が true または hasFd が
false かつ notation が "compact"
の場合、
needFd を false に設定する。
needSd が true の場合、
hasSd が true の場合、
intlObj .[[MinimumSignificantDigits]]
を ? DefaultNumberOption (mnsd ,
1, 21, 1) に設定する。
intlObj .[[MaximumSignificantDigits]]
を ? DefaultNumberOption (mxsd ,
intlObj .[[MinimumSignificantDigits]] , 21, 21) に設定する。
それ以外の場合、
intlObj .[[MinimumSignificantDigits]]
を 1 に設定する。
intlObj .[[MaximumSignificantDigits]]
を 21 に設定する。
needFd が true の場合、
hasFd が true の場合、
mnfd を ? DefaultNumberOption (mnfd ,
0, 100, undefined ) に設定する。
mxfd を ? DefaultNumberOption (mxfd ,
0, 100, undefined ) に設定する。
mnfd が undefined の場合、mnfd を
min (mnfdDefault ,
mxfd ) に設定する。
それ以外で mxfd が undefined の場合、mxfd
を max (mxfdDefault ,
mnfd ) に設定する。
それ以外で mnfd が mxfd
より大きい場合、RangeError 例外を投げる。
intlObj .[[MinimumFractionDigits]] を
mnfd に設定する。
intlObj .[[MaximumFractionDigits]] を
mxfd に設定する。
それ以外の場合、
intlObj .[[MinimumFractionDigits]] を
mnfdDefault に設定する。
intlObj .[[MaximumFractionDigits]] を
mxfdDefault に設定する。
needSd が false かつ needFd が
false の場合、
intlObj .[[MinimumFractionDigits]] を 0 に設定する。
intlObj .[[MaximumFractionDigits]] を 0 に設定する。
intlObj .[[MinimumSignificantDigits]] を 1
に設定する。
intlObj .[[MaximumSignificantDigits]] を 2
に設定する。
intlObj .[[RoundingType]] を
more-precision に設定する。
intlObj .[[ComputedRoundingPriority]] を
"morePrecision" に設定する。
それ以外で roundingPriority が "morePrecision" の場合、
intlObj .[[RoundingType]] を
more-precision に設定する。
intlObj .[[ComputedRoundingPriority]] を
"morePrecision" に設定する。
それ以外で roundingPriority が "lessPrecision" の場合、
intlObj .[[RoundingType]] を
less-precision に設定する。
intlObj .[[ComputedRoundingPriority]] を
"lessPrecision" に設定する。
それ以外で hasSd が true の場合、
intlObj .[[RoundingType]] を
significant-digits に設定する。
intlObj .[[ComputedRoundingPriority]] を
"auto" に設定する。
それ以外の場合、
intlObj .[[RoundingType]] を
fraction-digits に設定する。
intlObj .[[ComputedRoundingPriority]] を
"auto" に設定する。
roundingIncrement が 1 でない場合、
intlObj .[[RoundingType]] が
fraction-digits でない場合、TypeError
例外を投げる。
intlObj .[[MaximumFractionDigits]] が
intlObj .[[MinimumFractionDigits]]
と異なる場合、RangeError 例外を投げる。
unused を返す。
16.1.3 SetNumberFormatUnitOptions ( intlObj ,
options )
抽象操作 SetNumberFormatUnitOptions は、引数 intlObj (Intl.NumberFormat)および
options (Object)を受け取り、正常完了値を含む
unused または throw
completion を返す。ユーザー指定の単位に関するオプションを intlObj
に解決する。呼び出し時に以下の手順を実行する:
style を ? GetOption (options ,
"style" , string , «
"decimal" , "percent" ,
"currency" , "unit" »,
"decimal" ) に設定する。
intlObj .[[Style]] に style を設定する。
currency を ? GetOption (options ,
"currency" , string ,
empty , undefined ) に設定する。
currency が undefined であれば、
style が "currency" なら TypeError
例外を投げる。
それ以外の場合、
IsWellFormedCurrencyCode (currency )
が false なら RangeError 例外を投げる。
currencyDisplay を ? GetOption (options ,
"currencyDisplay" , string , «
"code" , "symbol" ,
"narrowSymbol" , "name" »,
"symbol" ) に設定する。
currencySign を ? GetOption (options ,
"currencySign" , string , «
"standard" , "accounting" »,
"standard" ) に設定する。
unit を ? GetOption (options ,
"unit" , string , empty ,
undefined ) に設定する。
unit が undefined であれば、
style が "unit" なら TypeError
例外を投げる。
それ以外の場合、
IsWellFormedUnitIdentifier (unit )
が false なら RangeError 例外を投げる。
unitDisplay を ? GetOption (options ,
"unitDisplay" , string , «
"short" , "narrow" , "long" »,
"short" ) に設定する。
style が "currency" であれば、
intlObj .[[Currency]] に ASCII 大文字 の
currency を設定する。
intlObj .[[CurrencyDisplay]] に
currencyDisplay を設定する。
intlObj .[[CurrencySign]] に
currencySign を設定する。
style が "unit" であれば、
intlObj .[[Unit]] に unit を設定する。
intlObj .[[UnitDisplay]] に
unitDisplay を設定する。
unused を返す。
16.2 Intl.NumberFormat コンストラクタのプロパティ
Intl.NumberFormat の コンストラクタ :
16.2.1 Intl.NumberFormat.prototype
Intl.NumberFormat.prototype の値は %Intl.NumberFormat.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
16.2.2 Intl.NumberFormat.supportedLocalesOf ( locales [ ,
options ] )
supportedLocalesOf メソッドが引数 locales および options
で呼び出された場合、次の手順を行う:
availableLocales を %Intl.NumberFormat% .[[AvailableLocales]] とする。
requestedLocales を ? CanonicalizeLocaleList (locales )
とする。
? FilterLocales (availableLocales ,
requestedLocales , options ) を返す。
16.2.3 内部スロット
[[AvailableLocales]] 内部スロットの値は、9.1 で記述された制約の範囲内で実装依存 である。
[[RelevantExtensionKeys]] 内部スロットの値は «
"nu" » である。
[[ResolutionOptionDescriptors]] 内部スロットの値は « {
[[Key]] : "nu" , [[Property]] : "numberingSystem" } » である。
注1
Unicode Technical
Standard #35 Part 1 Core, Section 3.6.1 Key and Type Definitions では、数値書式に関連する 3
つのロケール拡張キー
"cu" (通貨),
"cf" (通貨書式スタイル),
"nu" (数字体系)が説明されている。しかし Intl.NumberFormat では、通貨フォーマットの通貨は options オブジェクトの
currency プロパティで指定し、通貨フォーマットのスタイルは options オブジェクトの currencySign プロパティで指定する必要がある。
[[LocaleData]] 内部スロットの値は、9.1
で記述された制約および下記の追加制約の範囲内で実装依存 である:
[[LocaleData]] の任意のロケールフィールドの "nu" フィールド値の
List
には "native" 、"traditio" 、"finance"
を含めてはならない。
[[LocaleData]] .[[<locale >]] は、すべてのロケール値
locale に対して [[patterns]] フィールドを持つ必要があり、その値は Record
であり、4つの数値書式スタイル
"decimal" 、"percent" 、"currency" 、"unit"
の名前のフィールドを持たなければならない。
上記 "currency" および "unit" フィールドは Records
であり、最低でも "fallback" フィールドを持たなければならない。
"currency" はさらに 6.3 に従う通貨コードに対応する追加フィールドを持つことができる。
"currency" の各フィールドは Record
であり、currencyDisplay の値
"code" 、"symbol" 、"narrowSymbol" 、"name"
に対応するフィールドを持つ。
それぞれのフィールドは Record
であり、currencySign の値 "standard" または "accounting"
に対応するフィールドを持つ。
"unit" フィールド([[LocaleData]] .[[<locale >]]) は、必須の
"fallback" フィールド以外にも 6.6
に対応するコア測定単位識別子の追加フィールドを持つことができる。
"unit" の各フィールドは Record
であり、unitDisplay の値
"narrow" 、"short" 、"long"
に対応するフィールドを持つ。
これまで説明した patterns
ツリーのリーフフィールド("decimal" 、"percent" 、"currency"
の曾孫、"unit" の孫)は、キー
"positivePattern" 、"zeroPattern" 、"negativePattern"
を持つ Records
でなければならない。
上記のフィールド(符号依存パターンフィールド)の値は文字列であり、必ず substring
"{number}" を含まなければならない。
"positivePattern" は substring
"{plusSign}" を含み、"{minusSign}" は含まないこと。
"negativePattern" は substring
"{minusSign}" を含み、"{plusSign}" は含まないこと。
"zeroPattern" は "{plusSign}" および
"{minusSign}" のいずれも含まないこと。
さらに "percent" フィールドの値は substring
"{percentSign}" を含まなければならない。
"currency" フィールドの値は substring
"{currencyCode}" 、"{currencyPrefix}" 、"{currencySuffix}"
のいずれか1つ以上を含まなければならない。
"unit" フィールドの値は substring
"{unitPrefix}" または "{unitSuffix}"
のいずれか1つ以上を含まなければならない。
パターン文字列は ECMA-262 、6.1.4
に記載されている UTF-16 エンコードされたコードポイントの並びとして解釈した場合、Unicode Standard に規定される General Category
"Number, decimal digit" のコードポイントを含んではならない。
[[LocaleData]] .[[<locale >]] は、すべてのロケール値
locale に対して [[notationSubPatterns]]
フィールドも持つ必要がある。このフィールドの値は Record
であり、2つのフィールド [[scientific]] および [[compact]] を持つ。[[scientific]] フィールドは
"{number}" 、"{scientificSeparator}" 、"{scientificExponent}"
の部分文字列を含む文字列値でなければならない。[[compact]] フィールドは Record
であり、2つのフィールド "short" および "long"
を持つ。これらのフィールドは、実装がサポートするコンパクト表記の全ての離散的な桁数に対応する integer キーを持つ Record
でなければならない。これらのフィールドは、substring
"{number}" を含む文字列値でよい。"short" 配下の文字列は substring
"{compactSymbol}" を含み、"long" 配下の文字列は substring
"{compactName}" を含まなければならない。
注2
実装においては、Common Locale Data Repository(
https://cldr.unicode.org/ )で提供されるロケールデータの利用が推奨される。
16.3 Intl.NumberFormat プロトタイプオブジェクトのプロパティ
Intl.NumberFormat プロトタイプオブジェクト :
%Intl.NumberFormat.prototype% である。
通常のオブジェクト である。
Intl.NumberFormat のインスタンスではなく、[[InitializedNumberFormat]] 内部スロットや
Intl.NumberFormat インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
16.3.1 Intl.NumberFormat.prototype.constructor
Intl.NumberFormat.prototype.constructor の初期値は %Intl.NumberFormat% である。
16.3.2 Intl.NumberFormat.prototype.resolvedOptions ( )
この関数は、オブジェクトの初期化時に計算されたロケールとオプションへのアクセスを提供する。
nf を this の値とする。
実装が規範的オプション コンストラクタ モード(4.3
注1 )をサポートする場合、
nf を ? UnwrapNumberFormat (nf )
に設定する。
? RequireInternalSlot (nf ,
[[InitializedNumberFormat]] ) を実行する。
options を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
表26
の各行(ヘッダー行を除く)について、表の順序で次を行う:
p を現在の行の Property の値とする。
v を、現在の行の Internal Slot の値という名前を持つ nf の内部スロットの値とする。
v が undefined でない場合、
現在の行に Conversion 値がある場合、
Assert :Conversion
の値は number である。
v を 𝔽 (v )
に設定する。
! CreateDataPropertyOrThrow (options ,
p , v ) を実行する。
options を返す。
表26: NumberFormat インスタンスの解決済みオプション
内部スロット
プロパティ
変換
[[Locale]]
"locale"
[[NumberingSystem]]
"numberingSystem"
[[Style]]
"style"
[[Currency]]
"currency"
[[CurrencyDisplay]]
"currencyDisplay"
[[CurrencySign]]
"currencySign"
[[Unit]]
"unit"
[[UnitDisplay]]
"unitDisplay"
[[MinimumIntegerDigits]]
"minimumIntegerDigits"
number
[[MinimumFractionDigits]]
"minimumFractionDigits"
number
[[MaximumFractionDigits]]
"maximumFractionDigits"
number
[[MinimumSignificantDigits]]
"minimumSignificantDigits"
number
[[MaximumSignificantDigits]]
"maximumSignificantDigits"
number
[[UseGrouping]]
"useGrouping"
[[Notation]]
"notation"
[[CompactDisplay]]
"compactDisplay"
[[SignDisplay]]
"signDisplay"
[[RoundingIncrement]]
"roundingIncrement"
number
[[RoundingMode]]
"roundingMode"
[[ComputedRoundingPriority]]
"roundingPriority"
[[TrailingZeroDisplay]]
"trailingZeroDisplay"
16.3.3 get Intl.NumberFormat.prototype.format
Intl.NumberFormat.prototype.format は アクセサプロパティ であり、その setter
アクセサ関数は undefined である。getter アクセサ関数は次の手順を実行する:
nf を this の値とする。
実装が規範的オプション コンストラクタ モード(4.3
注1 )をサポートする場合、
nf を ? UnwrapNumberFormat (nf )
に設定する。
? RequireInternalSlot (nf ,
[[InitializedNumberFormat]] ) を実行する。
nf .[[BoundFormat]] が undefined
の場合、
F を Number Format Functions(16.5.2 )で定義される新しい組み込み
関数オブジェクト
とする。
F .[[NumberFormat]] に nf を設定する。
nf .[[BoundFormat]] に F を設定する。
nf .[[BoundFormat]] を返す。
注
返される関数は nf にバインドされているため、Array.prototype.map や他の関数に直接渡すことができる。
これは、現在は新機能では踏襲されない慣習の歴史的遺物と見なされるが、既存のプログラムとの互換性維持のため保存されている。
16.3.4 Intl.NumberFormat.prototype.formatRange ( start ,
end )
formatRange メソッドが引数 start および end で呼び出された場合、次の手順を行う:
nf を this の値とする。
? RequireInternalSlot (nf ,
[[InitializedNumberFormat]] ) を実行する。
start が undefined または end が
undefined なら、TypeError 例外を投げる。
x を ? ToIntlMathematicalValue (start )
に設定する。
y を ? ToIntlMathematicalValue (end )
に設定する。
? FormatNumericRange (nf ,
x , y ) を返す。
16.3.5 Intl.NumberFormat.prototype.formatRangeToParts (
start , end )
formatRangeToParts メソッドが引数 start および end で呼び出された場合、次の手順を行う:
nf を this の値とする。
? RequireInternalSlot (nf ,
[[InitializedNumberFormat]] ) を実行する。
start が undefined または end が
undefined なら、TypeError 例外を投げる。
x を ? ToIntlMathematicalValue (start )
に設定する。
y を ? ToIntlMathematicalValue (end )
に設定する。
? FormatNumericRangeToParts (nf ,
x , y ) を返す。
16.3.6 Intl.NumberFormat.prototype.formatToParts ( value
)
formatToParts メソッドが省略可能な引数 value で呼び出された場合、次の手順を行う:
nf を this の値とする。
? RequireInternalSlot (nf ,
[[InitializedNumberFormat]] ) を実行する。
x を ? ToIntlMathematicalValue (value )
に設定する。
FormatNumericToParts (nf ,
x ) を返す。
16.3.7 Intl.NumberFormat.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は文字列値 "Intl.NumberFormat" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
16.4 Intl.NumberFormat インスタンスのプロパティ
Intl.NumberFormat インスタンスは 通常のオブジェクト であり、%Intl.NumberFormat.prototype%
からプロパティを継承する。
Intl.NumberFormat インスタンスは [[InitializedNumberFormat]] 内部スロットを持つ。
Intl.NumberFormat インスタンスはまた、Intl.NumberFormat
コンストラクタ によって計算されるいくつかの内部スロットも持つ:
[[Locale]] は、書式化に用いられるロケールのString 値(その言語タグ )である。
[[LocaleData]] は、書式化のために実装が利用可能なデータを表す Record
である。これは %Intl.NumberFormat% .[[LocaleData]] の [[Locale]]
の値またはそのプレフィックスに対応するエントリの値である。
[[NumberingSystem]] は、書式化に使用される Unicode 数字体系識別子
を表す String
値である。
[[Style]]
は、"decimal" 、"currency" 、"percent" 、"unit"
のいずれかの String 値であり、測定される量の種類を識別する。
[[Currency]] は、通貨を識別する通貨コードの String 値であり、"currency"
ユニットタイプで書式化する場合にのみ使用される。これは [[Style]] の値が "currency"
の場合のみ使われる。
[[CurrencyDisplay]]
は、"code" 、"symbol" 、"narrowSymbol" 、"name"
のいずれかの String 値であり、"currency" スタイルで書式化する場合、通貨を ISO 4217
アルファベットコード・ローカライズされた記号・ローカライズされた通貨名のいずれとして表示するかを指定する。これは [[Style]] の値が
"currency" の場合のみ使われる。
[[CurrencySign]] は、"standard" または
"accounting" のいずれかの String 値であり、負の数値を会計書式(しばしば括弧で示される)で表示するかどうかを指定する。これは [[Style]] の値が "currency" かつ [[SignDisplay]] が "never" でない場合のみ使われる。
[[Unit]] は コア単位識別子 であり、[[Style]] の値が "unit" の場合のみ使われる。
[[UnitDisplay]]
は、"short" 、"narrow" 、"long" のいずれかの String
値であり、"unit" スタイルで書式化する場合、単位を記号・狭い記号・ローカライズされた長い名前のいずれとして表示するかを指定する。これは [[Style]] の値が "unit" の場合のみ使われる。
[[MinimumIntegerDigits]] は、使用する最小の 整数 桁数を示す非負の整数である。必要に応じて先頭にゼロを付加する。
[[MinimumFractionDigits]] および [[MaximumFractionDigits]] は、使用する最小および最大の 小数 桁数を示す非負の整数である。必要に応じて丸められたり、末尾にゼロが付加される。これらのプロパティは
[[RoundingType]] が
fraction-digits 、more-precision 、less-precision
の場合のみ使われる。
[[MinimumSignificantDigits]] および [[MaximumSignificantDigits]] は、表示する最小および最大の 有効桁 数を示す正の整数である。指定された有効桁数を表示するために必要なだけ小数桁が使われる。これらのプロパティは
[[RoundingType]] が
significant-digits 、more-precision 、less-precision
の場合のみ使われる。
[[UseGrouping]] は、区切り文字を使う条件を示す Boolean
または String 値である。区切り文字の位置や表示は 実装依存 である。"always"
は可能な限り区切り文字を表示することを示唆し、"min2" はグループ内に2桁以上ある場合のみ、"auto"
はロケールがそれを推奨する場合のみ表示する。false なら区切り文字は使われない。
[[RoundingType]] は
fraction-digits 、significant-digits 、more-precision 、less-precision
のいずれかであり、どの丸め方式を使うかを示す。fraction-digits の場合は [[MinimumFractionDigits]] ・[[MaximumFractionDigits]] 、significant-digits の場合は
[[MinimumSignificantDigits]] ・[[MaximumSignificantDigits]]
で丸める。more-precision ・less-precision
の場合は4つすべての設定が使われ、どちらを使うかは特定の規則で決定される。[[RoundingType]] は
"roundingPriority" オプションから導出される。
[[ComputedRoundingPriority]] は
"auto" 、"morePrecision" 、"lessPrecision"
のいずれかの String 値であり、16.3.2 で [[RoundingType]] を有効な "roundingPriority"
オプションに変換するのに使われる。
[[Notation]] は
"standard" 、"scientific" 、"engineering" 、"compact"
のいずれかの String 値であり、スケーリングせずに表示するか、科学表記・工学表記・コンパクト表記で表示するかを指定する。コンパクト表記では ILD
のコンパクト十進法の桁数にスケーリングし、その接辞が付加される。
[[CompactDisplay]] は "short" または
"long" のいずれかの String 値であり、コンパクト表記で短い("5K")か長い("5千")接辞を使うかを指定する。これは [[Notation]] の値が "compact" の場合のみ使われる。
[[SignDisplay]] は
"auto" 、"always" 、"never" 、"exceptZero" 、"negative"
のいずれかの String
値であり、符号をいつ表示するかを指定する("auto"以外はそれぞれ常に、決して、ゼロ以外のみ、ゼロ以外の負数のみ)。科学表記の場合、このスロットは仮数の符号表示には影響するが指数には影響しない。
[[RoundingIncrement]] は 10、100、1000、10000
を10分割・5分割・4分割・2分割する整数であり、丸めの単位を決定する。例えば [[MaximumFractionDigits]] が2で
[[RoundingIncrement]] が5なら、最も近い0.05(ニッケル丸め)に丸める。
[[RoundingMode]] は 丸めモード であり、表27 のIdentifier列のいずれかの String 値である。
[[TrailingZeroDisplay]] は "auto" または
"stripIfInteger" のいずれかの String 値であり、書式化した値が整数 (小数桁がすべて0)なら末尾のゼロを除去するかどうかを示す。
表27: Intl.NumberFormatの丸めモード
Identifier
説明
例: 小数点以下0桁へ丸め
-1.5
0.4
0.5
0.6
1.5
"ceil"
正の無限大方向へ
⬆️ [-1]
⬆️ [1]
⬆️ [1]
⬆️ [1]
⬆️ [2]
"floor"
負の無限大方向へ
⬇️ [-2]
⬇️ [0]
⬇️ [0]
⬇️ [0]
⬇️ [1]
"expand"
ゼロから遠ざかる方向へ
⬇️ [-2]
⬆️ [1]
⬆️ [1]
⬆️ [1]
⬆️ [2]
"trunc"
ゼロ方向へ
⬆️ [-1]
⬇️ [0]
⬇️ [0]
⬇️ [0]
⬇️ [1]
"halfCeil"
同点は正の無限大方向へ
⬆️ [-1]
⬇️ [0]
⬆️ [1]
⬆️ [1]
⬆️ [2]
"halfFloor"
同点は負の無限大方向へ
⬇️ [-2]
⬇️ [0]
⬇️ [0]
⬆️ [1]
⬇️ [1]
"halfExpand"
同点はゼロから遠ざかる方向へ
⬇️ [-2]
⬇️ [0]
⬆️ [1]
⬆️ [1]
⬆️ [2]
"halfTrunc"
同点はゼロ方向へ
⬆️ [-1]
⬇️ [0]
⬇️ [0]
⬆️ [1]
⬇️ [1]
"halfEven"
同点は丸め増分の偶数倍へ
⬇️ [-2]
⬇️ [0]
⬇️ [0]
⬆️ [1]
⬆️ [2]
注
例は各オプションの特徴的な挙動を示すものです。⬆️は「正の無限大方向」、⬇️は「負の無限大方向」を意味します。
最後に、Intl.NumberFormat インスタンスは [[BoundFormat]] 内部スロットを持ち、これは format
アクセサ(16.3.3 )で返される関数をキャッシュする。
16.5 NumberFormat オブジェクトの抽象操作
16.5.1 CurrencyDigits ( currency )
実装定義
抽象操作 CurrencyDigits は引数 currency (String)を受け取り、非負の 整数 を返す。呼び出し時に次の手順を行う:
Assert : IsWellFormedCurrencyCode (currency )
は true である。
currency に対応する通貨の数量をフォーマットする際に用いる小数桁数を表す非負の 整数 を返す。桁数に関する情報が存在しない場合は
2 を返す。
16.5.2 数値書式関数
数値書式関数は [[NumberFormat]] 内部スロットを持つ匿名の組み込み関数である。
数値書式関数 F が省略可能な引数 value で呼び出された場合、次の手順を行う:
nf を F .[[NumberFormat]] に設定する。
Assert : nf は
オブジェクト かつ
nf は [[InitializedNumberFormat]] 内部スロットを持つ。
value が与えられていなければ、value を undefined に設定する。
x を ? ToIntlMathematicalValue (value )
に設定する。
FormatNumeric (nf ,
x ) を返す。
数値書式関数の "length" プロパティは 1 𝔽 である。
16.5.3 FormatNumericToString ( intlObject , x )
抽象操作 FormatNumericToString は、引数 intlObject (Object)、x (数学値 または
negative-zero )を受け取り、フィールド [[RoundedNumber]] (数学値 または
negative-zero )、[[FormattedString]] (String)を持つ
Record
を返す。これは intlObject の内部スロットに従って x を Intl
数学値 に丸める。[[RoundedNumber]] フィールドには丸めた結果、[[FormattedString]] フィールドには intlObject の内部スロットに従いフォーマットされた
String 表現が入る。呼び出し時に次の手順を行う:
Assert :
intlObject は [[RoundingMode]] 、[[RoundingType]] 、[[MinimumSignificantDigits]] 、[[MaximumSignificantDigits]] 、[[MinimumIntegerDigits]] 、[[MinimumFractionDigits]] 、[[MaximumFractionDigits]] 、[[RoundingIncrement]] 、[[TrailingZeroDisplay]] 内部スロットを持つ。
x が negative-zero なら、
sign を negative に設定する。
x を 0 に設定する。
それ以外の場合、
Assert :
x は 数学値
である。
x < 0 なら sign を negative に、それ以外は
sign を positive に設定する。
sign が negative なら x を
-x に設定する。
unsignedRoundingMode を GetUnsignedRoundingMode (intlObject .[[RoundingMode]] , sign ) に設定する。
intlObject .[[RoundingType]] が
significant-digits なら、
result を ToRawPrecision (x ,
intlObject .[[MinimumSignificantDigits]] ,
intlObject .[[MaximumSignificantDigits]] ,
unsignedRoundingMode ) に設定する。
それ以外で intlObject .[[RoundingType]] が
fraction-digits なら、
result を ToRawFixed (x ,
intlObject .[[MinimumFractionDigits]] ,
intlObject .[[MaximumFractionDigits]] ,
intlObject .[[RoundingIncrement]] ,
unsignedRoundingMode ) に設定する。
それ以外の場合、
sResult を ToRawPrecision (x ,
intlObject .[[MinimumSignificantDigits]] ,
intlObject .[[MaximumSignificantDigits]] ,
unsignedRoundingMode ) に設定する。
fResult を ToRawFixed (x ,
intlObject .[[MinimumFractionDigits]] ,
intlObject .[[MaximumFractionDigits]] ,
intlObject .[[RoundingIncrement]] ,
unsignedRoundingMode ) に設定する。
fResult .[[RoundingMagnitude]] <
sResult .[[RoundingMagnitude]] なら
fixedIsMorePrecise を true に、それ以外は
fixedIsMorePrecise を false に設定する。
intlObject .[[RoundingType]] が
more-precision かつ fixedIsMorePrecise が
true なら result を fResult に設定する。
それ以外で intlObject .[[RoundingType]] が
less-precision かつ fixedIsMorePrecise が
false なら result を fResult に設定する。
それ以外は result を sResult に設定する。
x を result .[[RoundedNumber]] に設定する。
string を result .[[FormattedString]]
に設定する。
intlObject .[[TrailingZeroDisplay]] が
"stripIfInteger" かつ x modulo 1 =
0 なら、
i を StringIndexOf (string ,
"." , 0) に設定する。
i が not-found でなければ string を
string の 0 から i までの substring
に設定する。
int を result .[[IntegerDigitsCount]]
に設定する。
minInteger を intlObject .[[MinimumIntegerDigits]] に設定する。
int < minInteger なら、
forwardZeros を minInteger - int 回 0x0030(DIGIT
ZERO)のコードユニットからなる String に設定する。
string を forwardZeros と string の 文字列連結
に設定する。
sign が negative なら、
x が 0 なら x を negative-zero に、それ以外は
x を -x に設定する。
Record
{ [[RoundedNumber]] : x , [[FormattedString]] : string } を返す。
16.5.4 PartitionNumberPattern ( numberFormat ,
x )
抽象操作 PartitionNumberPattern は引数 numberFormat (NumberFormat
として初期化されたオブジェクト)、x (Intl 数学値 )を受け取り、フィールド [[Type]] (String)、[[Value]] (String)を持つ Record
の List
を返す。これは x の 数学値 を
numberFormat の有効ロケールおよび書式オプションに従って表現するパーツを作成する。呼び出し時に次の手順を行う:
exponent を 0 に設定する。
x が not-a-number なら、
n を ILD
で表される NaN 値を示す String 値に設定する。
それ以外で x が positive-infinity なら、
n を ILD
で表される正の無限大を示す String 値に設定する。
それ以外で x が negative-infinity なら、
n を ILD
で表される負の無限大を示す String 値に設定する。
それ以外の場合、
x が negative-zero でない場合、
Assert :
x は 数学値
である。
numberFormat .[[Style]] が
"percent" なら、x を 100 × x に設定する。
exponent を ComputeExponent (numberFormat ,
x ) に設定する。
x を x × 10-exponent に設定する。
formatNumberResult を FormatNumericToString (numberFormat ,
x ) に設定する。
n を formatNumberResult .[[FormattedString]] に設定する。
x を formatNumberResult .[[RoundedNumber]] に設定する。
pattern を GetNumberFormatPattern (numberFormat ,
x ) に設定する。
result を新しい空の List
に設定する。
patternParts を PartitionPattern (pattern )
に設定する。
patternParts の各 Record
{ [[Type]] , [[Value]] }
patternPart について、
p を patternPart .[[Type]] に設定する。
p が "literal" なら、
Record
{ [[Type]] : "literal" , [[Value]] : patternPart .[[Value]] } を result に追加する。
それ以外で p が "number" なら、
notationSubParts を PartitionNotationSubPattern (numberFormat ,
x , n , exponent ) に設定する。
result を result と notationSubParts の
リスト連結 に設定する。
それ以外で p が "plusSign" なら、
plusSignSymbol を ILND
で表されるプラス記号の String に設定する。
Record
{ [[Type]] : "plusSign" , [[Value]] : plusSignSymbol } を
result に追加する。
それ以外で p が "minusSign" なら、
minusSignSymbol を ILND
で表されるマイナス記号の String に設定する。
Record
{ [[Type]] : "minusSign" ,
[[Value]] : minusSignSymbol } を
result に追加する。
それ以外で p が "percentSign" かつ
numberFormat .[[Style]] が
"percent" なら、
percentSignSymbol を ILND
で表されるパーセント記号の String に設定する。
Record
{ [[Type]] : "percentSign" ,
[[Value]] : percentSignSymbol } を
result に追加する。
それ以外で p が "unitPrefix" かつ
numberFormat .[[Style]] が
"unit" なら、
unit を numberFormat .[[Unit]] に設定する。
unitDisplay を numberFormat .[[UnitDisplay]] に設定する。
mu を ILD で
x の前に unitDisplay 形式で表す unit の
String(複数形に依存する言語では x に依存してもよい)に設定する。
Record
{ [[Type]] : "unit" , [[Value]] : mu } を result
に追加する。
それ以外で p が "unitSuffix" かつ
numberFormat .[[Style]] が
"unit" なら、
unit を numberFormat .[[Unit]] に設定する。
unitDisplay を numberFormat .[[UnitDisplay]] に設定する。
mu を ILD で
x の後に unitDisplay 形式で表す unit の
String(複数形に依存する言語では x に依存してもよい)に設定する。
Record
{ [[Type]] : "unit" , [[Value]] : mu } を result
に追加する。
それ以外で p が "currencyCode" かつ
numberFormat .[[Style]] が
"currency" なら、
currency を numberFormat .[[Currency]] に設定する。
cd を currency に設定する。
Record
{ [[Type]] : "currency" , [[Value]] : cd } を result
に追加する。
それ以外で p が "currencyPrefix" かつ
numberFormat .[[Style]] が
"currency" なら、
currency を numberFormat .[[Currency]] に設定する。
currencyDisplay を numberFormat .[[CurrencyDisplay]] に設定する。
cd を ILD で
x の前に currencyDisplay 形式で表す currency の
String(複数形に依存する言語では x に依存してもよい)に設定する。
Record
{ [[Type]] : "currency" , [[Value]] : cd } を result
に追加する。
それ以外で p が "currencySuffix" かつ
numberFormat .[[Style]] が
"currency" なら、
currency を numberFormat .[[Currency]] に設定する。
currencyDisplay を numberFormat .[[CurrencyDisplay]] に設定する。
cd を ILD で
x の後に currencyDisplay 形式で表す currency の
String(複数形に依存する言語では x に依存してもよい。実装にその表現がなければ
currency 自体を使う)に設定する。
Record
{ [[Type]] : "currency" , [[Value]] : cd } を result
に追加する。
それ以外の場合、
unknown を ILND で
x および p に基づく String に設定する。
Record
{ [[Type]] : "unknown" , [[Value]] : unknown } を
result に追加する。
result を返す。
16.5.5 PartitionNotationSubPattern ( numberFormat ,
x , n , exponent )
抽象操作 PartitionNotationSubPattern は、引数
numberFormat (Intl.NumberFormat)、x (Intl
数学値 )、n (String)、exponent (整数 )を受け取り、フィールド
[[Type]] (String)および [[Value]] (String)を持つ
Record
の List
を返す。
x は丸め後の Intl 数学値 であり、n は中間の書式化文字列である。
この操作は、numberFormat の有効ロケールと書式オプションに従って、数値と表記の対応パーツを作成する。
呼び出し時に次の手順を行う:
result を新しい空の List
に設定する。
x が not-a-number なら、
Record
{ [[Type]] : "nan" , [[Value]] : n } を result に追加する。
それ以外で x が positive-infinity または
negative-infinity なら、
Record
{ [[Type]] : "infinity" , [[Value]] : n } を result に追加する。
それ以外の場合、
notationSubPattern を GetNotationSubPattern (numberFormat ,
exponent ) に設定する。
patternParts を PartitionPattern (notationSubPattern )
に設定する。
patternParts の各 Record
{ [[Type]] , [[Value]] }
patternPart について、
p を patternPart .[[Type]]
に設定する。
p が "literal" なら、
Record
{ [[Type]] :
"literal" , [[Value]] : patternPart .[[Value]] } を result に追加する。
それ以外で p が "number" なら、
numberFormat .[[NumberingSystem]] が下記 表28
の Numbering System 列のいずれかに一致する場合、
digits を対応する行の Digits 列で指定されたコードポイントの
List
に設定する。
Assert :
digits の長さは 10 である。
transliterated を空文字列に設定する。
len を n の長さに設定する。
position を 0 に設定する。
position < len の間繰り返す:
c を n の index
position のコードユニットとする。
0x0030 ≤ c ≤ 0x0039 なら、
注:c はASCII数字。
i を c - 0x0030
に設定する。
c を CodePointsToString («
digits [i ] »)
に設定する。
transliterated を
transliterated と c の
文字列連結 に設定する。
position を position + 1
にする。
n を transliterated に設定する。
それ以外の場合、
実装依存アルゴリズムで n を指定された数字体系の適切な表現に変換する。
decimalSepIndex を StringIndexOf (n ,
"." , 0) に設定する。
decimalSepIndex が not-found
でなく かつ decimalSepIndex > 0 なら、
integer を n の 0 から
decimalSepIndex までの substring
に設定する。
fraction を n の
decimalSepIndex + 1 からの substring
に設定する。
それ以外の場合、
integer を n に設定する。
fraction を undefined
に設定する。
numberFormat .[[UseGrouping]]
が false なら、
Record
{ [[Type]] :
"integer" , [[Value]] : integer }
を result に追加する。
それ以外の場合、
groupSepSymbol を ILND
で表される区切り記号の String に設定する。
groups を ILND
の integer
内の区切り位置に従った(numberFormat .[[UseGrouping]] の値にも依存)左から右の順の
List
に設定する。
Assert :
groups の要素数は 0 より大きい。
groups が空でない間繰り返す:
groups の先頭要素を除去し、それを
integerGroup とする。
Record
{ [[Type]] :
"integer" , [[Value]] :
integerGroup } を result
に追加する。
groups がまだ空でないなら、
Record
{ [[Type]] :
"group" , [[Value]] :
groupSepSymbol } を
result に追加する。
fraction が undefined でない場合、
decimalSepSymbol を ILND
で表される小数点記号の String に設定する。
Record
{ [[Type]] :
"decimal" , [[Value]] :
decimalSepSymbol } を result に追加する。
Record
{ [[Type]] :
"fraction" , [[Value]] : fraction }
を result に追加する。
それ以外で p が "compactSymbol" なら、
compactSymbol を短い形式の exponent を表す
ILD
の文字列に設定(複数形を持つ言語では x
に依存してよい。実装はこの文字列を提供できなければならない。パターンに
"{compactSymbol}" プレースホルダーがなければならない)。
Record
{ [[Type]] :
"compact" , [[Value]] : compactSymbol } を
result に追加する。
それ以外で p が "compactName" なら、
compactName を長い形式の exponent を表す ILD
の文字列に設定(複数形を持つ言語では x
に依存してよい。実装はこの文字列を提供できなければならない。パターンに
"{compactName}" プレースホルダーがなければならない)。
Record
{ [[Type]] :
"compact" , [[Value]] : compactName } を
result に追加する。
それ以外で p が "scientificSeparator" なら、
scientificSeparator を指数セパレータを表す ILND
の String に設定する。
Record
{ [[Type]] :
"exponentSeparator" , [[Value]] :
scientificSeparator } を result に追加する。
それ以外で p が "scientificExponent" なら、
exponent < 0 なら、
minusSignSymbol をマイナス記号を表す ILND
の String に設定する。
Record
{ [[Type]] :
"exponentMinusSign" , [[Value]] :
minusSignSymbol } を result に追加する。
exponent を -exponent に設定する。
exponentResult を ToRawFixed (exponent ,
0, 0, 1, undefined ) に設定する。
Record
{ [[Type]] :
"exponentInteger" , [[Value]] :
exponentResult .[[FormattedString]] } を
result に追加する。
それ以外の場合、
unknown を x および p に基づく
ILND
の String に設定する。
Record
{ [[Type]] :
"unknown" , [[Value]] : unknown } を
result に追加する。
result を返す。
表28: 単純な数字対応を持つ数字体系
数字体系
数字
adlm
U+1E950 〜 U+1E959
ahom
U+11730 〜 U+11739
arab
U+0660 〜 U+0669
arabext
U+06F0 〜 U+06F9
bali
U+1B50 〜 U+1B59
beng
U+09E6 〜 U+09EF
bhks
U+11C50 〜 U+11C59
brah
U+11066 〜 U+1106F
cakm
U+11136 〜 U+1113F
cham
U+AA50 〜 U+AA59
deva
U+0966 〜 U+096F
diak
U+11950 〜 U+11959
fullwide
U+FF10 〜 U+FF19
gara
U+10D40 〜 U+10D49
gong
U+11DA0 〜 U+11DA9
gonm
U+11D50 〜 U+11D59
gujr
U+0AE6 〜 U+0AEF
gukh
U+16130 〜 U+16139
guru
U+0A66 〜 U+0A6F
hanidec
U+3007, U+4E00, U+4E8C, U+4E09, U+56DB, U+4E95, U+516D, U+4E03, U+516B,
U+4E5D
hmng
U+16B50 〜 U+16B59
hmnp
U+1E140 〜 U+1E149
java
U+A9D0 〜 U+A9D9
kali
U+A900 〜 U+A909
kawi
U+11F50 〜 U+11F59
khmr
U+17E0 〜 U+17E9
knda
U+0CE6 〜 U+0CEF
krai
U+16D70 〜 U+16D79
lana
U+1A80 〜 U+1A89
lanatham
U+1A90 〜 U+1A99
laoo
U+0ED0 〜 U+0ED9
latn
U+0030 〜 U+0039
lepc
U+1C40 〜 U+1C49
limb
U+1946 〜 U+194F
mathbold
U+1D7CE 〜 U+1D7D7
mathdbl
U+1D7D8 〜 U+1D7E1
mathmono
U+1D7F6 〜 U+1D7FF
mathsanb
U+1D7EC 〜 U+1D7F5
mathsans
U+1D7E2 〜 U+1D7EB
mlym
U+0D66 〜 U+0D6F
modi
U+11650 〜 U+11659
mong
U+1810 〜 U+1819
mroo
U+16A60 〜 U+16A69
mtei
U+ABF0 〜 U+ABF9
mymr
U+1040 〜 U+1049
mymrepka
U+116DA 〜 U+116E3
mymrpao
U+116D0 〜 U+116D9
mymrshan
U+1090 〜 U+1099
mymrtlng
U+A9F0 〜 U+A9F9
nagm
U+1E4F0 〜 U+1E4F9
newa
U+11450 〜 U+11459
nkoo
U+07C0 〜 U+07C9
olck
U+1C50 〜 U+1C59
onao
U+1E5F1 〜 U+1E5FA
orya
U+0B66 〜 U+0B6F
osma
U+104A0 〜 U+104A9
outlined
U+1CCF0 〜 U+1CCF9
rohg
U+10D30 〜 U+10D39
saur
U+A8D0 〜 U+A8D9
segment
U+1FBF0 〜 U+1FBF9
shrd
U+111D0 〜 U+111D9
sind
U+112F0 〜 U+112F9
sinh
U+0DE6 〜 U+0DEF
sora
U+110F0 〜 U+110F9
sund
U+1BB0 〜 U+1BB9
sunu
U+11BF0 〜 U+11BF9
takr
U+116C0 〜 U+116C9
talu
U+19D0 〜 U+19D9
tamldec
U+0BE6 〜 U+0BEF
telu
U+0C66 〜 U+0C6F
thai
U+0E50 〜 U+0E59
tibt
U+0F20 〜 U+0F29
tirh
U+114D0 〜 U+114D9
tnsa
U+16AC0 〜 U+16AC9
vaii
U+A620 〜 U+A629
wara
U+118E0 〜 U+118E9
wcho
U+1E2F0 〜 U+1E2F9
注1
計算は
ILD および
ILND の文字列値、および
numberFormat の有効ロケールや数字体系に依存する数値文字列内の位置に依存する。ここで挙げた
ILD や
ILND の文字列値は、通貨名以外は Unicode
Standard の「Number, decimal digit」一般カテゴリのコードポイントを含んではならない。
注2
実装には、Common Locale Data Repository(
https://cldr.unicode.org/ )で提供されるロケールの利用が推奨される。
16.5.6 FormatNumeric ( numberFormat , x )
抽象操作 FormatNumeric は、引数 numberFormat (Intl.NumberFormat)と x (Intl 数学値 )を受け取り、String
を返す。呼び出し時に次の手順を行う:
parts を PartitionNumberPattern (numberFormat ,
x ) に設定する。
result を空文字列に設定する。
parts の各 Record { [[Type]] , [[Value]] } part
について、
result を result と part .[[Value]] の文字列連結 に設定する。
result を返す。
16.5.7 FormatNumericToParts ( numberFormat , x
)
抽象操作 FormatNumericToParts は、引数 numberFormat (Intl.NumberFormat)、x (Intl 数学値 )を受け取り、Array
を返す。呼び出し時に次の手順を行う:
parts を PartitionNumberPattern (numberFormat ,
x ) に設定する。
result を !ArrayCreate (0) に設定する。
n を 0 に設定する。
parts の各 Record { [[Type]] , [[Value]] } part
について、
O を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
!CreateDataPropertyOrThrow (O ,
"type" , part .[[Type]] )
を実行する。
!CreateDataPropertyOrThrow (O ,
"value" , part .[[Value]] )
を実行する。
!CreateDataPropertyOrThrow (result ,
!ToString (𝔽 (n )), O ) を実行する。
n を 1 加算する。
result を返す。
16.5.8 ToRawPrecision ( x , minPrecision ,
maxPrecision , unsignedRoundingMode )
抽象操作 ToRawPrecision は、引数 x (非負の 数学値 )、minPrecision (整数 、1〜21の閉区間 )、maxPrecision (整数 、1〜21の閉区間 )、unsignedRoundingMode (表29 のUnsigned Rounding
Mode列の仕様型、またはundefined )を受け取り、フィールド [[FormattedString]] (String)、[[RoundedNumber]] (数学値 )、[[IntegerDigitsCount]] (整数 )、[[RoundingMagnitude]] (整数 )を持つ
Record を返す。
以下の式を解くことを含み、整数 入力に対し有効な数学値 を返す:
ToRawPrecisionFn(n , e , p ) = n ×
10e –p +1
ここで 10p –1 ≤ n < 10p
呼び出し時に次の手順を行う:
p を maxPrecision に設定する。
x = 0 なら、
m を p 回 0x0030(DIGIT ZERO)のコードユニットからなる文字列に設定する。
e を 0 に設定する。
xFinal を 0 に設定する。
それ以外の場合、
n1 とe1 を整数 、r1 を数学値 とし、r1 = ToRawPrecisionFn (n1 , e1 ,
p ) 、r1 ≤
x かつr1 が最大となるようにする。
n2 とe2 を整数 、r2 を数学値 とし、r2 = ToRawPrecisionFn (n2 , e2 ,
p ) 、r2 ≥
x かつr2 が最小となるようにする。
xFinal を ApplyUnsignedRoundingMode (x ,
r1 , r2 , unsignedRoundingMode ) に設定する。
xFinal が r1 なら、
n を n1 に設定する。
e を e1 に設定する。
それ以外の場合、
n を n2 に設定する。
e を e2 に設定する。
m を n の10進表現の桁からなる文字列(先頭にゼロなし)に設定する。
e ≥ (p - 1) なら、
m を m と e - p + 1 回 0x0030(DIGIT
ZERO)のコードユニットの文字列連結 に設定する。
int を e + 1 に設定する。
それ以外で e ≥ 0 なら、
m を m の先頭 e + 1 コードユニット、0x002E(FULL STOP)、残り
p - (e + 1) コードユニットの文字列連結 に設定する。
int を e + 1 に設定する。
それ以外の場合、
Assert : e < 0。
m を "0." 、-(e + 1) 回 0x0030(DIGIT
ZERO)、m の文字列連結 に設定する。
int を 1 に設定する。
m が 0x002E(FULL STOP)を含み、maxPrecision > minPrecision
なら、
cut を maxPrecision - minPrecision に設定する。
cut > 0 かつ m の末尾コードユニットが 0x0030(DIGIT ZERO)の間繰り返す:
m の末尾コードユニットを除去する。
cut を cut - 1 に設定する。
m の末尾コードユニットが 0x002E(FULL STOP)なら、
m の末尾コードユニットを除去する。
Record { [[FormattedString]] : m , [[RoundedNumber]] : xFinal , [[IntegerDigitsCount]] : int , [[RoundingMagnitude]] : e –p +1 } を返す。
16.5.9 ToRawFixed ( x , minFraction ,
maxFraction , roundingIncrement , unsignedRoundingMode )
抽象操作 ToRawFixed は、引数 x (非負の 数学値 )、minFraction (整数 、0〜100の閉区間 )、maxFraction (整数 、0〜100の閉区間 )、roundingIncrement (整数 )、unsignedRoundingMode (表29 のUnsigned Rounding
Mode列の仕様型、またはundefined )を受け取り、フィールド [[FormattedString]] (String)、[[RoundedNumber]] (数学値 )、[[IntegerDigitsCount]] (整数 )、[[RoundingMagnitude]] (整数 )を持つ
Record を返す。
以下の式を解くことを含み、整数 入力に対し有効な数学値 を返す:
ToRawFixedFn(n , f ) = n × 10–f
呼び出し時に次の手順を行う:
f を maxFraction に設定する。
n1 を整数 、r1 を数学値 とし、r1 =
ToRawFixedFn (n1 ,
f ) 、n1 modulo roundingIncrement =
0 、r1 ≤
x かつr1 が最大となるようにする。
n2 を整数 、r2 を数学値 とし、r2 =
ToRawFixedFn (n2 ,
f ) 、n2 modulo roundingIncrement =
0 、r2 ≥
x かつr2 が最小となるようにする。
xFinal を ApplyUnsignedRoundingMode (x , r1 ,
r2 , unsignedRoundingMode ) に設定する。
xFinal が r1 なら n を n1 に、それ以外は n を
n2 に設定する。
n = 0 なら m を "0" に、それ以外は m を
n の10進表現の桁からなる文字列(先頭にゼロなし)に設定する。
f ≠ 0 なら、
k を m の長さに設定する。
k ≤ f なら、
z を f + 1 - k 回 0x0030(DIGIT ZERO)の
String に設定する。
m を z と m の文字列連結 に設定する。
k を f + 1 に設定する。
a を m の先頭 k - f コードユニット、b
を残り f コードユニットに設定する。
m を a 、"." 、b の文字列連結 に設定する。
int を a の長さに設定する。
それ以外の場合、
int を m の長さに設定する。
cut を maxFraction - minFraction に設定する。
cut > 0 かつ m の末尾コードユニットが 0x0030(DIGIT ZERO)の間繰り返す:
m の末尾コードユニットを除去する。
cut を cut - 1 に設定する。
m の末尾コードユニットが 0x002E(FULL STOP)なら、
m の末尾コードユニットを除去する。
Record { [[FormattedString]] : m , [[RoundedNumber]] : xFinal , [[IntegerDigitsCount]] : int , [[RoundingMagnitude]] : –f } を返す。
規範的オプション
16.5.10 UnwrapNumberFormat ( nf )
抽象操作 UnwrapNumberFormat は、引数 nf (ECMAScript 言語値 )を受け取り、正常完了値を含む ECMAScript 言語値 または throw completion を返す。
入力オブジェクトの NumberFormat インスタンスを返す。これは値自体か、%Intl.NumberFormat% がコンストラクタ の4.3 注1 の規範的オプションモードに従い関連付けた値である。
呼び出し時に次の手順を行う:
nf が オブジェクトでない なら、TypeError 例外を投げる。
nf が [[InitializedNumberFormat]] 内部スロットを持たず、?
OrdinaryHasInstance (%Intl.NumberFormat% , nf ) が
true なら、
? Get (nf , %Intl% .[[FallbackSymbol]] ) を返す。
nf を返す。
16.5.11 GetNumberFormatPattern ( numberFormat ,
x )
抽象操作 GetNumberFormatPattern は、引数 numberFormat (Intl.NumberFormat)と
x (Intl
数学値 )を受け取り、String を返す。
number format オブジェクトの単位関連オプションと、最終的にスケーリング・丸めされた数値(Intl 数学値 )を考慮し、16.2.3
で説明されるパターン(String 値)を返す。
呼び出し時に次の手順を行う:
resolvedLocaleData を numberFormat .[[LocaleData]] に設定する。
patterns を resolvedLocaleData .[[patterns]] に設定する。
Assert : patterns は Record (16.2.3 参照)。
style を numberFormat .[[Style]] に設定する。
style が "percent" なら、
patterns を patterns .[[percent]]
に設定する。
それ以外で style が "unit" なら、
unit を numberFormat .[[Unit]]
に設定する。
unitDisplay を numberFormat .[[UnitDisplay]] に設定する。
patterns を patterns .[[unit]]
に設定する。
もし patterns に [[<unit >]] フィールドがなければ、
unit を "fallback" に設定する。
patterns を patterns .[[<unit >]] に設定する。
patterns を patterns .[[<unitDisplay >]]
に設定する。
それ以外で style が "currency" なら、
currency を numberFormat .[[Currency]] に設定する。
currencyDisplay を numberFormat .[[CurrencyDisplay]] に設定する。
currencySign を numberFormat .[[CurrencySign]] に設定する。
patterns を patterns .[[currency]]
に設定する。
もし patterns に [[<currency >]] フィールドがなければ、
currency を "fallback" に設定する。
patterns を patterns .[[<currency >]] に設定する。
patterns を patterns .[[<currencyDisplay >]]
に設定する。
patterns を patterns .[[<currencySign >]]
に設定する。
それ以外、
Assert : style は
"decimal" である。
patterns を patterns .[[decimal]]
に設定する。
x が negative-infinity なら、
category を negative-non-zero に設定する。
それ以外で x が negative-zero なら、
category を negative-zero に設定する。
それ以外で x が not-a-number なら、
category を positive-zero に設定する。
それ以外で x が positive-infinity なら、
category を positive-non-zero に設定する。
それ以外、
Assert : x は 数学値 である。
x < 0 なら、
category を negative-non-zero に設定する。
それ以外で x > 0 なら、
category を positive-non-zero に設定する。
それ以外、
category を positive-zero に設定する。
signDisplay を numberFormat .[[SignDisplay]] に設定する。
signDisplay が "never" なら、
pattern を patterns .[[zeroPattern]] に設定する。
それ以外で signDisplay が "auto" なら、
category が positive-non-zero または
positive-zero なら、
pattern を patterns .[[zeroPattern]] に設定する。
それ以外、
pattern を patterns .[[negativePattern]] に設定する。
それ以外で signDisplay が "always" なら、
category が positive-non-zero または
positive-zero なら、
pattern を patterns .[[positivePattern]] に設定する。
それ以外、
pattern を patterns .[[negativePattern]] に設定する。
それ以外で signDisplay が "exceptZero" なら、
category が positive-zero または
negative-zero なら、
pattern を patterns .[[zeroPattern]] に設定する。
それ以外で category が positive-non-zero なら、
pattern を patterns .[[positivePattern]] に設定する。
それ以外、
pattern を patterns .[[negativePattern]] に設定する。
それ以外、
Assert : signDisplay は
"negative" である。
category が negative-non-zero なら、
pattern を patterns .[[negativePattern]] に設定する。
それ以外、
pattern を patterns .[[zeroPattern]] に設定する。
pattern を返す。
16.5.12 GetNotationSubPattern ( numberFormat ,
exponent )
抽象操作 GetNotationSubPattern は、引数 numberFormat (Intl.NumberFormat)と
exponent (整数 )を受け取り、String を返す。
解決された表記法と exponent を考慮し、16.2.3 で説明される表記サブパターンの String 値を返す。
呼び出し時に次の手順を行う:
resolvedLocaleData を numberFormat .[[LocaleData]] に設定する。
notationSubPatterns を resolvedLocaleData .[[notationSubPatterns]] に設定する。
Assert : notationSubPatterns は Record (16.2.3 参照)。
notation を numberFormat .[[Notation]]
に設定する。
notation が "scientific" または notation が
"engineering" なら、
notationSubPatterns .[[scientific]] を返す。
それ以外で exponent が 0 でないなら、
Assert : notation は
"compact" である。
compactDisplay を numberFormat .[[CompactDisplay]] に設定する。
compactPatterns を notationSubPatterns .[[compact]] .[[<compactDisplay >]] に設定する。
compactPatterns .[[<exponent >]] を返す。
それ以外、
"{number}" を返す。
16.5.13 ComputeExponent ( numberFormat , x )
抽象操作 ComputeExponent は、引数 numberFormat (Intl.NumberFormat)、x (数学値 )を受け取り、整数 を返す。
この操作は、数値書式設定に従い x をスケーリングするべき指数(10のべき乗)を計算する。
たとえば 999 が丸めで 1000 になる場合など、異なる指数が必要となるケースも処理する。
呼び出し時に次の手順を行う:
x = 0 なら、
0 を返す。
x < 0 なら、
x = -x に設定する。
magnitude を x の常用対数(base 10)を下方切捨てした 整数 とする。
exponent を ComputeExponentForMagnitude (numberFormat ,
magnitude ) に設定する。
x を x × 10-exponent に設定する。
formatNumberResult を FormatNumericToString (numberFormat ,
x ) に設定する。
formatNumberResult .[[RoundedNumber]] = 0 なら、
exponent を返す。
newMagnitude を formatNumberResult .[[RoundedNumber]] の常用対数(base 10)を下方切捨てした 整数 とする。
newMagnitude が magnitude - exponent なら、
exponent を返す。
ComputeExponentForMagnitude (numberFormat ,
magnitude + 1) を返す。
16.5.14 ComputeExponentForMagnitude ( numberFormat ,
magnitude )
抽象操作 ComputeExponentForMagnitude は、引数
numberFormat (Intl.NumberFormat)、magnitude (整数 )を受け取り、整数 を返す。
この操作は、ロケールと指定された表記(scientific, engineering, compact)に従い、与えられた桁数の数値をスケーリングする指数(最上位桁の10のべき乗)を計算する。
呼び出し時に次の手順を行う:
notation を numberFormat .[[Notation]]
に設定する。
notation が "standard" なら、
0 を返す。
それ以外で notation が "scientific" なら、
magnitude を返す。
それ以外で notation が "engineering" なら、
thousands を magnitude / 3 以下で最大の 整数 に設定する。
thousands × 3 を返す。
それ以外、
Assert : notation は
"compact" である。
exponent を現在のロケールで compact notation 用に与えられた桁数をスケーリングするための ILD の
整数 に設定する。
exponent を返す。
16.5.15 実行時意味論: StringIntlMV
構文指向操作
StringIntlMV は引数を取らずに実行される。
注
StringNumericLiteral
を Number 値に変換する処理は、NumericValue により NumericLiteral
の数値を得る方法と全体的には似ているが、細部は異なる(12.9.3 参照)。
以下の生成式ごとに定義される:
StringNumericLiteral
:::
StrWhiteSpace opt
0 を返す。
StringNumericLiteral
:::
StrWhiteSpace opt
StrNumericLiteral
StrWhiteSpace opt
StringIntlMV を StrNumericLiteral
に適用した結果を返す。
StrNumericLiteral
:::
NonDecimalIntegerLiteral
NonDecimalIntegerLiteral
の MV を返す。
StrDecimalLiteral
:::
-
StrUnsignedDecimalLiteral
a を StringIntlMV を
StrUnsignedDecimalLiteral
に適用した結果とする。
a が 0 なら negative-zero を返す。
a が positive-infinity なら
negative-infinity を返す。
-a を返す。
StrUnsignedDecimalLiteral
:::
Infinity
positive-infinity を返す。
StrUnsignedDecimalLiteral
:::
DecimalDigits
.
DecimalDigits opt
ExponentPart opt
最初の DecimalDigits の
MV を a とする。
2つめの DecimalDigits
が存在する場合、
2つめの DecimalDigits
の MV を b とする。
2つめの DecimalDigits
のコードポイント数を n とする。
それ以外の場合、
b を 0 に設定する。
n を 0 に設定する。
ExponentPart が存在すれば e をその MV、なければ e を 0 とする。
(a + (b × 10-n )) × 10e
を返す。
StrUnsignedDecimalLiteral
:::
.
DecimalDigits
ExponentPart opt
b を DecimalDigits の
MV とする。
ExponentPart が存在すれば e をその MV、なければ e を 0 とする。
n を DecimalDigits
のコードポイント数とする。
b × 10e - n を返す。
StrUnsignedDecimalLiteral
:::
DecimalDigits
ExponentPart opt
a を DecimalDigits の
MV とする。
ExponentPart が存在すれば e をその MV、なければ e を 0 とする。
a × 10e を返す。
16.5.16 ToIntlMathematicalValue ( value )
抽象操作 ToIntlMathematicalValue は、引数 value (ECMAScript 言語値 )を受け取り、正常完了値を含む Intl 数学値 または throw completion を返す。
value を Intl 数学値 に変換して返す。これは
数学値 、positive-infinity 、negative-infinity 、not-a-number 、negative-zero
を含む型である。
この抽象操作は 7.1.3 に似ているが、Number や BigInt の代わりに厳密な10進数値を表す
数学値 を返すことができる。
呼び出し時に次の手順を行う:
primValue を ? ToPrimitive (value ,
number ) に設定する。
primValue が BigInt なら、ℝ (primValue ) を返す。
primValue が String なら、
str を primValue に設定する。
それ以外の場合、
x を ? ToNumber (primValue ) に設定する。
x が -0 𝔽
なら、negative-zero を返す。
str を Number::toString (x , 10) に設定する。
text を StringToCodePoints (str ) に設定する。
literal を ParseText (text ,
StringNumericLiteral )
に設定する。
literal が List
のエラーなら、not-a-number を返す。
intlMV を StringIntlMV
を literal に適用した結果とする。
intlMV が 数学値 なら、
rounded を RoundMVResult (abs (intlMV )) に設定する。
rounded が +∞ 𝔽 かつ intlMV
< 0 なら、negative-infinity を返す。
rounded が +∞ 𝔽
なら、positive-infinity を返す。
rounded が +0 𝔽 かつ intlMV
< 0 なら、negative-zero を返す。
rounded が +0 𝔽 なら、0 を返す。
intlMV を返す。
16.5.17 GetUnsignedRoundingMode ( roundingMode ,
sign )
抽象操作 GetUnsignedRoundingMode は、引数 roundingMode (丸めモード )、sign (negative または
positive )を受け取り、表29 の Unsigned Rounding Mode 列の仕様型を返す。絶対値にどの
丸めモード を適用すれば、sign が negative
の場合は負、そうでない場合は正の符号付き値への roundingMode の適用と同じ結果になるかを返す。呼び出し時に次の手順を行う:
roundingMode 列が roundingMode 、Sign 列が sign の行で、Unsigned
Rounding Mode 列の値を返す。
表29: 丸めモード から非符号付き丸めモード への変換
識別子
符号
非符号付き丸めモード
"ceil"
positive
infinity
negative
zero
"floor"
positive
zero
negative
infinity
"expand"
positive
infinity
negative
infinity
"trunc"
positive
zero
negative
zero
"halfCeil"
positive
half-infinity
negative
half-zero
"halfFloor"
positive
half-zero
negative
half-infinity
"halfExpand"
positive
half-infinity
negative
half-infinity
"halfTrunc"
positive
half-zero
negative
half-zero
"halfEven"
positive
half-even
negative
half-even
16.5.18 ApplyUnsignedRoundingMode ( x , r1 ,
r2 , unsignedRoundingMode )
抽象操作 ApplyUnsignedRoundingMode は、引数 x (数学値 )、r1 (数学値 )、r2 (数学値 )、unsignedRoundingMode (表29 のUnsigned Rounding
Mode列の仕様型、またはundefined )を受け取り、数学値 を返す。
x (下限 r1 、上限 r2 )を考慮し、unsignedRoundingMode に従い
r1 または r2 を返す。呼び出し時に次の手順を行う:
x が r1 なら r1 を返す。
Assert : r1 < x <
r2 。
Assert : unsignedRoundingMode は
undefined でない。
unsignedRoundingMode が zero なら r1 を返す。
unsignedRoundingMode が infinity なら r2 を返す。
d1 を x – r1 に設定する。
d2 を r2 – x に設定する。
d1 < d2 なら r1 を返す。
d2 < d1 なら r2 を返す。
Assert : d1 は d2 。
unsignedRoundingMode が half-zero なら r1 を返す。
unsignedRoundingMode が half-infinity なら r2
を返す。
Assert : unsignedRoundingMode は
half-even 。
cardinality を (r1 / (r2 –
r1 )) modulo 2 に設定する。
cardinality が 0 なら r1 を返す。
r2 を返す。
16.5.19 PartitionNumberRangePattern ( numberFormat ,
x , y )
抽象操作 PartitionNumberRangePattern は、引数
numberFormat (Intl.NumberFormat)、x (Intl 数学値 )、y (Intl 数学値 )を受け取り、正常完了値 としてフィールド [[Type]] (String)、[[Value]] (String)、[[Source]] (String)を持つ Record の List または throw completion を返す。
x 、y 、および numberFormat
のフォーマットオプションに従ってローカライズされた数値範囲のパーツを生成する。呼び出し時に次の手順を行う:
x が not-a-number または y が
not-a-number なら、RangeError 例外を投げる。
xResult を PartitionNumberPattern (numberFormat ,
x ) に設定する。
yResult を PartitionNumberPattern (numberFormat ,
y ) に設定する。
FormatNumeric (numberFormat , x ) が
FormatNumeric (numberFormat , y )
と等しい場合、
appxResult を FormatApproximately (numberFormat ,
xResult ) に設定する。
appxResult の各要素 r について、
r .[[Source]] を
"shared" に設定する。
appxResult を返す。
result を新しい空の List に設定する。
xResult の各要素 r について、
Record {
[[Type]] : r .[[Type]] , [[Value]] :
r .[[Value]] , [[Source]] : "startRange" } を
result に追加する。
rangeSeparator を2つの数値を区切るための ILND の String
に設定する。
Record { [[Type]] : "literal" , [[Value]] : rangeSeparator , [[Source]] : "shared" } を result
に追加する。
yResult の各要素 r について、
Record {
[[Type]] : r .[[Type]] , [[Value]] :
r .[[Value]] , [[Source]] : "endRange" } を
result に追加する。
CollapseNumberRange (numberFormat ,
result ) を返す。
16.5.20 FormatApproximately ( numberFormat ,
result )
抽象操作 FormatApproximately は、引数 numberFormat (Intl.NumberFormat)、result (フィールド
[[Type]] (String)、[[Value]] (String)を持つ
Record の List )を受け取り、フィールド [[Type]] (String)、[[Value]] (String)を持つ Record の List を返す。
この操作は result (PartitionNumberPattern に記述される Record の List でなければならない)に約記号の Record
を追加して修正する。約記号は numberFormat に依存する場合がある。呼び出し時に次の手順を行う:
approximatelySign を約数を表す ILND の String に設定する。
approximatelySign が空でなければ、Record { [[Type]] : "approximatelySign" , [[Value]] : approximatelySign } を ILND の index の
result に挿入する。例えば、numberFormat の [[Locale]] が "en-US" 、[[NumberingSystem]] が "latn" 、[[Style]] が "decimal" の場合、新しい Record は
result の最初の要素の前に挿入される場合がある。
result を返す。
16.5.21 CollapseNumberRange ( numberFormat ,
result )
実装依存 抽象操作 CollapseNumberRange は、引数
numberFormat (Intl.NumberFormat)と result (フィールド [[Type]] (String)、[[Value]] (String)、[[Source]] (String)を持つ Record の List )を受け取り、フィールド [[Type]] (String)、[[Value]] (String)、[[Source]] (String)を持つ Record の List を返す。
この操作は result (必ず Record の List 、PartitionNumberRangePattern
で構築されたもの)を有効ロケールおよび numberFormat
の書式オプションに従って、冗長な情報の除去、内部矛盾の解消、必要に応じた文字の置換、必要に応じたスペースの挿入を行って修正する。その後、修正後の List を返す。
アルゴリズムは ILND
だが、Intl.NumberFormat.prototype.formatRange ( start , end
) の引数に対し、もし常に result を修正せず返す単純な CollapseNumberRange
実装で等しくならない場合、等価な結果を返してはならない(曖昧性を導入してはならない)。
例えば、実装は範囲セパレータの後ろにある通貨記号の Record を除去して、results
List
"$3–$5" を "$3–5" に変換することができる。
また、実装は文法的正しさのために Record の
[[Value]] を修正してもよい。例えば、results List "0.5 miles–1
mile" を "0.5–1 miles" に変換することができる。
result を修正せず返すことは CollapseNumberRange の正しい実装として保証される。
16.5.22 FormatNumericRange ( numberFormat , x ,
y )
抽象操作 FormatNumericRange は、引数 numberFormat (Intl.NumberFormat)、x (Intl 数学値 )、y (Intl 数学値 )を受け取り、正常完了値 として String または throw completion
を返す。呼び出し時に次の手順を行う:
parts を ? PartitionNumberRangePattern (numberFormat ,
x , y ) に設定する。
result を空文字列に設定する。
parts の各要素 part について、
result を result と part .[[Value]] の文字列連結 に設定する。
result を返す。
16.5.23 FormatNumericRangeToParts ( numberFormat ,
x , y )
抽象操作 FormatNumericRangeToParts は、引数
numberFormat (Intl.NumberFormat)、x (Intl 数学値 )、y (Intl 数学値 )を受け取り、正常完了値 として Array または throw completion
を返す。呼び出し時に次の手順を行う:
parts を ? PartitionNumberRangePattern (numberFormat ,
x , y ) に設定する。
result を !ArrayCreate (0) に設定する。
n を 0 に設定する。
parts の各要素 part について、
O を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
!CreateDataPropertyOrThrow (O ,
"type" , part .[[Type]] )
を実行する。
!CreateDataPropertyOrThrow (O ,
"value" , part .[[Value]] )
を実行する。
!CreateDataPropertyOrThrow (O ,
"source" , part .[[Source]] ) を実行する。
!CreateDataPropertyOrThrow (result ,
!ToString (𝔽 (n )), O ) を実行する。
n を 1 加算する。
result を返す。
17 PluralRules オブジェクト
17.1 Intl.PluralRules コンストラクタ
Intl.PluralRules コンストラクタ :
%Intl.PluralRules% である。
"PluralRules" プロパティの初期値は Intl オブジェクト である。
全ての サービスコンストラクタ プロパティの共通動作は Intl オブジェクト の 9.1
に記述されている。
17.1.1 Intl.PluralRules ( [ locales [ ,
options ] ] )
Intl.PluralRules 関数が省略可能な引数 locales と options
で呼び出された場合、次の手順を行う:
NewTarget が undefined なら、TypeError 例外を投げる。
pluralRules を ? OrdinaryCreateFromConstructor (NewTarget,
"%Intl.PluralRules.prototype%" , « [[InitializedPluralRules]] , [[Locale]] ,
[[Type]] , [[Notation]] , [[MinimumIntegerDigits]] , [[MinimumFractionDigits]] , [[MaximumFractionDigits]] , [[MinimumSignificantDigits]] , [[MaximumSignificantDigits]] , [[RoundingType]] , [[RoundingIncrement]] , [[RoundingMode]] , [[ComputedRoundingPriority]] , [[TrailingZeroDisplay]] ») に設定する。
optionsResolution を ? ResolveOptions (%Intl.PluralRules% ,
%Intl.PluralRules% .[[LocaleData]] , locales , options , «
coerce-options ») に設定する。
options を optionsResolution .[[Options]]
に設定する。
r を optionsResolution .[[ResolvedLocale]]
に設定する。
pluralRules .[[Locale]] を r .[[Locale]] に設定する。
t を ? GetOption (options ,
"type" , string , «
"cardinal" , "ordinal" »,
"cardinal" ) に設定する。
pluralRules .[[Type]] を t に設定する。
notation を ? GetOption (options ,
"notation" , string , «
"standard" , "scientific" ,
"engineering" , "compact" »,
"standard" ) に設定する。
pluralRules .[[Notation]] を notation
に設定する。
? SetNumberFormatDigitOptions (pluralRules ,
options , 0, 3, notation ) を実行する。
pluralRules を返す。
17.2 Intl.PluralRules コンストラクタのプロパティ
Intl.PluralRules コンストラクタ :
17.2.1 Intl.PluralRules.prototype
Intl.PluralRules.prototype の値は %Intl.PluralRules.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
17.2.2 Intl.PluralRules.supportedLocalesOf ( locales [ ,
options ] )
supportedLocalesOf メソッドが引数 locales および options
で呼び出された場合、次の手順を行う:
availableLocales を %Intl.PluralRules% .[[AvailableLocales]] に設定する。
requestedLocales を ? CanonicalizeLocaleList (locales )
に設定する。
? FilterLocales (availableLocales ,
requestedLocales , options ) を返す。
17.2.3 内部スロット
[[AvailableLocales]] 内部スロットの値は 実装依存 であり、9.1 に記述された制約の範囲内である。
[[RelevantExtensionKeys]] 内部スロットの値は « » である。
[[ResolutionOptionDescriptors]] 内部スロットの値は « » である。
注1
[[LocaleData]] 内部スロットの値は 実装依存 であり、9.1 に記述された制約の範囲内である。
注2
実装においては、Common Locale Data Repository(
https://cldr.unicode.org/ )で提供されるロケールデータの利用が推奨される。
17.3 Intl.PluralRules プロトタイプオブジェクトのプロパティ
Intl.PluralRules プロトタイプオブジェクト :
%Intl.PluralRules.prototype% である。
通常のオブジェクト である。
Intl.PluralRules のインスタンスではなく、[[InitializedPluralRules]] 内部スロットや
Intl.PluralRules インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
17.3.1 Intl.PluralRules.prototype.constructor
Intl.PluralRules.prototype.constructor の初期値は %Intl.PluralRules% である。
17.3.2 Intl.PluralRules.prototype.resolvedOptions ( )
この関数は、オブジェクトの初期化時に計算されたロケールとオプションへのアクセスを提供する。
pr を this の値とする。
? RequireInternalSlot (pr ,
[[InitializedPluralRules]] ) を実行する。
options を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
pluralCategories を List
の String で、選択したロケール pr .[[Locale]] に対する PluralRuleSelect
の全ての可能な結果を含み、次の順序でソートされている:"zero" , "one" ,
"two" , "few" , "many" ,
"other" 。
表30
の各行(ヘッダー行を除く)について、表の順序で次を行う:
p を現在の行の Property の値とする。
p が "pluralCategories" の場合、
v を CreateArrayFromList (pluralCategories )
に設定する。
それ以外の場合、
v を現在の行の Internal Slot の値という名前を持つ pr の内部スロットの値とする。
v が undefined でない場合、
現在の行に Conversion 値がある場合、
Assert :Conversion
の値は number である。
v を 𝔽 (v )
に設定する。
! CreateDataPropertyOrThrow (options ,
p , v ) を実行する。
options を返す。
表30: PluralRules インスタンスの解決済みオプション
内部スロット
プロパティ
変換
[[Locale]]
"locale"
[[Type]]
"type"
[[Notation]]
"notation"
[[MinimumIntegerDigits]]
"minimumIntegerDigits"
number
[[MinimumFractionDigits]]
"minimumFractionDigits"
number
[[MaximumFractionDigits]]
"maximumFractionDigits"
number
[[MinimumSignificantDigits]]
"minimumSignificantDigits"
number
[[MaximumSignificantDigits]]
"maximumSignificantDigits"
number
"pluralCategories"
[[RoundingIncrement]]
"roundingIncrement"
number
[[RoundingMode]]
"roundingMode"
[[ComputedRoundingPriority]]
"roundingPriority"
[[TrailingZeroDisplay]]
"trailingZeroDisplay"
17.3.3 Intl.PluralRules.prototype.select ( value )
select メソッドが引数 value で呼び出された場合、次の手順を行う:
pr を this の値とする。
? RequireInternalSlot (pr ,
[[InitializedPluralRules]] ) を実行する。
n を ? ToNumber (value )
に設定する。
ResolvePlural (pr ,
n ) の [[PluralCategory]] を返す。
17.3.4 Intl.PluralRules.prototype.selectRange ( start ,
end )
selectRange メソッドが引数 start および end で呼び出された場合、次の手順を行う:
pr を this の値とする。
? RequireInternalSlot (pr ,
[[InitializedPluralRules]] ) を実行する。
start が undefined または end が
undefined なら、TypeError 例外を投げる。
x を ? ToNumber (start )
に設定する。
y を ? ToNumber (end )
に設定する。
? ResolvePluralRange (pr ,
x , y ) を返す。
17.3.5 Intl.PluralRules.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は文字列値 "Intl.PluralRules" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
17.4 Intl.PluralRules インスタンスのプロパティ
Intl.PluralRules インスタンスは 通常のオブジェクト であり、%Intl.PluralRules.prototype%
からプロパティを継承する。
Intl.PluralRules インスタンスは [[InitializedPluralRules]] 内部スロットを持つ。
Intl.PluralRules インスタンスはまた、Intl.PluralRules
コンストラクタ によって計算されるいくつかの内部スロットも持つ:
[[Locale]] は、複数形ルールに用いられるロケールのString 値(その言語タグ )である。
[[Type]] は、"cardinal" または
"ordinal" のいずれかの String 値であり、使用される複数形ルールを識別する。
[[Notation]]
は、"standard" 、"scientific" 、"engineering" 、"compact"
のいずれかの String 値であり、使用される表記法を識別する。
[[MinimumIntegerDigits]] は、使用する最小の 整数 桁数を示す非負の整数である。
[[MinimumFractionDigits]] および [[MaximumFractionDigits]] は、使用する最小および最大の 小数 桁数を示す非負の整数である。必要に応じて丸められたり、末尾にゼロが付加される。
[[MinimumSignificantDigits]] および [[MaximumSignificantDigits]] は、使用する最小および最大の 有効桁 数を示す正の整数である。これらが両方とも存在する場合は、最小・最大の
整数 および小数桁より優先される。
[[RoundingType]] は
fraction-digits 、significant-digits 、more-precision 、less-precision
のいずれかであり、どの丸め方式を使うかを示す(詳細は 16.4
を参照)。
[[ComputedRoundingPriority]] は
"auto" 、"morePrecision" 、"lessPrecision"
のいずれかの String 値であり、17.3.2 で [[RoundingType]] を有効な "roundingPriority"
オプションに変換するのに使われる。
[[RoundingIncrement]] は 10、100、1000、10000
を10分割・5分割・4分割・2分割する整数であり、丸めの単位を決定する。例えば [[MaximumFractionDigits]] が2で
[[RoundingIncrement]] が5なら、最も近い0.05(ニッケル丸め)に丸める。
[[RoundingMode]] は使用する 丸めモード を識別する。
[[TrailingZeroDisplay]] は "auto" または
"stripIfInteger" のいずれかの String 値であり、書式化した値が整数 (小数桁がすべて0)なら末尾のゼロを除去するかどうかを示す。
17.5 PluralRules オブジェクトの抽象操作
17.5.1 PluralRuleSelect ( locale , type ,
notation , s )
実装依存 抽象操作
PluralRuleSelect は引数 locale (言語タグ )、type ("cardinal"
または
"ordinal" )、notation (String)、s (10進文字列)を受け取り、"zero" 、"one" 、"two" 、"few" 、"many" 、または
"other" を返す。返される文字列は locale 、type 、notation
に従い s の複数形カテゴリを特徴づける。
17.5.2 ResolvePlural ( pluralRules , n )
抽象操作 ResolvePlural は、引数 pluralRules (Intl.PluralRules)、n (Number)を受け取り、フィールド
[[PluralCategory]] ("zero" 、"one" 、"two" 、"few" 、"many" 、"other" )および
[[FormattedString]] (String)を持つ Record を返す。返される Record は、n を有効ロケールおよび
pluralRules のオプションに従い説明する2つの文字列フィールドを持つ:[[PluralCategory]]
はその 複数形カテゴリ を特徴づけ、[[FormattedString]] は書式化表現を含む。呼び出し時に次の手順を行う:
n が 有限 Number でない場合、
s を ! ToString (n )
に設定する。
Record {
[[PluralCategory]] : "other" , [[FormattedString]] : s } を返す。
res を FormatNumericToString (pluralRules ,
ℝ (n ))
に設定する。
s を res .[[FormattedString]] に設定する。
locale を pluralRules .[[Locale]] に設定する。
type を pluralRules .[[Type]] に設定する。
notation を pluralRules .[[Notation]]
に設定する。
p を PluralRuleSelect (locale ,
type , notation , s ) に設定する。
Record { [[PluralCategory]] : p , [[FormattedString]] : s } を返す。
17.5.3 PluralRuleSelectRange ( locale , type ,
notation , xp , yp )
実装依存 抽象操作
PluralRuleSelectRange は引数
locale (String)、type ("cardinal" または
"ordinal" )、notation (String)、xp ("zero" 、"one" 、"two" 、"few" 、"many" 、または
"other" )、yp (同上)を受け取り、"zero" 、"one" 、"two" 、"few" 、"many" 、または
"other" を返す。これは、範囲の開始と終了を特徴づける複数形カテゴリ文字列 xp 、yp を、対応する
locale 、type 、notation
に対する範囲全体の複数形解決文字列にマッピングする実装依存のアルゴリズムである。該当しない場合は "other" を返す。
17.5.4 ResolvePluralRange ( pluralRules , x ,
y )
抽象操作 ResolvePluralRange は、引数
pluralRules (Intl.PluralRules)、x (Number)、y (Number)を受け取り、正常完了値 として
"zero" 、"one" 、"two" 、"few" 、"many" 、または
"other" 、または throw
completion を返す。返される文字列値は、有効ロケールおよび pluralRules のオプションに従い、x
から y までの範囲の複数形を表す。呼び出し時に次の手順を行う:
x が NaN または y が NaN
なら、RangeError 例外を投げる。
xp を ResolvePlural (pluralRules ,
x ) に設定する。
yp を ResolvePlural (pluralRules ,
y ) に設定する。
xp .[[FormattedString]] が yp .[[FormattedString]] なら、
xp .[[PluralCategory]] を返す。
locale を pluralRules .[[Locale]] に設定する。
type を pluralRules .[[Type]] に設定する。
notation を pluralRules .[[Notation]]
に設定する。
PluralRuleSelectRange (locale ,
type , notation , xp .[[PluralCategory]] , yp .[[PluralCategory]] ) を返す。
18 RelativeTimeFormat オブジェクト
18.1 Intl.RelativeTimeFormat コンストラクタ
Intl.RelativeTimeFormat コンストラクタ :
%Intl.RelativeTimeFormat% である。
"RelativeTimeFormat" プロパティの初期値は Intl オブジェクト である。
サービスコンストラクタ に共通の動作は、Intl オブジェクト の 9.1
に規定されている。
18.1.1 Intl.RelativeTimeFormat ( [ locales [ ,
options ] ] )
Intl.RelativeTimeFormat 関数が省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
NewTarget が undefined なら、TypeError 例外を投げる。
relativeTimeFormat を ? OrdinaryCreateFromConstructor (NewTarget,
"%Intl.RelativeTimeFormat.prototype%" , « [[InitializedRelativeTimeFormat]] , [[Locale]] , [[LocaleData]] , [[Style]] , [[Numeric]] , [[NumberFormat]] , [[NumberingSystem]] ,
[[PluralRules]] ») に設定する。
optionsResolution を ? ResolveOptions (%Intl.RelativeTimeFormat% ,
%Intl.RelativeTimeFormat% .[[LocaleData]] , locales , options , «
coerce-options ») に設定する。
options を optionsResolution .[[Options]]
に設定する。
r を optionsResolution .[[ResolvedLocale]]
に設定する。
locale を r .[[Locale]] に設定する。
relativeTimeFormat .[[Locale]] を
locale に設定する。
relativeTimeFormat .[[LocaleData]] を
r .[[LocaleData]] に設定する。
relativeTimeFormat .[[NumberingSystem]] を
r .[[nu]] に設定する。
style を ? GetOption (options ,
"style" , string , « "long" ,
"short" , "narrow" »,
"long" ) に設定する。
relativeTimeFormat .[[Style]] を
style に設定する。
numeric を ? GetOption (options ,
"numeric" , string , «
"always" , "auto" »,
"always" ) に設定する。
relativeTimeFormat .[[Numeric]] を
numeric に設定する。
nfOptions を OrdinaryObjectCreate (null )
に設定する。
! CreateDataPropertyOrThrow (nfOptions ,
"numberingSystem" , relativeTimeFormat .[[NumberingSystem]] ) を実行する。
relativeTimeFormat .[[NumberFormat]] を
! Construct (%Intl.NumberFormat% , «
locale , nfOptions ») に設定する。
relativeTimeFormat .[[PluralRules]] を
! Construct (%Intl.PluralRules% , «
locale ») に設定する。
relativeTimeFormat を返す。
18.2 Intl.RelativeTimeFormat コンストラクタのプロパティ
Intl.RelativeTimeFormat コンストラクタ :
18.2.1 Intl.RelativeTimeFormat.prototype
Intl.RelativeTimeFormat.prototype の値は %Intl.RelativeTimeFormat.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
18.2.2 Intl.RelativeTimeFormat.supportedLocalesOf (
locales [ , options ] )
supportedLocalesOf メソッドが引数 locales と options
で呼び出されたとき、次の手順を行う:
availableLocales を %Intl.RelativeTimeFormat% .[[AvailableLocales]] に設定する。
requestedLocales を ? CanonicalizeLocaleList (locales )
に設定する。
? FilterLocales (availableLocales ,
requestedLocales , options ) を返す。
18.2.3 内部スロット
[[AvailableLocales]] 内部スロットの値は 実装依存 であり、9.1
に記述された制約の範囲内である。
[[RelevantExtensionKeys]] 内部スロットの値は «
"nu" » である。
[[ResolutionOptionDescriptors]] 内部スロットの値は « {
[[Key]] : "nu" , [[Property]] : "numberingSystem" } » である。
注1
[[LocaleData]] 内部スロットの値は 実装依存 であり、9.1
に記述された制約および以下の追加制約の範囲内である(すべてのロケール値 locale に対して):
[[LocaleData]] .[[<locale >]] はフィールド
"second" 、"minute" 、"hour" 、"day" 、"week" 、"month" 、"quarter" 、"year"
を持つ。これらの名称に "-narrow" または "-short"
を連結した追加フィールドが存在してもよい。これらのフィールドに対応する値は、次の2種類のフィールドを含む Record
である:
"future" および "past" フィールドで、locale
に関連する複数形カテゴリごとにフィールドを持つ Record 。それらのフィールドに対応する値は、書式化された数値で置き換える
"{0}" を含み得るパターンである。
任意で、キーが Number の ToString
の結果であり、値がテンプレートとして扱われないリテラル文字列である追加フィールド。
[[LocaleData]] の任意のロケールフィールドにおける "nu" フィールドの値である
List
は、"native" 、"traditio" 、"finance"
を含んではならない。
注2
実装においては、Common Locale Data Repository(
https://cldr.unicode.org/ )で提供されるロケールデータの利用が推奨される。
18.3 Intl.RelativeTimeFormat プロトタイプオブジェクトのプロパティ
Intl.RelativeTimeFormat プロトタイプオブジェクト :
%Intl.RelativeTimeFormat.prototype% である。
通常のオブジェクト である。
Intl.RelativeTimeFormat インスタンスではなく、[[InitializedRelativeTimeFormat]]
内部スロットや Intl.RelativeTimeFormat インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
18.3.1 Intl.RelativeTimeFormat.prototype.constructor
Intl.RelativeTimeFormat.prototype.constructor の初期値は %Intl.RelativeTimeFormat%
である。
18.3.2 Intl.RelativeTimeFormat.prototype.resolvedOptions ( )
この関数は、オブジェクトの初期化時に計算されたロケールとオプションへのアクセスを提供する。
relativeTimeFormat を this の値とする。
? RequireInternalSlot (relativeTimeFormat ,
[[InitializedRelativeTimeFormat]] ) を実行する。
options を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
表31
のヘッダー行を除く各行について、表の順序で次を行う:
p を現在の行の Property の値とする。
v を、現在の行の Internal Slot の値という名前を持つ relativeTimeFormat
の内部スロットの値とする。
Assert :
v は undefined ではない。
! CreateDataPropertyOrThrow (options ,
p , v ) を実行する。
options を返す。
表31: RelativeTimeFormat インスタンスの解決済みオプション
内部スロット
プロパティ
[[Locale]]
"locale"
[[Style]]
"style"
[[Numeric]]
"numeric"
[[NumberingSystem]]
"numberingSystem"
18.3.3 Intl.RelativeTimeFormat.prototype.format ( value ,
unit )
format メソッドが引数 value と unit で呼び出されたとき、次の手順を行う:
relativeTimeFormat を this の値とする。
? RequireInternalSlot (relativeTimeFormat ,
[[InitializedRelativeTimeFormat]] ) を実行する。
value を ? ToNumber (value )
に設定する。
unit を ? ToString (unit )
に設定する。
? FormatRelativeTime (relativeTimeFormat ,
value , unit ) を返す。
18.3.4 Intl.RelativeTimeFormat.prototype.formatToParts (
value , unit )
formatToParts メソッドが引数 value と unit で呼び出されたとき、次の手順を行う:
relativeTimeFormat を this の値とする。
? RequireInternalSlot (relativeTimeFormat ,
[[InitializedRelativeTimeFormat]] ) を実行する。
value を ? ToNumber (value )
に設定する。
unit を ? ToString (unit )
に設定する。
? FormatRelativeTimeToParts (relativeTimeFormat ,
value , unit ) を返す。
18.3.5 Intl.RelativeTimeFormat.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は文字列値 "Intl.RelativeTimeFormat" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
18.4 Intl.RelativeTimeFormat インスタンスのプロパティ
Intl.RelativeTimeFormat インスタンスは 通常のオブジェクト であり、%Intl.RelativeTimeFormat.prototype%
からプロパティを継承する。
Intl.RelativeTimeFormat インスタンスは [[InitializedRelativeTimeFormat]]
内部スロットを持つ。
Intl.RelativeTimeFormat インスタンスはまた、Intl.RelativeTimeFormat
コンストラクタ によって計算されるいくつかの内部スロットも持つ:
[[Locale]] は、書式設定に用いられるロケールの String
値(その 言語タグ )である。
[[LocaleData]] は、実装が書式設定に使用できるデータを表す Record
である。これは、%Intl.RelativeTimeFormat% .[[LocaleData]] のエントリの値で、[[Locale]]
の値またはその接頭辞に対応する。
[[Style]] は、使用される相対時刻フォーマットスタイルを識別する
"long" 、"short" 、"narrow" のいずれかの String
値である。
[[Numeric]] は、より具体的な表現が利用できない場合にのみ数値表現を使用するか(例:"yesterday" ではなく "1 day
ago")、常に使用するかを識別する "always" または "auto" のいずれかの String 値である。
[[NumberFormat]] は、書式化に使用される Intl.NumberFormat オブジェクトである。
[[NumberingSystem]] は、書式化に使用される Unicode Number System
Identifier を表す String
値である。
[[PluralRules]] は、書式化に使用される Intl.PluralRules オブジェクトである。
18.5 RelativeTimeFormat オブジェクトの抽象操作
18.5.1 SingularRelativeTimeUnit ( unit )
抽象操作 SingularRelativeTimeUnit は引数 unit (String)を取り、正常完了値 として
String を返すか、または throw
completion を返す。呼び出し時に次の手順を行う:
unit が "seconds" なら "second" を返す。
unit が "minutes" なら "minute" を返す。
unit が "hours" なら "hour" を返す。
unit が "days" なら "day" を返す。
unit が "weeks" なら "week" を返す。
unit が "months" なら "month" を返す。
unit が "quarters" なら
"quarter" を返す。
unit が "years" なら "year" を返す。
unit が
"second" 、"minute" 、"hour" 、"day" 、"week" 、"month" 、"quarter" 、"year"
のいずれでもないなら、RangeError 例外を投げる。
unit を返す。
18.5.2 PartitionRelativeTimePattern ( relativeTimeFormat ,
value , unit )
抽象操作 PartitionRelativeTimePattern は引数
relativeTimeFormat (Intl.RelativeTimeFormat)、value (Number)、unit (String)を取り、正常完了値 として
Record
の List (フィールド
[[Type]] (String)、[[Value]] (String)、[[Unit]] (String または empty )を持つ)を返すか、throw
completion を返す。返される List
は、有効ロケールおよび relativeTimeFormat の書式オプションに従って value を表現する。呼び出し時に次の手順を行う:
value が NaN 、+∞ 𝔽 、または
-∞ 𝔽 なら、RangeError 例外を投げる。
unit を ? SingularRelativeTimeUnit (unit )
に設定する。
fields を relativeTimeFormat .[[LocaleData]] に設定する。
patterns を fields .[[<unit >]] に設定する。
style を relativeTimeFormat .[[Style]]
に設定する。
style が "short" または "narrow" なら、
key を unit 、"-" 、style
の文字列連結 とする。
fields がフィールド [[<key >]] を持つなら、
patterns を fields .[[<key >]] に設定する。
relativeTimeFormat .[[Numeric]] が
"auto" なら、
valueString を ! ToString (value )
に設定する。
patterns がフィールド [[<valueString >]] を持つなら、
result を
patterns .[[<valueString >]] に設定する。
Record
{ [[Type]] : "literal" , [[Value]] : result , [[Unit]] : empty }
を含む List
を返す。
value が -0 𝔽 か、または value <
-0 𝔽 なら、
tl を "past" とする。
それ以外の場合、
tl を "future" とする。
po を patterns .[[<tl >]] とする。
fv を PartitionNumberPattern (relativeTimeFormat .[[NumberFormat]] , ℝ (value )) とする。
pr を ResolvePlural (relativeTimeFormat .[[PluralRules]] , value ).[[PluralCategory]] とする。
pattern を po .[[<pr >]] とする。
MakePartsList (pattern ,
unit , fv ) を返す。
18.5.3 MakePartsList ( pattern , unit ,
parts )
抽象操作 MakePartsList は、引数 pattern (パターン文字列 )、unit (String)、parts (書式化済み
Number を表す Record
の List )を取り、フィールド
[[Type]] (String)、[[Value]] (String)、[[Unit]] (String または empty )を持つ Record
の List
を返す。呼び出し時に次の手順を行う:
patternParts を PartitionPattern (pattern )
に設定する。
result を新しい空の List
に設定する。
patternParts の各 Record
{ [[Type]] , [[Value]] }
patternPart について、
patternPart .[[Type]] が
"literal" なら、
Record
{ [[Type]] : "literal" , [[Value]] : patternPart .[[Value]] , [[Unit]] :
empty } を result に追加する。
それ以外の場合、
Assert :
patternPart .[[Type]] は
"0" である。
parts の各 Record
{ [[Type]] , [[Value]] } part について、
Record
{ [[Type]] : part .[[Type]] , [[Value]] : part .[[Value]] , [[Unit]] : unit } を
result に追加する。
result を返す。
注
例:
MakePartsList ("AA{0}BB" ,
"hour" , « Record
{ [[Type]] : "integer" , [[Value]] : "15" } ») を返す。
これは次のような
Record
の
List
を返す:
«
{ [[Type]] : "literal" , [[Value]] : "AA" , [[Unit]] : empty },
{ [[Type]] : "integer" , [[Value]] : "15" , [[Unit]] : "hour" },
{ [[Type]] : "literal" , [[Value]] : "BB" , [[Unit]] : empty }
»
18.5.4 FormatRelativeTime ( relativeTimeFormat ,
value , unit )
抽象操作 FormatRelativeTime は引数
relativeTimeFormat (Intl.RelativeTimeFormat)、value (Number)、unit (String)を取り、正常完了値 として
String を返すか、throw
completion を返す。呼び出し時に次の手順を行う:
parts を ? PartitionRelativeTimePattern (relativeTimeFormat ,
value , unit ) に設定する。
result を空文字列に設定する。
parts の各 Record
{ [[Type]] , [[Value]] , [[Unit]] } part について、
result を result と part .[[Value]] の文字列連結 に設定する。
result を返す。
18.5.5 FormatRelativeTimeToParts ( relativeTimeFormat ,
value , unit )
抽象操作 FormatRelativeTimeToParts は引数
relativeTimeFormat (Intl.RelativeTimeFormat)、value (Number)、unit (String)を取り、正常完了値 として
Array を返すか、throw
completion を返す。呼び出し時に次の手順を行う:
parts を ? PartitionRelativeTimePattern (relativeTimeFormat ,
value , unit ) に設定する。
result を ! ArrayCreate (0)
に設定する。
n を 0 に設定する。
parts の各 Record
{ [[Type]] , [[Value]] , [[Unit]] } part について、
O を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
! CreateDataPropertyOrThrow (O ,
"type" , part .[[Type]] )
を実行する。
! CreateDataPropertyOrThrow (O ,
"value" , part .[[Value]] )
を実行する。
part .[[Unit]] が
empty でないなら、
! CreateDataPropertyOrThrow (O ,
"unit" , part .[[Unit]] ) を実行する。
! CreateDataPropertyOrThrow (result ,
! ToString (𝔽 (n )),
O ) を実行する。
n を 1 増やす。
result を返す。
19 Segmenter オブジェクト
19.1 Intl.Segmenter コンストラクタ
Intl.Segmenter コンストラクタ :
%Intl.Segmenter% である。
"Segmenter" プロパティの初期値は Intl オブジェクト である。
サービスコンストラクタ プロパティに共通の挙動は、Intl オブジェクト の 9.1
に規定される。
19.1.1 Intl.Segmenter ( [ locales [ , options
] ] )
Intl.Segmenter 関数が省略可能な引数 locales および options
とともに呼び出されたとき、次の手順を行う:
NewTarget が undefined なら、TypeError 例外を投げる。
internalSlotsList を « [[InitializedSegmenter]] ,
[[Locale]] , [[SegmenterGranularity]] »
に設定する。
segmenter を ? OrdinaryCreateFromConstructor (NewTarget,
"%Intl.Segmenter.prototype%" , internalSlotsList ) に設定する。
optionsResolution を ? ResolveOptions (%Intl.Segmenter% ,
%Intl.Segmenter% .[[LocaleData]] , locales , options ) に設定する。
options を optionsResolution .[[Options]]
に設定する。
r を optionsResolution .[[ResolvedLocale]]
に設定する。
segmenter .[[Locale]] を r .[[Locale]] に設定する。
granularity を ? GetOption (options ,
"granularity" , string , «
"grapheme" , "word" ,
"sentence" », "grapheme" ) に設定する。
segmenter .[[SegmenterGranularity]] を
granularity に設定する。
segmenter を返す。
19.2 Intl.Segmenter コンストラクタのプロパティ
Intl.Segmenter コンストラクタ :
19.2.1 Intl.Segmenter.prototype
Intl.Segmenter.prototype の値は %Intl.Segmenter.prototype%
である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : false } である。
19.2.2 Intl.Segmenter.supportedLocalesOf ( locales [ ,
options ] )
supportedLocalesOf メソッドが引数 locales および options
で呼び出されたとき、次の手順を行う:
availableLocales を %Intl.Segmenter% .[[AvailableLocales]] に設定する。
requestedLocales を ? CanonicalizeLocaleList (locales )
に設定する。
? FilterLocales (availableLocales ,
requestedLocales , options ) を返す。
19.2.3 内部スロット
[[AvailableLocales]] 内部スロットの値は 実装依存 であり、9.1
に記述された制約の範囲内である。
[[RelevantExtensionKeys]] 内部スロットの値は « » である。
[[ResolutionOptionDescriptors]] 内部スロットの値は « » である。
注
Intl.Segmenter には関連する拡張キーは存在しない。
[[LocaleData]] 内部スロットの値は 実装依存 であり、9.1
に記述された制約の範囲内である。
19.3 Intl.Segmenter プロトタイプオブジェクトのプロパティ
Intl.Segmenter プロトタイプオブジェクト :
%Intl.Segmenter.prototype% である。
通常のオブジェクト である。
Intl.Segmenter インスタンスではなく、[[InitializedSegmenter]] 内部スロットや
Intl.Segmenter インスタンスオブジェクトの他の内部スロットを持たない。
[[Prototype]] 内部スロットを持ち、その値は %Object.prototype%
である。
19.3.1 Intl.Segmenter.prototype.constructor
Intl.Segmenter.prototype.constructor の初期値は %Intl.Segmenter% である。
19.3.2 Intl.Segmenter.prototype.resolvedOptions ( )
この関数は、オブジェクトの初期化時に計算されたロケールとオプションへのアクセスを提供する。
segmenter を this の値とする。
? RequireInternalSlot (segmenter ,
[[InitializedSegmenter]] ) を実行する。
options を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
表32
の各行(ヘッダー行を除く)について、表の順序で次を行う:
p を現在の行の Property の値とする。
v を現在の行の Internal Slot の値という名前を持つ segmenter の内部スロットの値とする。
Assert :
v は undefined ではない。
! CreateDataPropertyOrThrow (options ,
p , v ) を実行する。
options を返す。
表32: Segmenter インスタンスの解決済みオプション
内部スロット
プロパティ
[[Locale]]
"locale"
[[SegmenterGranularity]]
"granularity"
19.3.3 Intl.Segmenter.prototype.segment ( string )
Intl.Segmenter.prototype.segment メソッドは、Intl.Segmenter インスタンス上で引数 string
とともに呼び出され、当該 Intl.Segmenter インスタンスのロケールとオプションを用いて、その文字列に対する Segments
インスタンス を作成する。次の手順を行う:
segmenter を this の値とする。
? RequireInternalSlot (segmenter ,
[[InitializedSegmenter]] ) を実行する。
string を ? ToString (string )
に設定する。
CreateSegmentsObject (segmenter ,
string ) を返す。
19.3.4 Intl.Segmenter.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は文字列値 "Intl.Segmenter" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
19.4 Intl.Segmenter インスタンスのプロパティ
Intl.Segmenter インスタンスは 通常のオブジェクト であり、%Intl.Segmenter.prototype%
からプロパティを継承する。
Intl.Segmenter インスタンスは [[InitializedSegmenter]] 内部スロットを持つ。
Intl.Segmenter インスタンスはまた、Intl.Segmenter
コンストラクタ によって計算される内部スロットも持つ:
[[Locale]] は、分割に用いられるロケールの String
値(その 言語タグ )である。
[[SegmenterGranularity]] は、分割するテキスト要素の種類を識別する
"grapheme" 、"word" 、"sentence" のいずれかの
String 値である。
19.5 Segments オブジェクト
Segments インスタンス は、特定の文字列の分割結果を表すオブジェクトであり、その作成元の Intl.Segmenter
インスタンスのロケールおよびオプションに従う。
19.5.1 CreateSegmentsObject ( segmenter ,
string )
抽象操作 CreateSegmentsObject は引数 segmenter (Intl.Segmenter)および
string (String)を受け取り、Segments インスタンス を返す。Segments
インスタンス は segmenter と string を参照する。呼び出し時に次の手順を行う:
internalSlotsList を « [[SegmentsSegmenter]] ,
[[SegmentsString]] » に設定する。
segments を OrdinaryObjectCreate (%IntlSegmentsPrototype% ,
internalSlotsList ) に設定する。
segments .[[SegmentsSegmenter]] を
segmenter に設定する。
segments .[[SegmentsString]] を
string に設定する。
segments を返す。
19.5.2 %IntlSegmentsPrototype% オブジェクト
%IntlSegmentsPrototype% オブジェクト:
19.5.2.1 %IntlSegmentsPrototype%.containing ( index )
containing メソッドは、Segments インスタンス 上で引数 index
とともに呼び出され、指定されたインデックスのコードユニットを含む文字列内のセグメントを記述する Segment Data オブジェクト
を、当該 Segments インスタンスの作成元 Intl.Segmenter インスタンスのロケールとオプションに従って返す。次の手順を行う:
segments を this の値とする。
? RequireInternalSlot (segments ,
[[SegmentsSegmenter]] ) を実行する。
segmenter を segments .[[SegmentsSegmenter]] に設定する。
string を segments .[[SegmentsString]]
に設定する。
len を string の長さに設定する。
n を ? ToIntegerOrInfinity (index )
に設定する。
n < 0 または n ≥ len
なら、undefined を返す。
startIndex を FindBoundary (segmenter ,
string , n , before ) に設定する。
endIndex を FindBoundary (segmenter ,
string , n , after ) に設定する。
CreateSegmentDataObject (segmenter ,
string , startIndex , endIndex ) を返す。
19.5.2.2 %IntlSegmentsPrototype% [ %Symbol.iterator% ] ( )
%Symbol.iterator% メソッドは、Segments インスタンス 上で呼び出され、その作成元
Intl.Segmenter インスタンスのロケールとオプションを用いて、当該文字列に対する Segment Iterator を作成する。次の手順を行う:
segments を this の値とする。
? RequireInternalSlot (segments ,
[[SegmentsSegmenter]] ) を実行する。
segmenter を segments .[[SegmentsSegmenter]] に設定する。
string を segments .[[SegmentsString]]
に設定する。
CreateSegmentIterator (segmenter ,
string ) を返す。
この関数の "name" プロパティの値は "[Symbol.iterator]" である。
19.5.3 Segments インスタンスのプロパティ
Segments インスタンスは 通常のオブジェクト であり、%IntlSegmentsPrototype%
からプロパティを継承する。
Segments インスタンスは、反復に用いられた作成元 Intl.Segmenter インスタンスを参照する [[SegmentsSegmenter]] 内部スロットを持つ。
Segments インスタンスは、セグメントを公開する対象の String 値を参照する [[SegmentsString]]
内部スロットを持つ。
19.6 Segment Iterator オブジェクト
Segment Iterator は、特定の文字列のセグメントに対する特定の反復を表すオブジェクトである。
19.6.1 CreateSegmentIterator ( segmenter ,
string )
抽象操作 CreateSegmentIterator は引数 segmenter (Intl.Segmenter)および
string (String)を受け取り、Segment Iterator を返す。Segment Iterator は
segmenter のロケールとオプションを用いて string を反復する。呼び出し時に次の手順を行う:
internalSlotsList を « [[IteratingSegmenter]] ,
[[IteratedString]] , [[IteratedStringNextSegmentCodeUnitIndex]] » に設定する。
iterator を OrdinaryObjectCreate (%IntlSegmentIteratorPrototype% ,
internalSlotsList ) に設定する。
iterator .[[IteratingSegmenter]] を
segmenter に設定する。
iterator .[[IteratedString]] を
string に設定する。
iterator .[[IteratedStringNextSegmentCodeUnitIndex]]
を 0 に設定する。
iterator を返す。
19.6.2 %IntlSegmentIteratorPrototype% オブジェクト
%IntlSegmentIteratorPrototype% オブジェクト:
19.6.2.1 %IntlSegmentIteratorPrototype%.next ( )
next メソッドは、Segment Iterator インスタンス上で呼び出され、1
セグメント先に進め、反復が完了したことを宣言するか新しいセグメントを記述する IteratorResult オブジェクトを返す。次の手順を行う:
iterator を this の値とする。
? RequireInternalSlot (iterator ,
[[IteratingSegmenter]] ) を実行する。
segmenter を iterator .[[IteratingSegmenter]] に設定する。
string を iterator .[[IteratedString]]
に設定する。
startIndex を iterator .[[IteratedStringNextSegmentCodeUnitIndex]] に設定する。
len を string の長さに設定する。
startIndex ≥ len なら、
CreateIteratorResultObject (undefined ,
true ) を返す。
endIndex を FindBoundary (segmenter ,
string , startIndex , after ) に設定する。
iterator .[[IteratedStringNextSegmentCodeUnitIndex]] を
endIndex に設定する。
segmentData を CreateSegmentDataObject (segmenter ,
string , startIndex , endIndex ) に設定する。
CreateIteratorResultObject (segmentData ,
false ) を返す。
19.6.2.2 %IntlSegmentIteratorPrototype% [ %Symbol.toStringTag% ]
%Symbol.toStringTag%
プロパティの初期値は文字列値 "Segmenter String Iterator" である。
このプロパティの属性は { [[Writable]] :
false , [[Enumerable]] : false ,
[[Configurable]] : true } である。
19.6.3 Segment Iterator インスタンスのプロパティ
Segment Iterator インスタンスは 通常のオブジェクト であり、%SegmentIteratorPrototype%
からプロパティを継承する。Segment Iterator インスタンスは、表33 に記述の内部スロットを持って初期化される。
表33: Segment Iterator
インスタンスの内部スロット
内部スロット
説明
[[IteratingSegmenter]]
反復に使用される Intl.Segmenter インスタンス。
[[IteratedString]]
反復対象の String 値。
[[IteratedStringNextSegmentCodeUnitIndex]]
次のセグメントの開始時点における、反復対象 String 値のコードユニットのインデックス。
19.7 Segment Data オブジェクト
Segment Data オブジェクト は、文字列からの特定のセグメントを表すオブジェクトである。
19.7.1 CreateSegmentDataObject ( segmenter ,
string , startIndex , endIndex )
抽象操作 CreateSegmentDataObject は引数
segmenter (Intl.Segmenter)、string (String)、startIndex (非負の
整数 )、endIndex (非負の
整数 )を受け取り、Segment
Data オブジェクト を返す。Segment Data オブジェクト
は、segmenter により決定される string 内の、インデックス startIndex と
endIndex により境界付けられるセグメントを記述する。呼び出し時に次の手順を行う:
len を string の長さに設定する。
Assert :
endIndex ≤ len 。
Assert :
startIndex < endIndex 。
result を OrdinaryObjectCreate (%Object.prototype% )
に設定する。
segment を string の substring (startIndex
から endIndex )に設定する。
! CreateDataPropertyOrThrow (result ,
"segment" , segment ) を実行する。
! CreateDataPropertyOrThrow (result ,
"index" , 𝔽 (startIndex ))
を実行する。
! CreateDataPropertyOrThrow (result ,
"input" , string ) を実行する。
granularity を segmenter .[[SegmenterGranularity]] に設定する。
granularity が "word" なら、
isWordLike を、ロケール segmenter .[[Locale]] に従って string 内の segment
が「語らしさ」を持つかどうかを示す Boolean 値に設定する。
! CreateDataPropertyOrThrow (result ,
"isWordLike" , isWordLike ) を実行する。
result を返す。
注
セグメントが「語らしい」かどうかは実装依存であり、実装はロケールに応じた調整を用いることが推奨される。一般に、空白および/または句読点のみから成るセグメント(ICU
[International Components for Unicode,
https://unicode-org.github.io/icu-docs/
参照] における "WORD_NONE" 境界で終端されるものなど)は「語らしい」とは見なされない。
19.8 Segmenter オブジェクトの抽象操作
19.8.1 FindBoundary ( segmenter , string ,
startIndex , direction )
抽象操作 FindBoundary は引数
segmenter (Intl.Segmenter)、string (String)、startIndex (非負の
整数 )、direction (before
または after )を受け取り、非負の 整数 を返す。指定された direction
に従って、segmenter のロケールとオプションに基づき、string 内の startIndex
のコードユニットからのセグメント境界を探索し、その直後のコードユニットのインデックスを返す。呼び出し時に次の手順を行う:
len を string の長さに設定する。
Assert :
startIndex < len 。
locale を segmenter .[[Locale]] に設定する。
granularity を segmenter .[[SegmenterGranularity]] に設定する。
direction が before なら、
ロケール locale とテキスト要素の粒度 granularity を用いて、string
の先頭から高々 startIndex 個のコードユニットで前置される最後のセグメント境界を検索する。
境界が見つかったら、string 内でそれに先行するコードユニットの個数を返す。
0 を返す。
Assert :
direction は after である。
ロケール locale とテキスト要素の粒度 granularity を用いて、インデックス
startIndex のコードユニットに続く最初のセグメント境界を string 中から検索する。
境界が見つかったら、string 内でそれに先行するコードユニットの個数を返す。
len を返す。
注
境界の決定は実装依存だが、一般的な既定アルゴリズムは
Unicode Standard Annex #29
に規定されている。実装においては、Common Locale Data Repository(
https://cldr.unicode.org )が提供するロケールに応じた調整を用いることが推奨される。
20 ECMAScript 言語仕様におけるロケール依存関数
ECMA-262
では、いくつかのロケールに依存する関数を記述している。本仕様を実装する ECMAScript 実装は、ここで記述されるとおりにこれらの関数を実装しなければならない。
注
本項のアルゴリズム内で作成される Collator、NumberFormat、DateTimeFormat オブジェクトは、これらのアルゴリズム内でのみ使用される。これらは ECMAScript
コードから直接アクセスされることはなく、実装内で実際に存在している必要もない。
20.1 String プロトタイプオブジェクトのプロパティ
20.1.1 String.prototype.localeCompare ( that [ ,
locales [ , options ] ] )
この定義は、ECMA-262 の
22.1.3.12
で提供される定義に優先する。
localeCompare メソッドが引数 that と省略可能な引数 locales 、options
で呼び出されたとき、次の手順を行う:
O を ? RequireObjectCoercible (this
value) に設定する。
S を ? ToString (O )
に設定する。
thatValue を ? ToString (that )
に設定する。
collator を ? Construct (%Intl.Collator% , «
locales , options ») に設定する。
CompareStrings (collator ,
S , thatValue ) を返す。
この関数の "length" プロパティは 1 𝔽 である。
注 1
localeCompare メソッド自体は Array.prototype.sort
の引数として直接使用するのに適していない。後者は 2 つの引数を取る関数を要求するためである。
注 2
localeCompare 関数は意図的にジェネリックであり、その this 値が String
オブジェクトであることを要求しない。したがって、メソッドとして使用するために他の種類のオブジェクトへ転用できる。
20.1.2 String.prototype.toLocaleLowerCase ( [ locales ] )
この定義は、ECMA-262 の
22.1.3.26
で提供される定義に優先する。
この関数は、ECMA-262 の
6.1.4
に記述されるとおり、String 値をコードポイントの列として解釈する。次の手順を行う:
O を ? RequireObjectCoercible (this
value) に設定する。
S を ? ToString (O )
に設定する。
? TransformCase (S ,
locales , lower ) を返す。
注
toLocaleLowerCase 関数は意図的にジェネリックであり、その this 値が String
オブジェクトであることを要求しない。したがって、メソッドとして使用するために他の種類のオブジェクトへ転用できる。
20.1.2.1 TransformCase ( S , locales ,
targetCase )
抽象操作 TransformCase は、引数 S (String)、locales (ECMAScript
言語値 )、targetCase (lower または
upper )を受け取る。S を、ECMA-262 の 6.1.4
に記述されるとおり UTF-16 エンコードされたコードポイントの列として解釈し、ILD による
targetCase への変換結果を新たな String 値として返す。呼び出し時に次の手順を行う:
requestedLocales を ? CanonicalizeLocaleList (locales )
に設定する。
requestedLocales が空でない List
なら、
requestedLocale を requestedLocales [0] に設定する。
それ以外の場合、
requestedLocale を DefaultLocale () に設定する。
availableLocales を、Unicode Character Database が言語依存の大文字小文字変換を含む 言語タグ を含む 使用可能ロケールのリスト
とする。実装が追加のロケール依存変換をサポートする場合、availableLocales にはそれらに対応する 言語タグ も含めるべきである。
match を LookupMatchingLocaleByPrefix (availableLocales ,
« requestedLocale ») に設定する。
match が undefined でないなら locale を
match .[[locale]] とし、そうでなければ locale を
"und" とする。
codePoints を StringToCodePoints (S )
に設定する。
targetCase が lower なら、
newCodePoints を、locale を用いる実装由来のアルゴリズムまたは Unicode
既定の大文字小文字変換アルゴリズムに従って codePoints に小文字変換を施した結果の要素からなる List
とする。
それ以外の場合、
Assert :
targetCase は upper である。
newCodePoints を、locale を用いる実装由来のアルゴリズムまたは Unicode
既定の大文字小文字変換アルゴリズムに従って codePoints に大文字変換を施した結果の要素からなる List
とする。
CodePointsToString (newCodePoints )
を返す。
コードポイントの対応は、Unicode 標準の既定の大文字小文字変換アルゴリズムの調整版に従って導出してよい。実装は、Unicode Character Database の SpecialCasing.txt
や
CLDR、その他の独自調整で定義されたロケール依存の調整を使用してよい。いかなる調整を行う場合でも、適合する実装の大文字小文字変換アルゴリズムは、同じ入力コードポイント・ロケール・ターゲット大小で常に同一の結果を生成しなければならない。
注
一部のコードポイントの大小変換は複数のコードポイントを生成することがあり、結果の長さは入力と同一とは限らない。また、toLocaleUpperCase
と toLocaleLowerCase
は文脈依存の挙動を持つため、これらの関数は対称ではない。言い換えると、s.toLocaleUpperCase().toLocaleLowerCase()
は必ずしも s.toLocaleLowerCase()
と等しくならず、s.toLocaleLowerCase().toLocaleUpperCase() は必ずしも
s.toLocaleUpperCase() と等しくならない。
20.1.3 String.prototype.toLocaleUpperCase ( [ locales ] )
この定義は、ECMA-262 の
22.1.3.27
で提供される定義に優先する。
この関数は、ECMA-262 の
6.1.4
に記述されるとおり、String 値をコードポイントの列として解釈する。次の手順を行う:
O を ? RequireObjectCoercible (this
value) に設定する。
S を ? ToString (O )
に設定する。
? TransformCase (S ,
locales , upper ) を返す。
注
toLocaleUpperCase 関数は意図的にジェネリックであり、その this 値が String
オブジェクトであることを要求しない。したがって、メソッドとして使用するために他の種類のオブジェクトへ転用できる。
20.2 Number プロトタイプオブジェクトのプロパティ
以下の定義は、ECMA-262 の
21.1.3
で定義される抽象操作 thisNumberValue を参照する。
20.2.1 Number.prototype.toLocaleString ( [ locales [ ,
options ] ] )
この定義は、ECMA-262 の
21.1.3.4
で提供される定義に優先する。
toLocaleString メソッドが省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
x を ? ThisNumberValue (this
value) に設定する。
numberFormat を ? Construct (%Intl.NumberFormat% , «
locales , options ») に設定する。
FormatNumeric (numberFormat , !
ToIntlMathematicalValue (x ))
を返す。
20.3 BigInt プロトタイプオブジェクトのプロパティ
以下の定義は、ECMA-262 の
21.2.3
で定義される抽象操作 thisBigIntValue を参照する。
20.3.1 BigInt.prototype.toLocaleString ( [ locales [ ,
options ] ] )
この定義は、ECMA-262 の
21.2.3.2
で提供される定義に優先する。
toLocaleString メソッドが省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
x を ? ThisBigIntValue (this
value) に設定する。
numberFormat を ? Construct (%Intl.NumberFormat% , «
locales , options ») に設定する。
FormatNumeric (numberFormat ,
ℝ (x ))
を返す。
20.4 Date プロトタイプオブジェクトのプロパティ
以下の定義は、ECMA-262 の
21.4.4
で定義される抽象操作 thisTimeValue を参照する。
20.4.1 Date.prototype.toLocaleString ( [ locales [ ,
options ] ] )
この定義は、ECMA-262 の
21.4.4.39
で提供される定義に優先する。
toLocaleString メソッドが省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
dateObject を this の値とする。
? RequireInternalSlot (dateObject ,
[[DateValue]] ) を実行する。
x を dateObject .[[DateValue]] に設定する。
x が NaN なら、"Invalid Date" を返す。
dateFormat を ? CreateDateTimeFormat (%Intl.DateTimeFormat% ,
locales , options , any ,
all ) に設定する。
! FormatDateTime (dateFormat ,
x ) を返す。
20.4.2 Date.prototype.toLocaleDateString ( [ locales [ ,
options ] ] )
この定義は、Date.prototype.toLocaleDateString
( [ reserved1 [ , reserved2 ] ] ) で提供される定義に優先する。
toLocaleDateString メソッドが省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
dateObject を this の値とする。
? RequireInternalSlot (dateObject ,
[[DateValue]] ) を実行する。
x を dateObject .[[DateValue]] に設定する。
x が NaN なら、"Invalid Date" を返す。
dateFormat を ? CreateDateTimeFormat (%Intl.DateTimeFormat% ,
locales , options , date ,
date ) に設定する。
! FormatDateTime (dateFormat ,
x ) を返す。
20.4.3 Date.prototype.toLocaleTimeString ( [ locales [ ,
options ] ] )
この定義は、Date.prototype.toLocaleTimeString
( [ reserved1 [ , reserved2 ] ] ) で提供される定義に優先する。
toLocaleTimeString メソッドが省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
dateObject を this の値とする。
? RequireInternalSlot (dateObject ,
[[DateValue]] ) を実行する。
x を dateObject .[[DateValue]] に設定する。
x が NaN なら、"Invalid Date" を返す。
timeFormat を ? CreateDateTimeFormat (%Intl.DateTimeFormat% ,
locales , options , time ,
time ) に設定する。
! FormatDateTime (timeFormat ,
x ) を返す。
20.5 Array プロトタイプオブジェクトのプロパティ
20.5.1 Array.prototype.toLocaleString ( [ locales [ ,
options ] ] )
この定義は、Array.prototype.toLocaleString
( [ reserved1 [ , reserved2 ] ] ) で提供される定義に優先する。
toLocaleString メソッドが省略可能な引数 locales と options
で呼び出されたとき、次の手順を行う:
array を ? ToObject (this
value) に設定する。
len を ? LengthOfArrayLike (array )
に設定する。
separator を、ホスト環境 の現在のロケールに適切な(たとえば
", " のような)実装依存 のリスト区切り文字列値に設定する。
R を空文字列に設定する。
k を 0 に設定する。
k < len の間、繰り返す、
k > 0 なら、
R を R と separator の文字列連結 に設定する。
nextElement を ? Get (array ,
! ToString (𝔽 (k )))
に設定する。
nextElement が undefined または
null でないなら、
S を ? ToString (?
Invoke (nextElement ,
"toLocaleString" , « locales ,
options »)) に設定する。
R を R と S の文字列連結 に設定する。
k を k + 1 に設定する。
R を返す。
注 1
このアルゴリズムの手順は、
Array.prototype.toLocaleString
( [ reserved1 [ , reserved2 ] ] )
の手順を反映しているが、
Invoke (
nextElement ,
"toLocaleString" ) が
locales と
options
を引数として取る点が異なる。
注 2
配列の各要素はその
toLocaleString メソッドを用いて String に変換され、これらの String は、
ホスト環境 の現在のロケールの慣習に対応する、
実装依存 のロケール依存区切り文字列で区切られて連結される。この関数は
toString に類似するが、ロケールに応じた結果を生成することを意図している。
注 3
toLocaleString 関数は意図的にジェネリックであり、その this 値が Array
オブジェクトであることを要求しない。したがって、メソッドとして使用するために他の種類のオブジェクトへ転用できる。
Annex A (informative) 実装依存の挙動
本仕様の以下の側面は実装依存である:
すべての機能において:
Collator において:
Unicode 拡張キー "kf" 、"kn" と、それに対応するオプションプロパティ
"caseFirst" 、"numeric" のサポート(10.1.1 )
既定の照合順序に加え、ロケールごとにサポートされる "co" キー値(照合)の集合(10.2.3 )
ロケールごとにサポートされる "kf" キー値(大文字/小文字の順序)の集合(10.2.3 )
ロケールごとにサポートされる "kn" キー値(数値の照合)の集合(10.2.3 )
ロケールごとの既定の search sensitivity(10.2.3 )
ロケールごとの既定の句読点無視設定(10.2.3 )
各サポート対象ロケールとオプションの組合せにおけるソート順 (10.3.3.1 )
DateTimeFormat において:
BestFitFormatMatcher
アルゴリズム(11.1.2 )
ロケールごとにサポートされる "ca" キー値(暦)の集合(11.2.3 )
ロケールごとにサポートされる "nu" キー値(数字体系)の集合(11.2.3 )
ロケールごとの既定の hourCycle 設定(11.2.3 )
コアセットを超える、ロケールごとにサポートされる日付時刻の書式群(各構成要素に用いられる表現と対応パターンを含む)(11.2.3 )
ローカライズされた曜日名、紀元名、月名、午前/午後などの日の区分名、am/pm 指示、タイムゾーン名(11.5.5 )
"gregory" 以外の暦で用いられる暦計算(11.5.12 )
IANA タイムゾーンデータベースにおけるすべての登録済み Zone/Link 名と、それらの UTC からのオフセットおよび夏時間規則に関する情報(21.4.1.19 )
DisplayNames において:
DurationFormat において:
ロケールごとにサポートされる "nu" キー値(数字体系)の集合(13.2.3 )
デジタル書式設定(スタイル "numeric" における 2
桁の時の使用や、時・分・秒の数値区切りの使用)のロケールごとの構成(13.2.3 )
ListFormat において:
Locale において:
Unicode 拡張キー "kf" 、"kn" と、それに対応するオプションプロパティ
"caseFirst" 、"numeric" のサポート(15.1.1 )
NumberFormat において:
ロケールごとにサポートされる "nu" キー値(数字体系)の集合(16.2.3 )
符号の有無、通貨の会計書式の有無、標準/短縮/科学表記などを含め、値を小数・百分率・通貨・単位として整形するためのロケールごとのパターン(16.5.6 )
通貨値を整形する際に用いられる小数桁数(16.5.6 )
NaN と Infinity のローカライズされた表現(16.5.6 )
Table 28
に記載されていない数字体系の実装(16.5.6 )
ローカライズされた小数点記号および位取り区切り記号(16.5.6 )
ローカライズされた正負記号(16.5.6 )
ローカライズされた桁区切り方式(16.5.6 )
短縮表記におけるローカライズされた桁の閾値(16.5.6 )
短縮表記および科学表記におけるローカライズされた記号(16.5.6 )
ローカライズされた通貨の狭義/短/長の記号および名称(16.5.6 )
ローカライズされた単位の狭義/短/長の記号(16.5.6 )
PluralRules において:
RelativeTimeFormat において:
ロケールごとにサポートされる "nu" キー値(数字体系)の集合(18.2.3 )
値を整形するために用いられるパターン(18.2.3 )
Segmenter において:
Annex B (informative) 以前の版との非互換性を生じさせる追加と変更
Annex C (informative) 奥付
本仕様は GitHub 上で Ecmarkup と呼ばれるプレーンテキストのソース形式で執筆されている。Ecmarkup
は、プレーンテキストで ECMAScript 仕様を執筆し、本書の編集上の慣習に従った高機能な HTML レンダリングへ処理するためのフレームワークとツール群を提供する、HTML と Markdown
の方言である。Ecmarkup は、構文定義のための Grammarkdown 、およびアルゴリズム手順の執筆のための Ecmarkdown など、複数のフォーマットや技術の上に構築・統合されている。本仕様の PDF
版は、HTML レンダリングを PDF に印刷することで生成される。
本仕様の以前の版は Word によって執筆されていた。本版の基となった Ecmarkup ソーステキストは、ECMAScript 2015 の Word 文書を自動変換ツールで Ecmarkup
に変換することで作成された。
Copyright & Software License
Ecma International
Rue du Rhone 114
CH-1204 Geneva
Tel: +41 22 849 6000
Fax: +41 22 849 6001
Web: https://ecma-international.org/
Copyright Notice
© 2025 Ecma International
This draft document may be copied and furnished to others, and derivative works that comment on or
otherwise explain it or assist in its implementation may be prepared, copied, published, and
distributed, in whole or in part, without restriction of any kind, provided that the above copyright
notice and this section are included on all such copies and derivative works. However, this document
itself may not be modified in any way, including by removing the copyright notice or references to
Ecma International, except as needed for the purpose of developing any document or deliverable
produced by Ecma International.
This disclaimer is valid only prior to final version of this document. After approval all rights on
the standard are reserved by Ecma International.
The limited permissions are granted through the standardization phase and will not be revoked by Ecma
International or its successors or assigns during this time.
This document and the information contained herein is provided on an "AS IS" basis and ECMA
INTERNATIONAL DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY
WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY OWNERSHIP RIGHTS OR ANY
IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Software License
All Software contained in this document ("Software") is protected by copyright and is being made
available under the "BSD License", included below. This Software may be subject to third party rights
(rights from parties other than Ecma International), including patent rights, and no licenses under such
third party rights are granted under this license even if the third party concerned is a member of Ecma
International. SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS AVAILABLE AT https://ecma-international.org/memento/codeofconduct.htm
FOR INFORMATION REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO IMPLEMENT ECMA
INTERNATIONAL STANDARDS.
Redistribution and use in source and binary forms, with or without modification, are permitted provided
that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and
the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions
and the following disclaimer in the documentation and/or other materials provided with the
distribution.
Neither the name of the authors nor Ecma International may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.