Gibts dazu schon ein Issue? Sonst macht mal eins
Ankündigung
Einklappen
Keine Ankündigung bisher.
PHP Mailer 6 language file
Einklappen
Neue Werbung 2019
Einklappen
X
-
The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
-
Zitat von jspit Beitrag anzeigenBeim PHP Mailer 6 werden die language files wohl nur ohne eine zusätzliche Pfadangabe gefunden
PHP-Code:// To load the French version
$mail->setLanguage('fr', '/optional/path/to/language/directory/');
[SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]
- 1 Likes
Kommentar
-
Zitat von lottikarotti Beitrag anzeigenVerstehe ich das richtig, dass der zweite Parameter von setLanguage (=$lang_path) nicht berücksichtigt wird?
PHP-Code:if (empty($lang_path)) {
// Calculate an absolute path so it can work if CWD is not here
$lang_path = __DIR__ . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
}
//Validate $langcode
if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) {
$langcode = 'en';
}
$foundlang = true;
$lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php';
Competence-Center -> Enjoy the Informatrix
PHProcks! • Einsteiger freundliche Tutorials • PreComposed Packages
Kommentar
-
Zitat von Arne Drews Beitrag anzeigenDas $lang_file wird doch über den $lang_path definiert. Oder habe ich Dich falsch verstanden?
Das klingt für mich so, als versucht der TE language files aus einem eigenen Verzeichnis (statt dem PHPMailer-Verzeichnis) zu laden. Aber genau dafür ist doch der zweite Parameter von setLanguage gedacht?
Oder habe ich das Problem falsch verstanden?[SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]
Kommentar
-
Zitat von jspit Beitrag anzeigenBeim PHP Mailer 6 werden die language files wohl nur ohne eine zusätzliche Pfadangabe gefunden
wenn folgende Verzeichnisstruktur vorliegt: ...
Mit (richtiger) Pfadangabe im 2.Parameter gibt es keine Probleme. Das betrifft wohl auch die Masse der Anwendungen, welche die Spracheinstellungen dann auch ganz anderen Verzeichnis speichern.
Wird der 2.Parameter (der Pfad) weggelassen sollten die internen Files geladen werden. Das erfolgt eben nicht, wenn die Struktur welche Composer liefert 1:1 übernommen wird.
Intern wird aktuell in einem Verzeichnis language unterhalb von src gesucht. Eine kleine Änderung im Quelltext würde die Kompatibilität mit der Composerstruktur auch für diesen Fall wiederherstellen.
Wird diese Verzeichnisstruktur wie #1 gezeigt gewählt , gibt es auch kein Problem.
Edit:
Zitat von hausl Beitrag anzeigenGibts dazu schon ein Issue?
Für mich war dies mehr ein Verständnisproblem als ein Bug im PHP-Mailer, will sagen kann damit leben, s. #8.
tomBuilder
Zitat von tomBuilder Beitrag anzeigenWiso denn in die src von PHPMailer ?
Wiso nicht
PHP-Code:namespace foo/Wrappers/PHPMailer
Kommentar
-
Zitat von jspit Beitrag anzeigenWird der 2.Parameter (der Pfad) weggelassen sollten die internen Files geladen werden. Das erfolgt eben nicht, wenn die Struktur welche Composer liefert 1:1 übernommen wird.
Zitat von jspit Beitrag anzeigenIntern wird aktuell in einem Verzeichnis language unterhalb von src gesucht. Eine kleine Änderung im Quelltext würde die Kompatibilität mit der Composerstruktur auch für diesen Fall wiederherstellen.
Zitat von jspit Beitrag anzeigenDie Bemerkung verstehe ich nicht.[SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]
Kommentar
-
Das Problem ist, dass bei Verwendung von setLanguage() ohne Pfadangabe relativ vom PHPMailer.php Verzeichnis ausgegangen wird, was sich in src befindet.
Das Verzeichnis language befindet sich aber nicht unterhalb von src, sondern im selben parent scope, also auf gleicher Ebene. Der Pfad für ein leer angegebenen Pfad dürfte meiner Meinung nach also nicht passen.
Korrekt müsste es - wenn man die Verzeichnisse des PHPMailer nicht manuell anpasst/verschiebt - imho so sein:
PHP-Code:if ( empty($lang_path) ) {
$lang_path = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
}
Competence-Center -> Enjoy the Informatrix
PHProcks! • Einsteiger freundliche Tutorials • PreComposed Packages
Kommentar
-
Zitat von Arne Drews Beitrag anzeigenDas Problem ist, dass bei Verwendung von setLanguage() ohne Pfadangabe relativ vom PHPMailer.php Verzeichnis ausgegangen wird, was sich in src befindet.
Das Verzeichnis language befindet sich aber nicht unterhalb von src, sondern im selben parent scope, also auf gleicher Ebene. Der Pfad für ein leer angegebenen Pfad dürfte meiner Meinung nach also nicht passen.
Korrekt müsste es - wenn man die Verzeichnisse des PHPMailer nicht manuell anpasst/verschiebt - imho so sein:
PHP-Code:if ( empty($lang_path) ) {
$lang_path = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
}
PHPMailer sucht in phpmailer/src/language aber das Verzeichnis befindet sich eigentlich unter phpmailer/language. Wer macht einen PR?[SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]
Kommentar
-
lottikarotti
Womöglich habe ich da auch noch Verständnisprobleme da ich nicht bzw. wenig mit Composer und dessen Autoloader gar nicht arbeite (Hab einen eigenen) und deshalb die diesbezüglichen Restriktionen/Gepflogenheiten nicht kenne.
Deshalb noch mal von vorn. Wenn ich mir per Composer das Paket PHPMailer hole, dann habe ich folgende Struktur (Das da drüber fehlt)
Code:+ PHPmailer + src PHPMailer.php, .. + language phpmailer.lang-de.php, ..
Wenn ja, dann liegt language sozusagen auf gleicher Höhe wie src. Wenn ich nun
PHP-Code:$mail = new PHPMailer\PHPMailer\PHPMailer;
$languageOk = $mail->setLanguage('de');
var_dump($languageOk); //bool false
PHP-Code:if (empty($lang_path)) {
// Calculate an absolute path so it can work if CWD is not here
$lang_path = __DIR__ . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
}
Frage 2: Liege ich hier richtig?
Zitat von lottikarotti Beitrag anzeigenDu als Nutzer sollst sowieso nicht im vendor-Verzeichnis herumfummeln.
:
Deine Lösung erfordert eine Änderung im vendor-Verzeichnis. Dafür ist es dieses Verzeichnis aber gar nicht gedacht. Deshalb solltest du deine Ableitung innerhalb von deinem Projekt in einem eigenen Namespace platzieren (bspw. unterhalb von /myproject/src).
Edit: z.T. schon geklärt, kommt davon wenn man zwischendurch Mittag macht..
Kommentar
-
Zitat von jspitFrage 1: Ist das so?
Zitat von jspitFrage 2: Liege ich hier richtig?
Competence-Center -> Enjoy the Informatrix
PHProcks! • Einsteiger freundliche Tutorials • PreComposed Packages
Kommentar
-
Zitat von Arne Drews Beitrag anzeigenIch nutze composer auch nicht, aber ich hoffe mal, dass der die Quellen nicht anders aufbaut, als die die online verfügbar sind?!
Von den Dateien übernehme ich dann nur die welche ich wirklich benötige und packe das in eine Struktur nach meinen Geschmack.
Kommentar
-
Ich übernehme das auch immer nur ab der Ebene, wie Du es in #25 gezeigt hast. Du hast aber glaube ich recht, dass da noch eine Ebene PHPMailer drüber liegt.
Allerdings ist das aus meiner Sicht irrelevant für das Problem, denn __DIR__ wird relativ von PHPMailer.php aufgerufen. Auf welcher Ebene das am Ende steht, ist vollkommen irrelevant. Für den per default generierten Pfad wäre immer noch ein ../ erforderlich.Competence-Center -> Enjoy the Informatrix
PHProcks! • Einsteiger freundliche Tutorials • PreComposed Packages
Kommentar
-
Nochmal zur Erweiterungsklasse:
Den Ansatz wie von mir #15 realisiert kann man komplett vergessen, wenn die Klasse in einen anderen Verzeichnis liegen soll/muss ohne Bezug zum Verzeichnis in dem PHPMailer.php liegt.
Dann kann ich gleich der Methode setLanguage() einen absoluten Pfad als 2.Parameter mitgeben. Total blöd..
Kommentar
-
Zitat von Arne Drews Beitrag anzeigenIch nutze composer auch nicht, aber ich hoffe mal, dass der die Quellen nicht anders aufbaut, als die die online verfügbar sind?![SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]
Kommentar
Kommentar