Start · Sprachen · PHP · Referenz · locale_minimize_subtags

locale_minimize_subtags

Funktion

Entfernt wahrscheinliche Subtags (Sprache, Schrift, Region) aus einem Locale-Bezeichner und gibt die minimierte Form zurück.

seit PHP 5.3.0 Kategorie: string

Signatur

locale_minimize_subtags(string $locale): string|false

Beschreibung

locale_minimize_subtags() ist das Gegenstück zu locale_maximize_subtags(). Die Funktion nimmt einen vollständig qualifizierten Locale-Bezeichner und entfernt alle Subtags, die durch den Algorithmus Likely Subtags (Unicode CLDR) als implizit und damit redundant gelten.

Beispielsweise wird zh-Hans-CN zu zh minimiert, weil Schrift (Hans) und Region (CN) für Chinesisch bereits als wahrscheinlich bekannt sind. Dies ist nützlich, um Locale-Bezeichner zu normalisieren und Redundanzen zu entfernen, bevor sie gespeichert oder verglichen werden.

Die Funktion ist ein prozeduraler Alias der Methode Locale::minimizeSubtags() und folgt dem IETF-BCP-47-Standard. Sie arbeitet auf Basis der CLDR-Daten der installierten ICU-Bibliothek – das Ergebnis kann daher je nach ICU-Version leicht variieren.

Besonders praktisch ist der Einsatz in Mehrsprachigkeits-Systemen, bei denen Locale-Bezeichner effizient und redundanzfrei gespeichert werden sollen, etwa in Datenbanken oder Konfigurationsdateien.

Parameter

Name Typ Default Beschreibung
$locale Pflicht string Der Locale-Bezeichner im BCP-47-Format (z. B. zh-Hans-CN), aus dem wahrscheinliche Subtags entfernt werden sollen.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den minimierten Locale-Bezeichner als String zurück. Bei einem ungültigen oder nicht auflösbaren Locale-Wert wird false zurückgegeben.

Beispiele

Einfaches Minimieren eines Locale-Bezeichners

<?php
// Vollständig qualifizierter Locale-Bezeichner
$locale = 'zh-Hans-CN';

$minimized = locale_minimize_subtags($locale);

echo $minimized;
// Schrift und Region sind für zh implizit – beide werden entfernt
zh

Minimieren und anschließendes Maximieren im Vergleich

<?php
$locales = [
    'en-Latn-US',
    'de-Latn-DE',
    'sr-Cyrl-RS',
    'zh-Hans-CN',
];

foreach ($locales as $locale) {
    $minimized = locale_minimize_subtags($locale);
    $maximized = locale_maximize_subtags($minimized);

    printf(
        "Original: %-15s | Minimiert: %-10s | Wiederhergestellt: %s\n",
        $locale,
        $minimized,
        $maximized
    );
}
Original: en-Latn-US | Minimiert: en | Wiederhergestellt: en-Latn-US Original: de-Latn-DE | Minimiert: de | Wiederhergestellt: de-Latn-DE Original: sr-Cyrl-RS | Minimiert: sr-Cyrl | Wiederhergestellt: sr-Cyrl-RS Original: zh-Hans-CN | Minimiert: zh | Wiederhergestellt: zh-Hans-CN

Verwendung der OOP-Variante über die Locale-Klasse

<?php
// Äquivalent zur prozeduralen Variante
$locale = 'en-Latn-US';

$minimized = Locale::minimizeSubtags($locale);

echo $minimized;
en

// Wichtig · Fallstricke

ICU-Abhängigkeit: Das Ergebnis basiert auf den CLDR-Daten der installierten ICU-Bibliothek. Bei unterschiedlichen ICU-Versionen können die Ergebnisse für seltene Locales voneinander abweichen. Prüfe daher in produktionskritischen Systemen die ICU-Version mit INTL_ICU_VERSION.

Rückgabewert prüfen: Die Funktion gibt false zurück, wenn der Locale-Bezeichner nicht gültig ist. Der Rückgabewert sollte daher mit === false geprüft werden, da ein leerer String '' theoretisch ein gültiges Ergebnis sein könnte.

Kein Round-Trip garantiert: Minimieren und anschließendes Maximieren führt in der Regel zum ursprünglichen Bezeichner zurück, ist aber nicht in allen Randfällen garantiert.