Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Intlのここ数年とこれから

Avatar for Saji Saji
September 11, 2026

 Intlのここ数年とこれから

Avatar for Saji

Saji

September 11, 2026

More Decks by Saji

Other Decks in Technology

Transcript

  1. IntlのAPI概要 全てのコンストラクタプロパティはlocaleとOptionの2つを引数に取る • Locale : 使用するlocale。言語タグかLocaleオブジェクトで指定。 • 例 : “ja-JP”,

    “en-US” • Option : formatなどにおけるオプション。 • 例 : {calender : "japanese"} (使用する暦を和暦にする) コンストラクタを初期化する際にロケールとフォーマットなどのオプションを指 定するのがポイント
  2. 初版完成までの道のり 2010/09 Intlの元となる提案がTC39のMeetingでされる 2010/11 最初の国際化API Meetingが開催 2011/01 Strawman proposal v0.5が公開

    第2~5回の国際化Meeting (名前空間の統一・機能の削減・周辺仕様との調整 ..etc) 2011/07 2012年6月での仕様策定を目指すことになる 2011/10 最初のDraft Spec (この辺りである程度仕様を固める) Draft Specの改善作業・実装作業 (名前空間の名前変更・APIの修正 ..etc) fi 2012/08 最後のDraft Speci cation
  3. 1st Edition ~ 2023までの機能追加 + Intl.getCanonicalLocales() + formatRange() + Intl.ListFormat

    + DateTimeFormat option + Intl.Segmenter + NumberFormat option(v3) + Intl.DisplayNames … and more + Intl.PluralRules + Intl.RelativeTimeFormat + Intl.Locale + formatToParts()
  4. 3年後の答え合わせ • Intl Local Info API(Stage3) → ES2026で採用 🎉 •

    Intl.DurationFormat(Stage3) → ES2025で採用 🎉 • Temporal → ES2026のカットオフこそ逃したがES2027で入る 🎉 • Intl.MessageFormat(Stage1) → Intlはまだ / CLDRでは固まりつつある • Intl.Segmenter → もう少しでBaseline Widely Available になる
  5. Intl Locale Info Intl.Localeで取得できるロケール情報が増えた! • getWeekInfo : 週の情報(週始まり、週末の曜日、年の最初の週に必要な最小日数)を返す • getTextInfo

    : テキストの方向情報を返す • getCalendars : 一般的に使用されるすべての暦を、優先度の高い順に返す • getCollations : 文字の称号順序規則を返す • getHourCycles : 24時制 / 12時制どちらかなとを返す • getNumberingSystem : 一般的に使用されるすべての記数法を、優先度の高い順に返す • getTimeZones : 対応しているタイムゾーンを返す
  6. Intl.DurationFormat 時間の間隔表記をフォーマットできるようになった • 例) 1時間30分 / 1 hour 30 minutes

    new Intl.DurationFormat("fr-FR", { style: "long", }).format({ hours: 1, minutes: 46, seconds: 40, }); // => "1 heure, 46 minutes et 40 secondes"
  7. Intl.MessageFormat Proposal ICU MessageFormatを解釈し、フォーマットする機能の提案(推しProposal) • JS側(=Intl)としてはstage1のまま • が、Unicode側のMessageFormat v2の仕様はほぼ固まってきてる •

    CLDR-TC側でコア仕様は策定し、CLDR47でStableへ • 今後の進捗が楽しみですね! • c.f. Intl.MessageFormat 基礎 / MessageFormat v2 の記法をみてみよう
  8. Intl.Segmenter 文字列を文 / 単語 / 書記素で分割できる。 • 特に「書記素単位分割」が便利 • JSで「1文字」を判定するのはかなり面倒(異体字セレクタ

    / 結合文字/ZWJ) • Segmenterがあればいわゆる「1文字」ごとの分割が可能に 実はFireFoxの実装が遅れてv125(2024/04)でshipした → そろそろWidelyAvailableになる(=30ヶ月経つ)のでプロダクトでも使えそう
  9. 数と単位への強化 数値や単位にまつわる提案が多くされ検討されている • 数値・単位・精度をもつオブジェクトとして Amount が提案されてる • データ保持と基本的な変換をサポート & NumberFormatとの連携

    • 複合単位(3m50cmみたいなやつ)に関するFormatの検討 • NumberFormatやPluralRulesで末尾ゼロの保持・考慮をする • 内部処理で使われる数値のデータの有効桁数制限引き上げ
  10. W3Cとの連携 / HTML側との協調・overwrap 標準化プロセスで「W3C i18nレビュー」を義務化した • 提案をStage 3(または主要ステップ)へ進展させるための要件 HTMLの要素との連携 •

    <amount>要素とAmount / <time>要素でのローカライズ MessageFormatで書かれたメッセージの管理 • Message Resources という名前でW3Cで検討を始めている