PHPMailer in WordPress - warum fehlen Übersetzungen ?
codestyling | 07. Februar 2009 | 02:02
Im Normalfall bekommt niemand mit, dass der in WordPress verwendete PHPMailer ein paar Probleme hat, wenn es um Fehlermeldungen geht, wenn alles läuft.
Aber genau dann, wenn es einen Fehler gibt und man dem Benutzer wenigstens einen verständlichen Satz präsentieren sollte, sieht man eine eher kryptische Ausgabe wie: Language string failed to load: connect_host.
Wo sind denn da die Übersetzungen geblieben? Ist vielleicht die WordPress Sprachdatei nicht vollständig?
Diesmal ist WordPress nicht “schuldig”, hätte es aber besser machen können. PHPMailer ist ein LGPL Projekt, das über SourceForge gehostet und gepflegt wird. Hier ein Ausschnitt aus dem Quelltext zwecks Autorenschaft:
| Author: Andy Prevost (project admininistrator) |
| Author: Brent R. Matzelle (original founder) |
| Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved. |
| Copyright (c) 2001-2003, Brent R. Matzelle |
Diese PHP Klasse, die sich um das Versenden von E-Mails kümmert, hat ihre ganz eigene Herangehensweise an Fehlermeldungen. Während man von WordPress her kennt, dass man alles per Sprachdatei übersetzen kann (können sollte), ist der Mailer nur mittels einer weiteren PHP Datei dazu in der Lage. Leider liegt diese WordPress nicht bei und zu allem Überfluss sucht der Mailer diese auch noch in einem Unterordner, der nicht existiert:
/** * Sets the language for all class error messages. Returns false * if it cannot load the language file. The default language type * is English. * @param string $lang_type Type of language (e.g. Portuguese: "br") * @param string $lang_path Path to the language file directory * @access public * @return bool */ function SetLanguage($lang_type, $lang_path = 'language/') { if(file_exists($lang_path.'phpmailer.lang-'.$lang_type.'.php')) { include($lang_path.'phpmailer.lang-'.$lang_type.'.php'); } elseif (file_exists($lang_path.'phpmailer.lang-en.php')) { include($lang_path.'phpmailer.lang-en.php'); } else { $this->SetError('Could not load language file'); return false; } $this->language = $PHPMAILER_LANG; return true; }
So wie der Mailer aber in WordPress integriert wurde, gibt es nur die folgende Möglichkeit, dieses hinzubekommen ohne Core Code zu ändern oder ein Plugin dafür schreiben zu müssen:
Es muss ein neuer Ordner direkt unter wp-includes angelegt werden und sollte so aussehen: wp-includes/language.
In diesen Ordner muss eine Datei Namens: phpmailer.lang-en.php angelegt werden. Auch für andere Sprachen ist das leider ein und dieselbe Datei, wenn man ohne Code-Änderungen auskommen will.
Das heißt aber auch, dass es dann nur in einer Sprache angezeigt werden kann: diejenige, die in der Datei vorkommt.
Der Inhalt der Datei sieht so aus, kann ebenfalls bei SourceForge runtergeladen werden:
<?php
/**
* PHPMailer language file.
* German Version
* Thanks to Yann-Patrick Schlame for the latest update!
*/
$PHPMAILER_LANG = array();
$PHPMAILER_LANG["provide_address"] = 'Bitte geben Sie mindestens eine ' .
'Empfänger Emailadresse an.';
$PHPMAILER_LANG["mailer_not_supported"] = ' mailer wird nicht unterstützt.';
$PHPMAILER_LANG["execute"] = 'Konnte folgenden Befehl nicht ausführen: ';
$PHPMAILER_LANG["instantiate"] = 'Mail Funktion konnte nicht initialisiert werden.';
$PHPMAILER_LANG["authenticate"] = 'SMTP Fehler: Authentifizierung fehlgeschlagen.';
$PHPMAILER_LANG["from_failed"] = 'Die folgende Absenderadresse ist nicht korrekt: ';
$PHPMAILER_LANG["recipients_failed"] = 'SMTP Fehler: Die folgenden ' .
'Empfänger sind nicht korrekt: ';
$PHPMAILER_LANG["data_not_accepted"] = 'SMTP Fehler: Daten werden nicht akzeptiert.';
$PHPMAILER_LANG["connect_host"] = 'SMTP Fehler: Konnte keine Verbindung zum SMTP-Host herstellen.';
$PHPMAILER_LANG["file_access"] = 'Zugriff auf folgende Datei fehlgeschlagen: ';
$PHPMAILER_LANG["file_open"] = 'Datei Fehler: konnte folgende Datei nicht öffnen: ';
$PHPMAILER_LANG["encoding"] = 'Unbekanntes Encoding-Format: ';
$PHPMAILER_LANG["signing"] = 'Fehler beim Signieren: ';
?>
Wenn diese Datei vom Mailer in dem oben genannten Ordner gefunden und geladen wird, dann stehen auch die Fehlermeldungen bei Versenden von E-Mails in der Sprache zur Verfügung, die man bevorzugt.
Natürlich gibt es auch einen Weg, diese Sprachanpassung per Plugin und dabei sogar multi-lingual zu machen. Wenn echtes Interesse daran besteht und ich Anfragen dazu bekommen sollte, werde ich noch das entsprechende Plugin nachlegen. Jedoch wird man auf einem funktionierenden System vermutlich nie eine dieser Meldungen jemals zu Gesicht bekommen.





