PHP Mehrsprachige Ausgabe

Hallo!

Ich bräuchte mal von euch eine kleine Hilfe.

Ich möchte die Ausgabe z.b. echo in PHP mehrsprachig machen. Jedoch habe ich viele gegensätzliche Meinungen schon im Internet gelesen und versuche das richtige für mich zu finden:

Bitte keine Aussage von mir falsch zu interpretieren, das ? stellt nur die verschiedenen Meinungen im Internet da.

a) Texte werden in eine MySQL Datenbank abgelegt.

  • Datenbank lastig, zu langsam?? Für jeden Begriff, Wort, Satz muss eine SQL-Query gesetzt werden?
  • Einfacher Aufbau, wenig Speicherbelastung, einfach erweiterbar?

b) Array, Texte werden per include_once geladen, in einem Array pro Sprache ein include PHP file

  • Hohe Speicher belastung, schwer zu erweitern?
  • Schnell?

c) Class, Texte werden per include_once geladen, in einer Klasse Array artig

  • Hohe Speicher belastung, schwer zu erweitern, __get soll angeblich der „Killer“ sein?
  • Schnell?

d) gettext, texte sind in einer indexierten Textdatei verfügbar

  • schwer erweiterbar, Nach jeder Erweiterung muss man die .mo Datei kompilieren?
  • schnell, keine hohe Speicher belastung?

Eine kleine Richtlinie die ich mir gesetzt habe, es werden ca. 20.000 Worte übersetzt und nochmal dynamisch mittels Google ca. 5.000-10.000 Worte von Usern übersetzt. Je nach verfügbarer Sprache werden es mehr, (Deutsch/Englisch sicher, Französisch im weiteren Ausbau)

es geht mir fürs erste mal um die fixen Texte, die sich im Laufe der App nicht stark verändern, die dynamischen Texte, klar da kommt sicher nur die MySQL Datenbank zum tragen.

Klar „echo“ ist nicht gut, ich verwende smarty bzw. savant für die Ausgabe, aber das Prinzip bleibt gleich.

Wer kann mir da den passenden Rat geben?

Hallo,
ich würde die Texte in einer MySQL-Datenbank anlegen.
Dort können die Daten ja auch so angelegt werden, das für jedes Wort bzw. jeden Satz nur ein Eintrag vorhanden ist. Die verschiedenen Sprachen können in mehreren Spalten angelegt werden.
(ID | Englisch | Deutsch | Französich | Spanisch | etc)

Dann reicht eine Query-Anfrage um alle Sprachen aus der DB zu laden. Oder man lädt nur die benötigte Sprache aus der ensprechenden Spalte.

Ich hoffe es ist verständlich erklärt was ich meine.

Hallo Alexander,

also meiner nach sind Text-Dateien die bessere Wahl, da Datenbanköffnung, abfrage, etc wegfallen und das Filesystem immer schneller ist als Datenbank! Wir verwenden in unseren Systemen ausschließlich Array-basierende Textdateien, da diese wie bereits geschrieben einfach nachgeladen können. Dazu gibts eine Klasse welche bei Start, die Sprachdateien includiert und in einem Buffer bereithält. Über eine Methode LANGUAGE::getLL(‚TEXT1‘) kann man den Text einfach holen. Speicherbelastung ist eigentlich heut zu tage kein Thema mehr, da dieser ausreichend vorhanden ist.

Man sollte bei den Text-Dateien nur noch nach Textgröße in entsprechenden Sprachen entscheiden. Heißt bei wenig Text kann man die Sprachen in eine Text-Datei aufnehmen.

array(
‚de‘ => array(
‚TEXT1‘ => ‚Das ist ein Text‘
),
‚en‘ => array(
‚TEXT1‘ => ‚This is a text‘
)
);

Oder jeweils in einzelne Dateien (lang.de.inc.php, lang.en.inc.php, etc.).

array(
‚TEXT1‘ => ‚Das ist ein Text‘
)

Das Argument mit schwer Erweiterbar kann ich nicht nachvollziehen, da dies einfach per Editor oder sogar mit Weboberfläche möglich ist.

Grüße Elsoregro

Hallo,

einen passenden Rat kann ich leider nicht anbieten, nur vielleicht einen Hinweis: Wenn ich mir den Aufbau von der Forensoftware phpBB sowie dem CMS Joomla anschaue - beide sind Multilingual ausgelegt - wird hier die Sprache über include-Dateien gehandelt.

Wenn ich heute vor der Entscheidung stehen würde ein solches System mit diesem Umfang zu erstellen, würde ich auf die Variante b zurückgreifen.

Grüße,
Volker Bihrle

Hi,

was heisst eine „echo“ Ausgabe mehrsprachig machen?

Hast du einen beispielsweise deutschen Text den du dynamisch übersetzen willst, oder hast du die bereits übersetzten Texte in der Datenbank und möchtest eine Sprachumschaltung für den betreffenden Text?

Hallo!

Ein kurzes Beispiel:

<?php echo "Wir haben heute schönes Wetter!";
?\> jedoch wird die Sprache mittels $\_Session umgeschalten also von Deutsch auf Englisch. also in etwa:

Also ich würde Dir die Lösung mittels MySQL empfehlen, da die Flexibilität dieser Lösung einen immensen Vorteil darstellt.
Außerdem solltest du Dich fragen, ob die Geschwindigkeit hier wirklich so einen großen Nachteil darstellt, da SQL ja an sich sehr schnell ist, nur die Verbindung zur Datenbank ist der Flaschenhals.

Eventuell lohnt es sich, die Daten zu Beginn mit einer einzigen Abfrage in den Speicher zu laden, dann wird dafür nur eine einzige SQL-Query benötigt. Das kostet natürlich wieder Arbeitsspeicher, aber eventuell lässt sich hier ein Mittelweg finden, also bestimmte Teile der Daten erst laden, wenn sie benötigt werden (zb blockweise).

Hoffe dir ist damit geholfen.

ja schon klar

um beim hardgecode zu bleiben gibt es noch die möglichkeit alles in ein mehrdimensionales array zu packen und nur die entsprechende sprache auszulesen

also in etwa so zum dynamischen füllen:

spracheArray[en][] = „xxx“;
spracheArray[de][] = „xxx“;

oder eben hardcoded

spracheArray[en][0] = „xxx“;
spracheArray[en][1] = „xxx“;

spracheArray[de][0] = „xxx“;
spracheArray[de][1] = „xxx“;

ansonsten dann noch speichern und auslesen aus textdatei mit fopen, oder eben am besten ab in die mysql und die einzelnen sprachen in zeilen mit dem entsprechenden kürzel flaggen

das auslesen von einer textdatei, oder in eine textdatei packen dürfte dabei am schnellsten sein, da es ohne aufwendige umwege über die datenbank systemnah läuft

Da kann ich leider auch nicht helfen, sorry!

Ist zwar schon ne Weile her. Eine Antwort bin ich dir trotzdem noch schuldig. Ich als Datenbankfetischist nehme die DB Lösung :wink:
Hoffe, konnte dir die Entscheidung hiermit abnehmen/erleichtern

mfg