Signatur
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
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;
}
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;
}
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.';
}
// 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.