Start · Sprachen · PHP · Referenz · resourcebundle_get

resourcebundle_get

Funktion

Liefert einen Wert aus einem <code>ResourceBundle</code> anhand eines Schlüssels oder Index.

seit PHP 5.3.2 Kategorie: string

Signatur

resourcebundle_get(ResourceBundle $bundle, string|int $index, bool $fallback = true): mixed

Beschreibung

resourcebundle_get() ist die prozedurale Variante von ResourceBundle::get() und gibt einen einzelnen Wert aus einem ICU-Resource-Bundle zurück. Resource Bundles ermöglichen die Lokalisierung von Anwendungen, indem sie sprachspezifische Daten (Strings, Arrays, Integer usw.) in strukturierten Dateien speichern.

Als $index kann entweder ein String-Schlüssel (für benannte Ressourcen) oder ein Integer-Index (für Tabellen und Arrays) übergeben werden. Der Rückgabetyp hängt dabei vom gespeicherten Ressourcentyp ab: einfache Strings werden als string, verschachtelte Tabellen als ResourceBundle-Objekt und Integer-Werte als int zurückgeliefert.

Der Parameter $fallback steuert, ob bei einem fehlenden Schlüssel in der angefragten Locale automatisch auf die übergeordnete oder Standard-Locale zurückgefallen werden soll. Ist er false, wird null zurückgegeben, wenn der Schlüssel in der exakten Locale nicht existiert.

Diese Funktion ist besonders nützlich in Internationalisierungs-Szenarien (i18n), in denen Texte, Datumsformate oder andere locale-spezifische Daten aus ICU-Bundle-Dateien geladen werden sollen, ohne auf externe Übersetzungs-Bibliotheken angewiesen zu sein.

Parameter

Name Typ Default Beschreibung
$bundle Pflicht ResourceBundle Ein ResourceBundle-Objekt, das zuvor mit ResourceBundle::create() oder resourcebundle_create() erzeugt wurde.
$index Pflicht string|int Der Schlüssel (String) oder der numerische Index (Integer), unter dem der gewünschte Wert im Bundle gespeichert ist.
$fallback bool true Gibt an, ob bei fehlendem Schlüssel ein Fallback auf die übergeordnete Locale stattfinden soll. Bei false wird strikt nur in der angegebenen Locale gesucht.

Rückgabewert

Typ
mixed
Beschreibung
Gibt den Wert unter dem angegebenen Schlüssel zurück. Der Typ hängt vom Bundle-Inhalt ab: string, int, ResourceBundle (für verschachtelte Tabellen) oder null, wenn der Schlüssel nicht existiert. Im Fehlerfall wird ebenfalls null zurückgegeben und ein Fehlercode ist über resourcebundle_get_error_code() abrufbar.

Beispiele

Einfachen String aus einem Resource Bundle lesen

<?php
// Bundle für die Locale 'de' laden (Pfad zu den .res-Dateien)
$bundle = resourcebundle_create('de', '/usr/share/icu/data');

if ($bundle === null) {
    echo 'Bundle konnte nicht geladen werden.';
} else {
    // Schlüssel 'greeting' aus dem Bundle abrufen
    $greeting = resourcebundle_get($bundle, 'greeting');
    echo $greeting;
}
Hallo, Welt!

Fallback-Verhalten bei fehlenden Schlüsseln demonstrieren

<?php
// Bundle für 'de_AT' laden; Fallback auf 'de' erlaubt (Standard)
$bundleWithFallback = resourcebundle_create('de_AT', '/usr/share/icu/data');
$valueWithFallback = resourcebundle_get($bundleWithFallback, 'appName', true);
echo 'Mit Fallback: ' . $valueWithFallback . PHP_EOL;

// Gleiches Bundle, aber ohne Fallback
$bundleNoFallback = resourcebundle_create('de_AT', '/usr/share/icu/data');
$valueNoFallback = resourcebundle_get($bundleNoFallback, 'appName', false);
if ($valueNoFallback === null) {
    echo 'Ohne Fallback: Schlüssel nicht in de_AT vorhanden.' . PHP_EOL;
} else {
    echo 'Ohne Fallback: ' . $valueNoFallback . PHP_EOL;
}
Mit Fallback: MeineApp Ohne Fallback: Schlüssel nicht in de_AT vorhanden.

Verschachtelte Tabelle (Sub-Bundle) auslesen

<?php
$bundle = resourcebundle_create('de', '/usr/share/icu/data');

// 'months' könnte eine verschachtelte Tabelle sein
$months = resourcebundle_get($bundle, 'months');

if ($months instanceof ResourceBundle) {
    foreach ($months as $key => $value) {
        echo $key . ': ' . $value . PHP_EOL;
    }
} else {
    echo 'Eintrag ist kein Sub-Bundle.';
}
0: Januar 1: Februar ...

// Wichtig · Fallstricke

Fehlerbehandlung: Gibt null zurück, wenn der Schlüssel nicht gefunden wurde oder ein Fehler auftrat. Den genauen Fehlercode erhält man mit resourcebundle_get_error_code($bundle) und die Fehlermeldung mit resourcebundle_get_error_message($bundle).

ICU-Abhängigkeit: Die Verfügbarkeit und das Verhalten dieser Funktion hängen von der installierten ICU-Version ab. Unterschiedliche ICU-Versionen können unterschiedliche Bundle-Strukturen oder Schlüsselnamen verwenden.

OOP-Äquivalent: Die objektorientierte Alternative ist ResourceBundle::get($index, $fallback) – beide sind funktional identisch. In modernem PHP-Code wird die OOP-Variante bevorzugt.