Start · Sprachen · PHP · Referenz · dgettext

dgettext

Funktion

Sucht eine Übersetzung für <code>$message</code> in der angegebenen Gettext-Domain, ohne die aktuelle Standard-Domain zu ändern.

seit PHP 4.0.0 Kategorie: string

Signatur

dgettext(string $domain, string $message): string

Beschreibung

dgettext() ist Teil der GNU-Gettext-Bibliothek und ermöglicht es, eine Übersetzung aus einer anderen Domain abzurufen, als der aktuell mit textdomain() gesetzten Standarddomain. Die Funktion ist besonders nützlich, wenn eine Anwendung mehrere unabhängige Übersetzungskataloge (z. B. für verschiedene Module oder Bibliotheken) verwaltet und gezielt auf einen bestimmten Katalog zugreifen möchte, ohne den globalen Zustand zu verändern.

Die Domain entspricht dabei dem Dateinamen der .mo-Datei (ohne Dateiendung), die zuvor mit bindtextdomain() einem Verzeichnis zugeordnet wurde. Das Locale muss mit setlocale() gesetzt sein, damit Gettext die korrekte Sprachvariante laden kann.

Kann für den angegebenen $message-Schlüssel keine Übersetzung in der Domain gefunden werden, gibt die Funktion den originalen $message-String unverändert zurück. Dieses Fallback-Verhalten ist Teil des Gettext-Standards und stellt sicher, dass die Anwendung auch bei fehlenden Übersetzungen funktionsfähig bleibt.

  • Zum dauerhaften Wechsel der Domain: textdomain()
  • Zum Abrufen mit Plural-Unterstützung: dngettext()
  • Zum Abrufen mit Kategorie-Angabe: dcgettext()

Parameter

Name Typ Default Beschreibung
$domain Pflicht string Name der Gettext-Domain (entspricht dem Dateinamen der .mo-Datei ohne Endung), aus der die Übersetzung abgerufen werden soll.
$message Pflicht string Der zu übersetzende Originaltext (Message-ID), wie er im Gettext-Katalog als Schlüssel hinterlegt ist.

Rückgabewert

Typ
string
Beschreibung
Gibt die übersetzte Zeichenkette aus der angegebenen Domain zurück. Falls keine Übersetzung gefunden wird, wird der originale $message-String zurückgegeben.

Beispiele

Übersetzung aus einer spezifischen Domain abrufen

<?php
// Locale und Pfad konfigurieren
setlocale(LC_ALL, 'de_DE.UTF-8');

// Haupt-Domain der Anwendung
bindtextdomain('app', '/var/www/locales');
textdomain('app');

// Zusätzliche Domain für ein Plugin
bindtextdomain('myplugin', '/var/www/locales');

// Übersetzung aus der Standard-Domain
echo gettext('Welcome') . PHP_EOL;

// Übersetzung aus der Plugin-Domain, ohne die Standard-Domain zu ändern
echo dgettext('myplugin', 'Settings') . PHP_EOL;

// Standard-Domain ist nach wie vor 'app'
echo textdomain(null) . PHP_EOL; // Gibt 'app' aus
Willkommen Einstellungen app

Fallback auf den Originalstring bei fehlender Übersetzung

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

// Domain registrieren (angenommen, diese .mo-Datei existiert, enthält aber keinen Eintrag für 'Unknown key')
bindtextdomain('mymodule', '/var/www/locales');

$result = dgettext('mymodule', 'Unknown key');

// Kein Treffer → Originalstring wird zurückgegeben
echo $result . PHP_EOL;
Unknown key

// Wichtig · Fallstricke

Voraussetzungen: Die Gettext-Erweiterung muss in PHP aktiviert sein (--with-gettext bei der Kompilierung). Unter Linux sind außerdem die entsprechenden System-Locales installiert sein (z. B. de_DE.UTF-8 via locale-gen).

Fallstrick: Wenn setlocale() nicht aufgerufen wurde oder das angegebene Locale auf dem System nicht vorhanden ist, liefert dgettext() immer den Originalstring zurück, ohne eine Fehlermeldung auszugeben. Dies kann zu schwer auffindbaren Fehlern führen.

Caching: Gettext cached die geladenen .mo-Dateien im Prozess-Speicher. Änderungen an den Katalogdateien werden bei laufenden PHP-FPM- oder Apache-Prozessen erst nach einem Neustart des jeweiligen Prozesses wirksam.