Sven Rautenberg: Multilingual

Beitrag lesen

Moin!

Wie man sieht, geschieht das aber nicht mit define() sondern language_device().

Hier diese Funktion:

function language_device($con, $val){
  if(!defined("LANG_".$con)) define("LANG_".$con, $val);
}

  
Das ist schlecht. Du definierst Konstanten. Konstanten in PHP sind relativ langsam. Definierst du viele Konstanten, wirkt sich das u.U. aus.  
  
Abgesehen davon hast du keine Möglichkeit, alle benutzten Textstrings zu sammeln, sondern du musst immer eine Konstante definieren, bevor du sie am Ziel auch verwenden kannst.  
  

> Der Witz ist, dass ich so "Deutsch" laden kann und zur Sicherheit noch "Englisch". Sozusagen als Fallback, falls ich vergessen habe in deutsch entsprechende Bausteine zu definieren.  
  
Die Vorgehensweise beispielsweise beim Multi-Language-Plugin von Wordpress ist sowas:  
  
echo \_t("This is the english output string!);  
  
\_t() ist die Translate-Funktion, die in ihrem Speicher nachsieht, welcher Übersetzungstext der aktuellen Sprache für diesen String hinterlegt ist.  
  
Daraus entstehen mehrere Vorteile:  
  
1\. Die Funktion kann alle Strings im laufenden Betrieb einsammeln und bislang unbekannte Strings auf die Liste zu übersetzender Ausgaben setzen.  
2\. Weiterhin steht im Quellcode der tatsächlich auszugebende Text in einer menschenlesbaren Sprache. Man sieht also, was an dieser Stelle ausgegeben werden soll - und nicht nur ungefähr.  
3\. Außerdem ist als Fallback der englische Text vollständig bekannt und kann als Ersatz ausgegeben werden, wenn keine Übersetzung gefunden wurde.  
4\. Als Deluxe-Variante kann man natürlich auch den gesamten Quelltext parsen, alle Aufrufe der Übersetzungsfunktion finden, die darin übergebenen Texte herausnehmen und in die Liste zu übersetzender Texte tun.  
  

> `echo LANG_youarehere." <a href='index.php'>".LANG_welcomepage."</a>";`{:.language-php} etc.  
>   
> Gefällts?  
  
Nö.  
  
 - Sven Rautenberg