$locale = setlocale(LC_MESSAGES, 'de_DE.UTF-8');
$domain = textdomain('MyApp');
$fspec = bindtextdomain ('MyApp', 'share/locale');

echo _("Hello, world!");

Verzeichnisstruktur in share/locale:
de_DE/LC_MESSAGES/MyApp.mo
en_US/LC_MESSAGES/MyApp.mo
...
Damit das mit PHP als Apache Modul funktioniert muss man bei neuen Übersetzungen einen eindeutigen Domainnamen wählen (z.B. laufende Nummer anhängen).