Ich glaube nicht, daß ich Dir so ganz folgen kann an dieser Stelle. Ist es nicht einfacher, ich habe einen Seitenaufruf:
beispiel.php?lang=deutsch
Dann steht ganz vorne$lang=$_GET["lang"];
danninclude("locale/$lang.php");
und im Inhalt dann schließlich:
<p><? echo "{$loc_lang["im_warenkorb_befinden_sich_1"]} $preis {$loc_lang["im_warenkorb_befinden_sich_2"]}"; ?></p>
Diese Vorgehensweise beinhaltet einige Probleme:
* Die Sätze sind zerstückelt - schlecht für den Übersetzer
* Die Reihenfolge der variablen Inhalte ist für den Übersetzer nicht änderbar
* Bei fehlender Übersetzung wird kein Text angezeigt
* Für dich wird es schwer, Code anhand der Ausgabe zu finden
* Du musst irgendwie sicherstellen, dass gleiche Keys nicht mehrfach verwendet werden bzw. nur, wenn die Bedeutung gleich ist.
* der Text wird nicht escaped - ok, das machst du evtl. an anderer Stelle…
Mit Deiner Methode, so scheint mir jedenfalls, ist ein nicht ganz unerheblicher Programmieraufwand verbunden, oder versteh ich hier irgendwas falsch?
Der Aufwand ist nicht wirklich größer. Du brauchst halt eine Übersetzungs-Funktion (die in ähnlicher Form z.B. im Zend Framework bereits enthalten ist) und rufst diese dann an allen Stellen wo Text ausgeben werden soll auf. Zusätzlich zu dem, was ich aufgeschrieben hatte, muss diese noch an das Übersetzungs-Array kommen - dieses entspricht deinem $loc_lang und ist entweder irgendwie global verfügbar oder du packst die translate-Funktion ist ein Objekt und gibst diesem dein Array mit.
$loc_lang würde dann je nach Zielsprache z.B. so aussehen:
$loc_lang = array(
'Im Warenkorb befinden sich Waren für %1$s Euronen.' =>
'The basket of goods are for %1$s Euros',
'Noch ein anderer Text' =>
'Yet another text'
);
Man übergibt der function translate den gewünschten Text, Dann wird in einem Array, was wohl alle Sprachen beinhalten muß nach der Entsprechung gesucht und das ganze dann an echo geschickt. Korrigier mich, wenn ich da was vermurkse! :)
Das würde aber bedeuten, daß ich alle! Sprachen in einem Array haben muß, was bei 2 Sprachen vllt nicht so wild ist, aber bei vielen Sprachen ganz schön gigantisch werden dürfte.
Nein. Die translate-Funktion muss nur das Array für die Sprache kennen, die du ausgeben willst.