Start · Sprachen · PHP · Referenz · resourcebundle_create

resourcebundle_create

Funktion

Erstellt ein <code>ResourceBundle</code>-Objekt aus einem ICU-Ressourcenpaket für die angegebene Locale.

seit PHP 5.3.2 Kategorie: string

Signatur

resourcebundle_create(string|null $locale, string|null $bundle, bool $fallback = true): ResourceBundle|null

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

Typ
ResourceBundle|null
Beschreibung
Gibt ein 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';
}
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!"
}
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;
    }
}
Eintrag nicht in de_AT vorhanden (kein Fallback aktiv).

// 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_ATde → 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().