Alexander (HH): Sprachverwaltungs-System für WebApp

Beitrag lesen

Moin Moin!

Wir machen das in der Firma etwas aufwaendiger mit einer Datenbank, und das klappt recht gut.

Unsere Tabelle sieht so aus:

iniKey | en     | de        | fr        | ...


cancel | Cancel | Abbrechen | Annuller  | ...


>   
> Diese Tabelle laesst sich mit phpMyAdmin gut warten und man vermeidet Probleme mit fehlerhaften/fehlenden Keys etc.  
  
  
Woher kenne ich das nur? ;-) Irgendwie endet man immer mehr oder weniger bei so einer Tabelle. Mein letztes mehrsprachiges Projekt hatte das etwas mehr durchnormalisiert, mit Spalten für Begriff, Sprache und übersetztem Begriff, aber das ist nur ein Detail. In exakt Deinem Format wurde das Zeug aus der DB in Excel exportiert, ins Übersetzngsbüro gegeben und dort bis zu Unkenntlichkeit in neue Sprachen übersetzt. Dann ging es wieder zurück in die DB.  
  
Die Anwendung hat dann für jeden User ein `SELECT term,translated FROM translations WHERE language_id=XX`{:.language-sql} gemacht, um einen Hash mit den Übersetzungen zu füllen.  
  
Fehlende Übersetzungen wurden durch den Originalterm ersetzt (nicht schön, aber lesbar) und erzeugten eine Warnung in den Logs.  
  

> Jetzt zu den etwas komplizierteren Faellen - Du wirst Uebersetzungen in der Art 'Found 35 results' vs. '35 Ergebnisse gefunden' haben, wo du also eine Variable '35' mit in die Uebersetzung einbauen willst, deren Position von der Sprache abhaengig ist. Deine Uebersetzung koennte jetzt so aussehen:  
> found\_num\_results = "Found %d results"  
  
Richtig garstig wird das, wenn Dinge wie Singular, [Dual](http://de.wikipedia.org/wiki/Dual_(Grammatik)), [Paukal](http://de.wikipedia.org/wiki/Paukal) und Plural ins Spiel kommen, z.B. bei "keine Eier gefunden" / "ein Ei gefunden", "zwei Eier gefunden" / "%d Eier gefunden". (Dual-Beispiele bitte aus der Wikipedia fischen!) gettext kümmert sich darum, genauer die [ngettext](http://us2.php.net/manual/en/function.ngettext.php)-Funktion.  
  
Auch schön sind Texte, in denen mehr als eine Variable vorkommt, die je nach Sprache in verschiedenen Reihenfolgen vorliegen, gerne auch kombiniert mit den verschiedenen Numerus-Varianten: "Der Begriff %s wurde %d mal in %s gefunden." vs. "In %s, %s was found %d times." Da ist ein normales (s)printf überfordert, weil die Platzhalter nicht unterschieden werden können. Abhilfe schaffen da nur numerierte oder benannte Platzhalter.  
  
Alexander

-- 
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".