Start · Sprachen · PHP · Referenz · textdomain

textdomain

Funktion

Setzt die Standarddomain für Gettext-Übersetzungen und gibt die aktuell aktive Domain zurück.

seit PHP 4.0.0 Kategorie: string

Signatur

textdomain(string|null $domain): string

Beschreibung

textdomain() legt die Standarddomain fest, die von den Gettext-Funktionen wie gettext() bzw. dem Alias _() verwendet wird, wenn kein Domain-Argument explizit angegeben wird. Die Domain entspricht dem Dateinamen (ohne Endung) der .mo-Übersetzungsdatei, die zuvor mit bindtextdomain() einem Verzeichnis zugeordnet wurde.

Typischerweise wird textdomain() einmalig beim Start der Anwendung aufgerufen, nachdem setlocale() und bindtextdomain() konfiguriert wurden. Bei mehrsprachigen Applikationen mit mehreren Modulen oder Bibliotheken kann die aktive Domain temporär auf eine andere Domain umgestellt und später wieder zurückgesetzt werden.

Wenn null als Argument übergeben wird, wird die Standarddomain nicht verändert – die Funktion gibt dann lediglich die aktuell aktive Domain zurück, ohne sie zu modifizieren.

Wichtig: Die Gettext-Erweiterung muss auf dem Server aktiviert sein, und die entsprechenden .mo-Dateien müssen im richtigen Verzeichnis liegen, damit Übersetzungen tatsächlich geladen werden.

Parameter

Name Typ Default Beschreibung
$domain Pflicht string|null Der Name der Gettext-Domain (ohne Dateiendung), der als neue Standarddomain gesetzt werden soll. Bei null wird die Domain nicht geändert und nur die aktuell aktive Domain zurückgegeben.

Rückgabewert

Typ
string
Beschreibung
Gibt den Namen der nun aktiven (oder bei null unverändert gebliebenen) Standarddomain zurück.

Beispiele

Grundlegende Einrichtung von Gettext mit textdomain

<?php
// Sprache festlegen
setlocale(LC_ALL, 'de_DE.UTF-8');

// Verzeichnis mit den .mo-Dateien zuordnen
// Erwartet z. B.: /var/www/locale/de_DE/LC_MESSAGES/messages.mo
bindtextdomain('messages', '/var/www/locale');
bind_textdomain_codeset('messages', 'UTF-8');

// Standarddomain setzen
$activeDomain = textdomain('messages');

echo $activeDomain . PHP_EOL; // messages

// Übersetzung abrufen (verwendet automatisch die Domain 'messages')
echo gettext('Hello, World!') . PHP_EOL; // z. B.: Hallo, Welt!
messages Hallo, Welt!

Domain temporär wechseln und zurücksetzen

<?php
setlocale(LC_ALL, 'de_DE.UTF-8');

bindtextdomain('main', '/var/www/locale');
bindtextdomain('plugin', '/var/www/locale');
bind_textdomain_codeset('main', 'UTF-8');
bind_textdomain_codeset('plugin', 'UTF-8');

// Hauptdomain aktivieren
textdomain('main');
echo _('Save') . PHP_EOL; // Übersetzung aus main.mo

// Vorherige Domain merken und Plugin-Domain aktivieren
$previousDomain = textdomain('plugin');
echo _('Plugin Settings') . PHP_EOL; // Übersetzung aus plugin.mo

// Zurück zur Hauptdomain
textdomain($previousDomain);
echo _('Cancel') . PHP_EOL; // Übersetzung wieder aus main.mo
Speichern Plugin-Einstellungen Abbrechen

Aktuelle Domain abfragen ohne Änderung

<?php
textdomain('messages');

// Domain nur abfragen, nicht ändern
$current = textdomain(null);
echo 'Aktive Domain: ' . $current . PHP_EOL;
Aktive Domain: messages

// Wichtig · Fallstricke

Hinweis zur Verfügbarkeit: Die Gettext-Erweiterung ist nicht in jeder PHP-Installation standardmäßig aktiviert. Prüfe mit function_exists('textdomain'), ob sie verfügbar ist, bevor du sie in portablem Code einsetzt.

Caching-Verhalten: Gettext cached Übersetzungsdateien oft auf Betriebssystemebene. Änderungen an .mo-Dateien zur Laufzeit werden unter Umständen nicht sofort wirksam, ohne den Webserver-Prozess neu zu starten.

Thread-Sicherheit: In Multithread-Umgebungen (z. B. Apache mit mpm_worker) kann das Setzen von setlocale() und textdomain() zu Race-Conditions führen, da diese Einstellungen prozessweit gelten. Hier empfiehlt sich die Verwendung von dgettext() mit expliziter Domain-Angabe als sichere Alternative.