Start · Sprachen · JavaScript · Referenz · Intl.Locale.prototype.maximize()

Intl.Locale.prototype.maximize()

Methode

Gibt ein neues <code>Intl.Locale</code> zurück, bei dem fehlende Werte für Sprache, Schriftsystem und Region durch die wahrscheinlichsten Werte ergänzt werden.

seit JavaScript ES2020 (Intl.Locale); Baseline: alle modernen Brow Kategorie: method-property

Signatur

Intl.Locale.prototype.maximize()

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

Typ
Intl.Locale
Beschreibung
Eine neue 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}`);
}
de → de-Latn-DE en → en-Latn-US zh-TW → zh-Hant-TW und-Cyrl → ru-Cyrl-RU sr → sr-Cyrl-RS

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);
ja-u-ca-japanese-hc-h23 ja-Jpan-JP-u-ca-japanese-hc-h23 Jpan JP

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
true true 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'));
Inter, sans-serif "Noto Sans TC", sans-serif

// 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 baseName nutzen: toString() enthält auch die Unicode-Erweiterungen (-u-…). baseName liefert 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-icu hatten früher nur eingeschränkte Lokalisierungsdaten.