Hallo,
für eine multilinguale Webseite habe ich mit überlegt, die Sprach-Übersetzungen in einer MySQL Datenbank zu speichern.
Bisher gab es für jede Sprache einfach eine php Datei, in der die Konstante und die Übersetzung enthalten war. Das ganze sah dann ungefähr so aus:
german.php:
english.php
Nachdem ich die Sprachdateien in eine MySQL Datenbank portiert habe, sehen die Spachdateien nun so aus:
german.php
Das ganze funktioniert wunderbar und ich glaube sogar etwas schneller. Leider gibt es ein kleines Problem: Einige Übersetzungen enthielten Variabeln wie z.B.:
Seit der Umstellung auf eine datenbankgestützete Abfrage werden Variabeln wie hier das
$email nicht mehr ersetzt.
Ich habe dann bei meiner Recherche im Internet die Möglichkeit gefunden, das Problem mit eval() zu lösen:
An sich scheint das so zu funktionieren. Die Übersetzungen sehen nun richtig aus und die Variabeln sind ersetzt. Dummerweise gibt es aber trotzdem eine Fehlermeldung:
Nun die Fragen:
1.) Wo liegt der Fehler?
2.) Ich lese immer wieder, dass die Funktion eval() (wie der Name schon sagt
) böse ist... Da ausser mir aber niemand Einträge in diese Tabelle machen kann, muss ich mir da aber nicht so viele Sorgen machen, oder?
3.) Kostet mich das eval() unnötig rechenzeit? Immerhin wird das bei allen Übersetzungen angewand, egal ob eine Variable enthalten ist oder nicht.
4.) Gibt es eine bessere Lösung?
Danke & Grüsse
Florian
für eine multilinguale Webseite habe ich mit überlegt, die Sprach-Übersetzungen in einer MySQL Datenbank zu speichern.
Bisher gab es für jede Sprache einfach eine php Datei, in der die Konstante und die Übersetzung enthalten war. Das ganze sah dann ungefähr so aus:
german.php:
PHP-Code:
define("_USER","Benutzer");
define("_CITY","Ort");
PHP-Code:
define("_USER","User");
define("_CITY","City");
german.php
PHP-Code:
$lang_result=mysql_query("SELECT constant, german FROM language", $db);
while(list($const, $lang) = mysql_fetch_array($lang_result, $dbi)) {
define("$const","$lang");
}
PHP-Code:
define("_HELP","Für technische Hilfe kontaktieren Sie uns bitte unter $email");
$email nicht mehr ersetzt.
Ich habe dann bei meiner Recherche im Internet die Möglichkeit gefunden, das Problem mit eval() zu lösen:
PHP-Code:
$lang_result=mysql_query("SELECT constant, german FROM language", $db);
while(list($const, $lang) = mysql_fetch_array($lang_result, $dbi)) {
eval ("\$lang = \"$lang\";");
define("$const","$lang");
}
Code:
<b>Parse error</b>: syntax error, unexpected '>' in <b>/path/german.php(36) : eval()'d code</b> on line <b>1</b><br /> <br /> <b>Parse error</b>: syntax error, unexpected T_VARIABLE in <b>/path/german.php(36) : eval()'d code</b> on line <b>1</b><br />
1.) Wo liegt der Fehler?
2.) Ich lese immer wieder, dass die Funktion eval() (wie der Name schon sagt
3.) Kostet mich das eval() unnötig rechenzeit? Immerhin wird das bei allen Übersetzungen angewand, egal ob eine Variable enthalten ist oder nicht.
4.) Gibt es eine bessere Lösung?
Danke & Grüsse
Florian

Kommentar