Signatur
Beschreibung
minimize() ist das Gegenstück zu maximize(). Die Methode wendet den CLDR-Algorithmus „Remove Likely Subtags“ an: Sie entfernt alle Teile aus Sprache, Schrift und Region, die sich aus den übrigen Angaben eindeutig ableiten lassen. Aus "en-Latn-US" wird so "en", weil Englisch standardmäßig in lateinischer Schrift und für die USA angenommen wird. Aus "zh-Hant-TW" wird dagegen "zh-TW", weil sich traditionelles Chinesisch aus der Region Taiwan ergibt.
Der Algorithmus maximiert die Locale zuerst und probiert dann nacheinander die kürzesten Kandidaten aus: nur die Sprache, dann Sprache und Region, dann Sprache und Schrift. Genommen wird der erste Kandidat, der nach erneutem Maximieren dasselbe Ergebnis liefert. Deshalb bleibt bei mehrdeutigen Fällen eher die Region erhalten als die Schrift.
Unicode-Erweiterungen wie Kalender (-u-ca-…), Stundenzyklus (-u-hc-…) oder Zahlensystem (-u-nu-…) werden nicht entfernt, sondern unverändert übernommen. Das ursprüngliche Objekt bleibt ebenfalls unverändert, denn Intl.Locale-Instanzen sind unveränderlich.
Typische Anwendungsfälle sind kurze, einheitliche Sprach-Tags zum Speichern (z. B. in Datenbanken, URLs oder Cookies), für die Anzeige und für den Abgleich mit Übersetzungsdateien, die nach der kürzesten Form benannt sind.
Rückgabewert
Intl.Locale-Instanz in minimierter Form. Unicode-Erweiterungen bleiben erhalten.Beispiele
Grundlegende Minimierung verschiedener Locales
const tags = ['en-Latn-US', 'de-Latn-DE', 'en-Latn-GB', 'zh-Hans-CN', 'zh-Hant-TW', 'sr-Cyrl-RS'];
for (const tag of tags) {
const minimal = new Intl.Locale(tag).minimize();
console.log(`${tag} → ${minimal.toString()}`);
}
Unicode-Erweiterungen bleiben erhalten
const locale = new Intl.Locale('fr-Latn-FR', {
calendar: 'gregory',
hourCycle: 'h12'
});
console.log(locale.toString());
console.log(locale.minimize().toString());
console.log(locale.minimize().hourCycle);
Browser-Sprache kompakt speichern und Übersetzung laden
// Übersetzungsdateien liegen unter der kürzesten Form vor: de.json, en-GB.json, zh-TW.json …
const verfuegbar = new Set(['de', 'en', 'en-GB', 'zh', 'zh-TW']);
const findeUebersetzung = (tag) => {
const kurz = new Intl.Locale(tag).minimize();
if (verfuegbar.has(kurz.baseName)) return kurz.baseName;
// Rückfall auf die reine Sprache
return verfuegbar.has(kurz.language) ? kurz.language : 'en';
};
console.log(findeUebersetzung('de-Latn-AT'));
console.log(findeUebersetzung('zh-Hant-TW'));
console.log(findeUebersetzung('en-GB'));
console.log(findeUebersetzung('ja-JP'));
Zwei Tags auf Gleichwertigkeit prüfen
const gleicheLocale = (a, b) =>
new Intl.Locale(a).minimize().toString() ===
new Intl.Locale(b).minimize().toString();
console.log(gleicheLocale('en', 'en-Latn-US'));
console.log(gleicheLocale('zh-TW', 'zh-Hant-TW'));
console.log(gleicheLocale('en-US', 'en-GB'));
// Wichtig · Fallstricke
- Abhängig von CLDR-Daten: Das Ergebnis richtet sich nach den „Likely Subtags“-Daten, die die jeweilige JavaScript-Engine mitbringt. Verschiedene Browser- oder Node.js-Versionen können daher in Grenzfällen unterschiedliche Ergebnisse liefern. Verlasse dich bei seltenen Sprachen nicht auf ein fest erwartetes Ergebnis.
- Kein Informationsverlust in der Bedeutung, aber in der Schreibweise:
minimize()entfernt nur Angaben, die sich wieder ableiten lassen. Wer den genauen Originaltag braucht (z. B."de-Latn-DE"für ein externes System), muss ihn separat aufbewahren. - Neues Objekt: Die Methode verändert die Instanz nicht. Das Ergebnis muss man einer Variablen zuweisen.
- Erweiterungen bleiben: Für einen Vergleich ohne Kalender, Zahlensystem usw. verwendest du
minimize().baseNamestatttoString(). - Ungültige Tags führen schon beim Konstruktor
new Intl.Locale()zu einemRangeError, nicht erst beiminimize(). - Kompatibilität: Verfügbar ab Chrome 74, Firefox 75, Safari 14 und Node.js 12 (dort nur mit vollständigen ICU-Daten, seit Node.js 13 Standard).