グローバルなオーディエンスにリーチする Web アプリケーションは、言語、地域、スクリプト、通貨の表示名をさまざまな言語で表示する必要があります。これらの名前の翻訳には、Unicode CLDR で入手可能なデータが必要です。データをアプリケーションの一部としてパッケージ化すると、開発者の時間にコストがかかります。ユーザーは言語名と地域名の一貫した翻訳を好む可能性が高く、そのデータを世界の地政学的出来事に合わせて最新の状態に保つには、継続的なメンテナンスが必要です。
幸いなことに、ほとんどの JavaScript ランタイムは、まさにその翻訳データをすでに提供しており、最新の状態に保っています。新しい Intl.DisplayNames
API により、JavaScript 開発者はこれらの翻訳に直接アクセスできるようになり、アプリケーションはローカライズされた名前をより簡単に表示できるようになります。
使用例 #
次の例は、ISO-3166 2 文字の国コードを使用して、英語で地域名を取得するための Intl.DisplayNames
オブジェクトを作成する方法を示しています。
const regionNames = new Intl.DisplayNames(['en'], { type: 'region' });
regionNames.of('US');
// → 'United States'
regionNames.of('BA');
// → 'Bosnia & Herzegovina'
regionNames.of('MM');
// → 'Myanmar (Burma)'
次の例では、Unicode の言語識別子文法を使用して、繁体字中国語で言語名を取得しています。
const languageNames = new Intl.DisplayNames(['zh-Hant'], { type: 'language' });
languageNames.of('fr');
// → '法文'
languageNames.of('zh');
// → '中文'
languageNames.of('de');
// → '德文'
次の例では、ISO-4217 3 文字の通貨コードを使用して、簡体字中国語で通貨名を取得しています。単数形と複数形が異なる言語では、通貨名は単数形です。複数形の場合は、Intl.NumberFormat
を使用できます。
const currencyNames = new Intl.DisplayNames(['zh-Hans'], {type: 'currency'});
currencyNames.of('USD');
// → '美元'
currencyNames.of('EUR');
// → '欧元'
currencyNames.of('JPY');
// → '日元'
currencyNames.of('CNY');
// → '人民币'
次の例は、ISO-15924 4 文字のスクリプトコードを使用して、英語で最後にサポートされているタイプであるスクリプトを示しています。
const scriptNames = new Intl.DisplayNames(['en'], { type: 'script' });
scriptNames.of('Latn');
// → 'Latin'
scriptNames.of('Arab');
// → 'Arabic'
scriptNames.of('Kana');
// → 'Katakana'
より高度な使用法については、2 番目の options
パラメーターは style
プロパティもサポートします。style
プロパティは表示名の幅に対応し、"long"
、"short"
、または "narrow"
のいずれかになります。異なるスタイルの値が常に異なるとは限りません。デフォルトは "long"
です。
const longLanguageNames = new Intl.DisplayNames(['en'], { type: 'language' });
longLanguageNames.of('en-US');
// → 'American English'
const shortLanguageNames = new Intl.DisplayNames(['en'], { type: 'language', style: 'short' });
shortLanguageNames.of('en-US');
// → 'US English'
const narrowLanguageNames = new Intl.DisplayNames(['en'], { type: 'language', style: 'narrow' });
narrowLanguageNames.of('en-US');
// → 'US English'
完全な API #
Intl.DisplayNames
の完全な API は次のとおりです。
Intl.DisplayNames(locales, options)
Intl.DisplayNames.prototype.of( code )
コンストラクターは、他の Intl
API と一貫性があります。最初の引数は、ロケールリストであり、2 番目のパラメーターは、localeMatcher
、type
、および style
プロパティを受け取る options
パラメーターです。
"localeMatcher"
プロパティは、他の Intl
API と同じように扱われます。type
プロパティは、"region"
、"language"
、"currency"
、または "script"
にすることができます。style
プロパティは、"long"
、"short"
、または "narrow"
にすることができ、デフォルトは "long"
です。
Intl.DisplayNames.prototype.of( code )
は、インスタンスがどのように構築されたかの type
に応じて、次の形式を想定しています。
type
が"region"
の場合、code
は、ISO-3166 2 文字の国コードまたは UN M49 3 桁の地域コードのいずれかである必要があります。type
が"language"
の場合、code
は Unicode の言語識別子文法に準拠する必要があります。type
が"currency"
の場合、code
は ISO-4217 3 文字の通貨コードである必要があります。type
が"script"
の場合、code
は ISO-15924 4 文字のスクリプトコードである必要があります。
結論 #
他の Intl
API と同様に、Intl.DisplayNames
がより広く利用可能になるにつれて、ライブラリとアプリケーションは、ネイティブ機能を使用することを優先して、独自の翻訳データのパッケージ化と提供をやめることを選択するでしょう。