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‘
Anschliessend laedt man dann die eigentliche Sprachdatei, die die einzelnen Werte des Arrays ueberschreiben. (Deutsch z.B. $translate[‚translation‘] = ‚Übersetzung‘
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