1. 導入:なぜこのAPIが重要なのか
Webサイトを多言語対応させる際、単に「英語」や「日本語」と判定するだけでは不十分な場合があります。例えば、「スイスドイツ語」や「ブラジルポルトガル語」のように、同じ言語でも地域や特定のバリエーションによって表現が異なるケースです。Intl.Locale APIを使えば、言語タグ(BCP 47)から詳細な情報を簡単に抽出できます。その中でも getVariant メソッドは、言語の「方言や特定のバリエーション」を取得するために非常に役立ちます。
2. 基礎知識:言語タグと「バリアント」とは
Web開発における言語指定(例: en-US, ja-JP)は「BCP 47」という規格に基づいています。
このタグは「言語コード-地域コード-バリアント」という構成になっています。
・言語コード(Language):en(英語)
・地域コード(Region):US(アメリカ)
・バリアント(Variant):特定の変種(例:スイスでのドイツ語表記における特別なルールなど)
この「バリアント」部分は、標準的な言語設定とは異なる、より細かな枝分かれを指します。getVariant メソッドは、この複雑な文字列の中から、バリアントの部分だけをスマートに抜き出してくれる便利なツールです。
3. 実装/解決策:Intl.Localeを使って情報を取得する
Intl.Locale オブジェクトを作成し、そのインスタンスに対して getVariant メソッドを呼び出すだけで取得可能です。もしバリアントが指定されていない場合は、戻り値として null が返されます。
4. サンプルプログラム
以下のコードをコピーして、ブラウザのコンソールなどで実行してみてください。
// 1. バリアントを含む言語タグを定義
// 'sl-IT-nedis' はイタリアのスロベニア語で、nedisというバリアントが含まれます
const locale = new Intl.Locale('sl-IT-u-va-nedis');
// 2. バリアントを取得して表示
const variant = locale.getVariant();
if (variant) {
console.log('取得したバリアントは: ' + variant);
} else {
console.log('バリアントは設定されていません');
}
// 別の例:バリアントがない場合
const simpleLocale = new Intl.Locale('ja-JP');
console.log('ja-JPのバリアント: ' + simpleLocale.getVariant()); // null が表示されます
5. 応用・注意点:現場での活用と落とし穴
注意点1:ブラウザの対応状況
このAPIはモダンブラウザ(Chrome, Firefox, Safari, Edgeの最新版)で動作しますが、非常に古いブラウザでは動作しない可能性があります。実務で使う場合は、Can I use などのサイトでサポート状況を確認し、必要に応じてポリフィルを検討してください。
注意点2:タグの正確性
getVariant が正しく動作するには、入力される言語タグがBCP 47形式として正当である必要があります。ユーザー入力などでタグを受け取る場合は、単純な文字列操作ではなく、Intl.Locale のコンストラクタを通すことで、不正な形式のチェックも同時に行えます。
現場での活用:
この機能は、特定の地域・コミュニティ向けのカスタマイズされたUIを表示したり、特定の言語バリエーションに基づいた日付・数値フォーマットを切り替える際の判断基準として非常に強力です。ぜひ、多言語対応サイトのロジック構築に役立ててください。