Signatur
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
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!
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
Aktuelle Domain abfragen ohne Änderung
<?php
textdomain('messages');
// Domain nur abfragen, nicht ändern
$current = textdomain(null);
echo 'Aktive Domain: ' . $current . PHP_EOL;
// 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.