Signatur
Beschreibung
resourcebundle_create() ist die prozedurale Variante des ResourceBundle-Konstruktors. Sie lädt ein ICU-Ressourcenpaket (Resource Bundle) aus dem angegebenen Verzeichnis oder dem Standard-ICU-Datenverzeichnis und gibt ein Objekt zurück, über das einzelne Ressourcen wie Strings, Arrays oder Integer-Werte abgerufen werden können.
Resource Bundles werden typischerweise zur Internationalisierung (i18n) und Lokalisierung (l10n) von Anwendungen eingesetzt. Sie ermöglichen es, locale-abhängige Daten (z. B. Übersetzungen, Datumsformate, Zahlensymbole) zentral in .res-Dateien zu verwalten und per Locale gezielt zu laden.
Der Parameter fallback steuert, ob bei fehlenden Einträgen in der angeforderten Locale auf eine übergeordnete Locale (z. B. von de_AT auf de) oder die Root-Locale zurückgegriffen wird. Ist er false, schlägt der Zugriff auf fehlende Einträge hart fehl.
Die Funktion gibt null zurück, wenn das Bundle nicht geladen werden konnte. Über resourcebundle_get_error_code() und resourcebundle_get_error_message() lassen sich Fehlerdetails abfragen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locale Pflicht | string|null | Die Locale-Kennung (z. B. 'de_DE', 'en_US'), für die das Ressourcenpaket geladen werden soll. Bei null oder leerem String wird die Standard-Locale des Systems verwendet. |
|
| $bundle Pflicht | string|null | Pfad zum Verzeichnis, das die .res-Dateien enthält, oder null, um das Standard-ICU-Datenpaket zu nutzen. Der Dateiname ohne Erweiterung dient als Bundle-Name. |
|
| $fallback | bool | true | Gibt an, ob bei fehlenden Einträgen auf eine übergeordnete Locale oder die Root-Locale zurückgefallen werden soll. Bei false werden fehlende Einträge als Fehler behandelt. |
Rückgabewert
ResourceBundle-Objekt zurück, wenn das Bundle erfolgreich geladen wurde. Bei einem Fehler (z. B. Bundle nicht gefunden, ungültige Locale) wird null zurückgegeben.Beispiele
ICU-Standard-Bundle für eine Locale laden
<?php
// Lädt das Standard-ICU-Bundle für Deutsch (Deutschland)
$bundle = resourcebundle_create('de_DE', null);
if ($bundle === null) {
echo 'Bundle konnte nicht geladen werden.';
} else {
// Zugriff auf einen Eintrag im Bundle
// Gibt z. B. die Anzahl der Tage in der Woche aus (ICU-interne Daten)
echo 'Bundle geladen für: de_DE';
}
Eigenes Ressourcenpaket für Mehrsprachigkeit nutzen
<?php
// Eigene .res-Dateien liegen in /var/www/i18n/
// z. B. /var/www/i18n/messages_de.res und /var/www/i18n/messages_en.res
$locale = 'de_DE';
$bundle = resourcebundle_create($locale, '/var/www/i18n/messages', true);
if ($bundle === null) {
$errorCode = resourcebundle_get_error_code($bundle);
echo 'Fehler beim Laden des Bundles: ' . intl_error_name($errorCode);
} else {
// Einzelnen Übersetzungs-String abrufen
$greeting = $bundle->get('greeting');
echo $greeting; // z. B. "Hallo Welt!"
}
Fallback deaktivieren und Fehler abfangen
<?php
// Fallback deaktiviert: Nur exakte Locale-Einträge werden geliefert
$bundle = resourcebundle_create('de_AT', '/var/www/i18n/messages', false);
if ($bundle !== null) {
$value = $bundle->get('currency_symbol');
if ($value === null) {
echo 'Eintrag nicht in de_AT vorhanden (kein Fallback aktiv).';
} else {
echo $value;
}
}
// Wichtig · Fallstricke
Voraussetzung: Die PHP-Erweiterung intl muss installiert und aktiviert sein (via extension=intl in der php.ini).
Eigene Bundles: Eigene .res-Dateien müssen mit dem ICU-Tool genrb aus .txt-Quelldateien kompiliert werden. Rohe Textdateien können nicht direkt geladen werden.
Fallback-Verhalten: Mit fallback = true (Standard) folgt ICU der Locale-Hierarchie (de_AT → de → Root). Dies kann dazu führen, dass unerwartete Werte aus einer übergeordneten Locale geliefert werden — bei strikten Anforderungen daher false verwenden.
Fehlerbehandlung: Da null als Fehlerrückgabe dient, sollte der Rückgabewert immer geprüft werden. Details liefern intl_get_error_code() und intl_get_error_message().