mmofacts.com

Konfiguration und Mehrsprachigkeit

gepostet vor 13 Jahre, 5 Monate von Eckstoss

Hallo und einen schönen Abend,

vielleicht könnt Ihr mir einen Rat geben.

Sollte die Konfiguration und die Mehrsprachigkeit in die Datenbank oder per Array festlegen?

Variante Array:

PHP:

return array(   'description' => '' ,

                       'keyword'     => '' ,
                       'title'             => 'Your Website '    ,
);

Variante Datenbank:

Datenbanktabelle "configuration"

Felder: config_id, config_name, config_category, config_value

Beispiel: (1, loginActiv, application, 1)

Datenbanktabelle language_item:

Felder:item_id, item_language, item_name, item_value

Beispiel: (1, de_DE, description, Beschreibung)

              (2, en_GB, description, description)

Bei Language könnte man defenitiv noch eine Tabelle dazu machen, in dem generell die Sprachen vorhanden sind.

Ich tendiere zwar eher zur Datenbank, nur mache ich mir dabei vielleicht ein bisschen Sorgen um die Performance.

Wahrscheinlich eher unbegründet, wenn man Caching richtig verwendet.

Aber für jeden Vorschlag oder Tipp bin ich offen.

gepostet vor 13 Jahre, 5 Monate von BlackScorp

also ich persönlich nutze eine Template klasse die mir ein array aus einer datei ausließt, jedoch finde ich bei jedem wort die sprache zu übergeben, ein wenig übertrieben. du kannst doch einmal de_DE oder en_GB setzen und dann dir immer den keywort anzeigen lassen.

Ich persönlich denke, dass zuviele zugriffe auf die Datenbank, doch sehr Perfomance lastend ist, ich denke auch aus diesem grund hat php die _getText funktion mit den locale usw..

also bei mir sieht die de_DE.php so aus

$text['asd'] ='ASD';

$text['welcome']= 'Willkommen auf der Seite xyz';

nach dem start der Seite, lege ich fest ,welche datei included werden soll(de_DE.php oder en_GB.php) und dann kann ich einfach $text['welcome'] ausgeben und je nachdem welche sprache gesetzt wurde, wird auch der text angezeigt

MFG

gepostet vor 13 Jahre, 5 Monate von omarius

Hallo Eckstoss,

Wie BlackScorp auch, rate ich dir von der Datenbank-Lösung stark ab.

eine weitere mögliche Alternative neben _getText ist der Einsatz von XML. Entweder für jede Sprache eine XML Datei und dann eine entsprechende Funktion aufrufen, oder wenns professionell sein soll mit TMX arbeiten http://de.wikipedia.org/wiki/Translation_Memory_eXchange

Ferner solltest du beim Gestalten der Website eventuell von vornherein bedenken, dass manche Sprachen z.B. die semitischen Sprachen (Arabisch, Hebräisch, Persisch ..) von rechts nach Links geschrieben werden. Dabei sollte falls die Seite links-bündig angeordnet ist, dann das Umgekehrte der Fall sein, siehe dir="rtl" und float:right.. also reicht es nicht immer nur den String zu ersetzen, wenn man sich nicht auf romanische Sprachen beschränkt..

viele Grüße

omarius

gepostet vor 13 Jahre, 5 Monate von Eckstoss

Hallo omarius,

vielen Dank für deinen Beitrag, da kann ich wohl die Datenbank somit von meiner Liste streichen.

Ich schau mir bei Gelegenheit mal TMX an.

Grüße

Eckstoss

gepostet vor 13 Jahre, 5 Monate von DrakeL

Die Datenbank hat aber auch Vorteile. Wenn per Webinterface die Übersetzungen geändert werden sollen kann dies viel einfacher in einer Datenbank geändert werden als XML oder gar PHP Dateien zu bearbeiten. Die Performance beim Auslesen der Datenbank für die Sachen ist egal, dafür gibt es Cachelösungen um es nur einmal aus der Datenbank laden zu müssen.

Konfigurationen würde ich erstmal Systemsachen und Spielsachen voneinander trennen:

Systemsachen wie zum Beispiel die Daten für den Datenbankzugang, Verzeichnispfade für Cachedateien, Einstellungen für den Webserver ändert man nicht so häufig und lassen sich daher auch gut manuell in Dateien pflegen.

Spielsachen wie Gegnerstärken, Spiellogikeinstellungen usw.ändert man fürs Balancing sehr viel häufiger, hier sollte man generell dafür sorgen dass man an sinnvollen Stellen Schrauben ins Spiel einbaut an denen man später drehen kann. Außerdem werden solche Sachen in Teams nicht von den Entwicklern bestimmt sondern von Gamedesignern, daher wäre es auch sinnvoll wenn genau diese die Daten selbst anpassen können und nicht immer ein Entwickler ran muss der einfach die Daten kopiert und in den Quellcode einfügt.

Fazit: Man sollte sich vorher Gedanken machen wer die Daten (Entwickler, Gamedesigner, Übersetzer) in welcher Form (per Dateiänderung, Webinterface) und wie oft ändert und diese dann entsprechend so ablegen dass die Daten ohne Probleme von demjenigen der dafür zuständig sind auch geändert werden können.

gepostet vor 13 Jahre, 5 Monate von Dunedan

Original von DrakeL

Die Datenbank hat aber auch Vorteile. Wenn per Webinterface die Übersetzungen geändert werden sollen kann dies viel einfacher in einer Datenbank geändert werden als XML oder gar PHP Dateien zu bearbeiten.

Mit einer vernünftigen Abstraktion ist es vollkommen egal wohin die Daten gespeichert werden.

Die Performance beim Auslesen der Datenbank für die Sachen ist egal, dafür gibt es Cachelösungen um es nur einmal aus der Datenbank laden zu müssen.

Soll es Gerüchten zufolge auch für andere Speichermedien geben.

gepostet vor 13 Jahre, 5 Monate von Iopodx

Bei meinen Projekten (und eines davon war mal in 7 oder 8 Sprachen) wurde einfach für jede Sprache eine Language.txt angelegt die dann entsprechend geparsed wurde... Einfach in ein Array damit und dann auf $lng["home"] zugegriffen. Sehr einfache und - wie ich finde - auch saubere Lösung.

Schema war z.Bsp. so:

lng:de

worlds:Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta

title:IkaStats.com

subtitle:(Statistiken für Ikariam)

home:Hauptseite

search:Spieler/Allianz Suchen

top:Top Spieler

serverstats:Server Statistiken

Vielleicht hilft es ja. Performance war völlig ausreichend, auch wenn ich relativ viele Requests hatte. 

gepostet vor 13 Jahre, 5 Monate von DrakeL

Original von Dunedan

Mit einer vernünftigen Abstraktion ist es vollkommen egal wohin die Daten gespeichert werden.

Stimmt, ich sehe bei der Datenbank da eher ein Vorteil, weil man mit weniger Aufwand einzelne Sprachvariablen ändern kann, die Abstraktion nicht erst eingebaut werden muss sondern eine Datenbank an den meisten Projekten angeknüpft ist. Aber natürlich ist es nur ein Speichermedium unter vielen und jedes hat seine Vor- und Nachteile.

Als Idee:

Die Pflege der Übersetzungen vom Projekt trennen. Zum Beispiel ein eigenes Tool nutzen um die Übersetzungen zu pflegen und am Ende die einzelnen Sprachen in irgendeinem Format (zum Beispiel ganz einfach als PHP Array wegen sehr guter Performance) für die Projekte exportieren.

Macht man bei den Gettext Implementierungen auch nicht anders. Da gibts Tools die die Sprachvariablen aus dem Source ziehen oder manuell eintragen lassen und dazu dann die Übersetzungen pflegen lassen. Am Ende wirds in ein binäres Format exportiert.

Auf diese Diskussion antworten