Signatur
Beschreibung
Die Methode maximize() ergänzt eine unvollständige Sprachkennung mit Hilfe des Add Likely Subtags-Algorithmus aus Unicode UTS #35 (CLDR-Daten) um die fehlenden Teile. Aus "de" wird zum Beispiel "de-Latn-DE", aus "zh-TW" wird "zh-Hant-TW" und aus "und-Cyrl" wird "ru-Cyrl-RU".
Das ist praktisch, wenn Sie Sprachkennungen normalisieren oder vergleichen wollen, etwa um herauszufinden, ob "sr" und "sr-Cyrl-RS" dasselbe meinen. Auch bei der Wahl einer Schriftart hilft es: Anhand des ergänzten Schriftsystems (script) erkennen Sie, ob Text in lateinischer, kyrillischer oder traditioneller chinesischer Schrift angezeigt wird.
Das ursprüngliche Objekt bleibt unverändert, denn Intl.Locale-Instanzen sind unveränderlich. Unicode-Erweiterungen wie -u-ca-gregory oder -u-hc-h23 werden unverändert übernommen. Nur Sprache, Schriftsystem und Region werden ergänzt. Das Gegenstück ist minimize(): Es entfernt Teile, die sich wieder herleiten lassen.
Rückgabewert
Intl.Locale-Instanz, bei der Sprache, Schriftsystem und Region ergänzt sind. Vorhandene Unicode-Erweiterungen bleiben erhalten.Beispiele
Unvollständige Kennungen ergänzen
const tags = ['de', 'en', 'zh-TW', 'und-Cyrl', 'sr'];
for (const tag of tags) {
const max = new Intl.Locale(tag).maximize();
console.log(`${tag} → ${max.baseName}`);
}
Erweiterungen bleiben erhalten
const locale = new Intl.Locale('ja', { calendar: 'japanese', hourCycle: 'h23' });
const max = locale.maximize();
console.log(locale.toString());
console.log(max.toString());
console.log(max.script, max.region);
Zwei Sprachkennungen auf Gleichwertigkeit prüfen
const sameLocale = (a, b) =>
new Intl.Locale(a).maximize().baseName ===
new Intl.Locale(b).maximize().baseName;
console.log(sameLocale('de', 'de-DE')); // true
console.log(sameLocale('zh-TW', 'zh-Hant')); // true
console.log(sameLocale('de', 'de-AT')); // false
Schriftart anhand des Schriftsystems wählen
const fontFor = (tag) => {
const { script } = new Intl.Locale(tag).maximize();
const fonts = {
Latn: 'Inter, sans-serif',
Cyrl: 'Roboto, sans-serif',
Hant: '"Noto Sans TC", sans-serif',
Hans: '"Noto Sans SC", sans-serif',
Arab: '"Noto Naskh Arabic", serif'
};
return fonts[script] ?? 'system-ui';
};
console.log(fontFor(navigator.language ?? 'de'));
console.log(fontFor('zh-HK'));
// Wichtig · Fallstricke
- Neues Objekt:
maximize()ändert die ursprüngliche Instanz nicht. Sie müssen den Rückgabewert verwenden. - Nur eine Schätzung: Die ergänzten Werte sind die wahrscheinlichsten laut CLDR, nicht zwingend die richtigen für den Nutzer.
"en"wird zum Beispiel immer zu"en-Latn-US", auch wenn der Nutzer in Großbritannien sitzt. Verwenden Sie die ergänzte Region daher nicht als Standortangabe. - Abhängig von der Engine: Das Ergebnis hängt von der CLDR-Version ab, die die JavaScript-Engine mitbringt. Bei seltenen Sprachen kann es sich zwischen Browsern oder Node.js-Versionen unterscheiden. Ist eine Sprache unbekannt, bleibt die Kennung eventuell teilweise unvollständig.
- Zum Vergleichen
baseNamenutzen:toString()enthält auch die Unicode-Erweiterungen (-u-…).baseNameliefert nur Sprache, Schriftsystem und Region. - Kompatibilität: Wird von Chrome 74+, Firefox 75+, Safari 14+ und Node.js 12+ unterstützt. Node.js-Builds mit
small-icuhatten früher nur eingeschränkte Lokalisierungsdaten.