Mehrsprachige Dialoge

Hi!

An eines unserer Projekte ist das Problem der Mehrsprachigkeit herangetragen worden. Bisher sind alle Texte im Dialog, also Labels, Fehlermeldungen usw., nur auf Deutsch. Nun wird Englisch, Französisch und evtl. noch die eine oder andere Sprache gewünscht.

Frage also: Wie bekommt man das am besten hin?

Ein Vorschlag war, alle im Dialog erscheinenden Texte in einer Datenbanktabelle ablegen, alle Labels, Fehlermeldungen usw. durch Variablen darstellen* und diese Variablen mit Inhalten aus der DB in der vom Anwender gewünschen Landessprache bestücken.

* Erfolgt momentan nur teilweise. Fehlermeldungen z.B. sind je nach Prüfung und Feld fest codiert (m. E. keine sonderlich schlaue Variante).

Gibt es eine andere - bessere - Lösung?

Grüße
Heinrich

Hi!

ich mach das immer mit sprachfiles in dennen ein Array steht.

$lang[‚de‘][‚welcome‘] ist dann zum beispiel der willkommensgruß usw…

kannst du auch per sql machen nur das ist das dann auch jedesmal nen datenbankzugriff wenn du auf ein file zugreifst.

Wenn du es per SQL machst achte drauf das es im Französisch die Sonderzeichen `´ gibt.

LG
Phillip

Hallo Heinrich,

hier ein paar Varianten, die oefters genutzt werden:

(a) siehe Phillips Antwort - ein mehrdimmensionales assoziatives Array. Bsp.: $translate[‚sprache‘][‚string‘] = ‚text‘;

(b) ein normales assoziatives Array. Dabei gibt es eine Hauptsprache (z.B. englisch) und die Nutzersprache. Zuerst laedt man die Sprachdatei der Hauptsprache (in diesem Beispiel Englisch) in der alle Sprachstrings in einem Array gespeichert sind ( $translate[‚translation‘] = ‚Translation‘:wink: Anschliessend laedt man dann die eigentliche Sprachdatei, die die einzelnen Werte des Arrays ueberschreiben. (Deutsch z.B. $translate[‚translation‘] = ‚Übersetzung‘:wink:
Der Vorteil hierbei ist, das man hauptsaechlich eine Sprache pflegt und die anderen Sprachdateien auch unvollstaendig sein koennen. Falls ein String noch nicht uebersetzt wurde wird dann auf jeden Fall die Hauptsprache angezeigt.

© man Arbeitet nicht mit einem Array sondern mit Konstanten. Dies ist von der Codeabarbeitung her etwas schneller.
Beispiel:
define(„LANG_TRANSLATION“, „Übersetzung“);
echo LANG_TRANSLATION;

Siehe auch http://de2.php.net/manual/de/language.constants.php

(d) Benutzung von gettext.
Hier wird mit .mo/.po-Dateien gearbeitet was bei groesseren Projekten nicht nur bei PHP oft eingesetzt wird.
Siehe dazu http://de2.php.net/manual/de/ref.gettext.php und http://de2.php.net/manual/de/function.gettext.php

Gruesse
Stefan

Hallo Heinrich,

ähnlich wie die Sache mit den mehrdimensionalen Feldern geht es so. Du definierst eine Liste an Variablen (ggf auch als Feld) und legst diese z.B. in eine Datei namens

 inc\_lang\_de.php

Für jede weitere Sprache machst Du eine Kopie dieser Datei, nennst diese dann

 inc\_lang\_en.php
 inc\_lang\_fr.php

und übersetzt die Variableninhalte entsprechend. (Variablennamen bleiben natürlich identisch.)

Je nach gewählter Sprache wird ja eine Variable mit einem entsprechenden SPrach-Kürzel (de, fr, en) gefüllt sein, z.B.

 $sprache = "de";

Über ein Include wird dann die entsprechende Sprachdatei eingebunden, z.B. mit:

 include ("inc\_lang\_$sprache.php");

oder

 include ('inc\_lang\_' . $sprache . '.php');

Gruß
Wolfgang