`Intl.DisplayNames`
Webanwendungen, die ein globales Publikum erreichen, müssen die Anzeigennamen von Sprachen, Regionen, Schriften und Währungen in vielen verschiedenen Sprachen anzeigen. Die Übersetzungen dieser Namen erfordern Daten, die im Unicode CLDR verfügbar sind. Die Aufnahme dieser Daten in die Anwendung verursacht Kosten für die Entwickler. Nutzer bevorzugen wahrscheinlich konsistente Übersetzungen von Sprach- und Regionsnamen, und um diese Daten mit den geopolitischen Entwicklungen der Welt aktuell zu halten, ist eine kontinuierliche Wartung erforderlich.
Glücklicherweise liefern die meisten JavaScript-Laufzeiten bereits die entsprechenden Übersetzungsdaten und halten diese aktuell. Die neue Intl.DisplayNames API gibt JavaScript-Entwicklern direkten Zugriff auf diese Übersetzungen, sodass Anwendungen lokalisierte Namen einfacher anzeigen können.
Anwendungsbeispiele
Das folgende Beispiel zeigt, wie man ein Intl.DisplayNames-Objekt erstellt, um Regionsnamen auf Englisch unter Verwendung von ISO-3166 2-Buchstaben-Ländercodes zu erhalten.
const regionNames = new Intl.DisplayNames(['en'], { type: 'region' });
regionNames.of('US');
// → 'United States'
regionNames.of('BA');
// → 'Bosnia & Herzegovina'
regionNames.of('MM');
// → 'Myanmar (Burma)'
Das folgende Beispiel gibt Sprachennamen auf traditionellem Chinesisch unter Verwendung von Unicodes Sprachbezeichner-Grammatik aus.
const languageNames = new Intl.DisplayNames(['zh-Hant'], { type: 'language' });
languageNames.of('fr');
// → '法文'
languageNames.of('zh');
// → '中文'
languageNames.of('de');
// → '德文'
Das folgende Beispiel gibt Währungsnamen auf vereinfachtem Chinesisch unter Verwendung von ISO-4217 3-Buchstaben-Währungscodes aus. In Sprachen mit unterschiedlichen Singular- und Pluralformen sind die Währungsnamen im Singular. Für Pluralformen kann Intl.NumberFormat verwendet werden.
const currencyNames = new Intl.DisplayNames(['zh-Hans'], {type: 'currency'});
currencyNames.of('USD');
// → '美元'
currencyNames.of('EUR');
// → '欧元'
currencyNames.of('JPY');
// → '日元'
currencyNames.of('CNY');
// → '人民币'
Das folgende Beispiel zeigt den endgültig unterstützten Typ, Skripte, auf Englisch unter Verwendung von ISO-15924 4-Buchstaben-Schriftcodes.
const scriptNames = new Intl.DisplayNames(['en'], { type: 'script' });
scriptNames.of('Latn');
// → 'Latin'
scriptNames.of('Arab');
// → 'Arabic'
scriptNames.of('Kana');
// → 'Katakana'
Für eine fortgeschrittenere Nutzung unterstützt der zweite Parameter options auch die Eigenschaft style. Die Eigenschaft style entspricht der Breite des Anzeigenamens und kann entweder "long", "short" oder "narrow" sein. Die Werte für verschiedene Stile unterscheiden sich nicht immer. Der Standardwert ist "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'
Vollständige API
Die vollständige API für Intl.DisplayNames ist wie folgt.
Intl.DisplayNames(locales, options)
Intl.DisplayNames.prototype.of( code )
Der Konstruktor ist konsistent mit anderen Intl-APIs. Das erste Argument ist eine Liste von Sprachen, und der zweite Parameter ist ein options-Parameter, der die Eigenschaften localeMatcher, type und style enthält.
Die Eigenschaft "localeMatcher" wird wie bei anderen Intl-APIs behandelt. Die Eigenschaft type kann "region", "language", "currency" oder "script" sein. Die Eigenschaft style kann "long", "short" oder "narrow" sein, wobei "long" der Standardwert ist.
Intl.DisplayNames.prototype.of( code ) erwartet die folgenden Formate, je nachdem, wie die Instanz mit type konstruiert wurde.
- Wenn
type"region"ist, musscodeentweder ein ISO-3166 2-Buchstaben-Ländercode oder ein UN-M49 3-stelliger Regionscode sein. - Wenn
type"language"ist, musscodeder Sprachidentifikator-Grammatik von Unicode entsprechen. - Wenn
type"currency"ist, musscodeein ISO-4217 3-Buchstaben-Währungscode sein. - Wenn
type"script"ist, musscodeein ISO-15924 4-Buchstaben-Schriftcode sein.
Fazit
Wie andere Intl-APIs wird Intl.DisplayNames von Bibliotheken und Anwendungen bevorzugt, sobald es breiter verfügbar ist, und diese werden auf das Verpacken und Liefern eigener Übersetzungsdaten zugunsten der nativen Funktionalität verzichten.