• Hallo Besucher!

    Du bist neu im Forum? Dann registriere dich hier, um Diskussionen beizutreten oder eigene Themen zu erstellen. Für die Registrierung ist es erforderlich, dass du einen Spielaccount bei Die Stämme hast.

    Andernfalls kannst du dich hier direkt einloggen.

    Falls du dein Passwort vergessen hast, kannst du hier ein neues Passwort anfordern.

Homepage: Sprache wechseln

  • Themenstarter DeletedUser114131
  • Startdatum

DeletedUser114131

Gast
Hallo Community.

Ich bräuchte mal etwas Hilfe :)

Und zwar habe ich eine Seite, die bisher auf Deutsch geschrieben wurde.
Nun möchte ich die Seite allerdings auch in Englisch bereitstellen, möchte dafür aber nicht jede Seite immer neu schreiben müssen.

Daher sieht meine Struktur bis jetzt so aus:

Die Index-Seite befindet sich im ordner ../help(/index.php)
Weitere Seiten, die im Content angezeigt werden befinden sich im Ordner ../Templates/Help/...(.tpl)
Eine config-Datei befindet sich im Ordner ../help(/config.php)
Eine Sprachdatei befindet sich im Ordner ../Templates/Help/Lang/(de.php)

Auf jeder Seite steht ganz oben:
PHP:
<?php 
include("../help/config.php");
include("../Templates/Help/Lang/".HELP_LANG.".php");
?>

In der config.php wird bisher die Spache definiert (hier "de")
in der Sprachdatei stehen jegliche Texte
Auf den anderen Seiten werden nur die Texte mittels <?php echo aus der Sprachdatei ausgegeben

Soweit so gut, nun müsste man aber manuell in der config.php immer die Sprache umstellen.

Jetzt meine Frage:
Ich habe oben auf meiner Seite eine Leiste mit Flaggen, die auch nutzbar ist, die Frage ist:

Kann ich erreichen, dass wenn jemand z.B. auf die Flagge von England klickt, dass in der config.php auf LANG=en umgestellt wird ?

Oder wie soll ich das Problem sonst lösen ? :)


Danke schonmal für euere Hilfe
falls ihr mehr info's braucht fragt ruhig :)

Grüße
la noob
 

DeletedUser

Gast
Die Lösung ist eine Session Variable. Die wird für jeden Benutzer individuell gespeichert.
 

DeletedUser24674

Gast
so in etwa:

PHP:
<?php
session_start();
$possible_langs = array('de', 'en'/*,... */);

if (!isset($_SESSION['lang'])) {
   $_SESSION['lang'] = 'de';
}

if (isset($_GET['lang']) && in_array($_GET['lang'], $possible_langs)) {
   $_SESSION['lang'] = $_GET['lang'];
   // cookie würde auch gehen, den müsstest du aber vor jedem include 
   // überprüfen ob da wirklich nur de/en drinsteht oder ein anderer 
   // böser pfad
} 

include "./lang/".$_SESSION['lang'].".php"; // niemals mit ungeprüftem $_COOKIE !!
?>
 

DeletedUser101689

Gast
PHP:
include "./lang/".$_SESSION['lang'].".php"; // niemals mit ungeprüftem $_COOKIE !!

geht aber nur, wenn es keine unterverzeichnisse gibt bzw in jedem Unterverzeichnis der ordner "lang" zu finden ist ;)

Um imemr auf den root zuzugriefen, würde ich folgendes Skript benutzen:

PHP:
$ebene_Anzahl = (count(explode("/", $_SERVER["PHP_SELF"])) - 2);
$path = '';
for ($i=$ebene_Anzahl; $i>0;$i--) {
$path .= "../";
}

ich finde es sehr praktisch ;) hatte mich mit diesem problem nämlich auch lange abgeplagt :p

alxy
 

DeletedUser114131

Gast
so in etwa:

PHP:
<?php
session_start();
$possible_langs = array('de', 'en'/*,... */);

if (!isset($_SESSION['lang'])) {
   $_SESSION['lang'] = 'de';
}

if (isset($_GET['lang']) && in_array($_GET['lang'], $possible_langs)) {
   $_SESSION['lang'] = $_GET['lang'];
   // cookie würde auch gehen, den müsstest du aber vor jedem include 
   // überprüfen ob da wirklich nur de/en drinsteht oder ein anderer 
   // böser pfad
} 

include "./lang/".$_SESSION['lang'].".php"; // niemals mit ungeprüftem $_COOKIE !!
?>

Sagen wir mal ich würde das so machen, wie kann der User auf englisch umstellen ? :)
 

DeletedUser

Gast
Er klickt auf einen Link der Form: deinephpseite.php?lang=en Siehe das $_GET['lang'] im Code

Aber du solltest das nicht verwenden, bevor du es nicht verstehst ;)
 

TimLim

Gast
PHP:
include "./lang/".$_SESSION['lang'].".php"; // niemals mit ungeprüftem $_COOKIE !!

geht aber nur, wenn es keine unterverzeichnisse gibt bzw in jedem Unterverzeichnis der ordner "lang" zu finden ist ;)

Um imemr auf den root zuzugriefen, würde ich folgendes Skript benutzen:

PHP:
$ebene_Anzahl = (count(explode("/", $_SERVER["PHP_SELF"])) - 2);
$path = '';
for ($i=$ebene_Anzahl; $i>0;$i--) {
$path .= "../";
}

ich finde es sehr praktisch ;) hatte mich mit diesem problem nämlich auch lange abgeplagt :p

alxy

Im Root in einer Config eine Root Konstante oder so definieren. (__DIR__ \o/)
 

DeletedUser114131

Gast
Soo, sorry erstmal dass ich länger nichts von mir hören lassen hab.

Also ich habe euch mal ein Beispiel gebastelt wie meine Seite aussehen soll.
Hier ist der Link: (edit)
hoffe mal das ist erlaubt, das zu posten ;)

Schaut's euch an, und dann sagt mir wie ich das Problem mit dem Sprachenwechsel lösen kann, am besten mit code :)

Die Struktur könnt ihr hier sehen: (edit)
Einige Dateien sind davon nicht relevant für die FAQ, dennoch sind sie halt da ^^

Hoffe ihr könnt mir jetzt vielleicht besser helfen :)
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser

Gast
Wo ist das Problem? Der Code für den Sprachwechsel wurde hier doch schon gepostet. Den musst du in deine index.php einbauen und auch entsprechend die Sprach-Links (sind doch die oben auf deiner Seite?) umbauen in beispielsweise:

http://www.ragezone.ba ---> index.php?lang=ba
http://www.ragezone.bg ---> index.php?lang=bg
.
.
.
 

DeletedUser114131

Gast
hab ich versucht, siehe deutsche & englische Flagge, aber soblad ich jetzt zu den Gebäuden und dann zu einem Gebäude weiter gehe ist bei mir trotzdem wieder alles deutsch obwohl ich die Englische Flagge vorher angeklickt hatte.
 

DeletedUser24674

Gast
hab ich versucht, siehe deutsche & englische Flagge, aber soblad ich jetzt zu den Gebäuden und dann zu einem Gebäude weiter gehe ist bei mir trotzdem wieder alles deutsch obwohl ich die Englische Flagge vorher angeklickt hatte.

session_start() vergessen?
 

TimLim

Gast
Also bei mir verändert sich da nichts. Entweder sind Seiten komplett auf Deutsch oder komplett auf Englisch.
 

DeletedUser61033

Gast
hast du überhaupt die Daten aus $_GET['lang'] in die Session eingetragen? Sonst funktionierts natürlich nicht ^^
Und vergiss nicht zu prüfen, ob $_GET['lang'] überhaupt im $possible_languages - Array enthalten ist! Sonst haste da gleich ne böse Sicherheitslücke am Haken.

mfg
Heinzel
 

DeletedUser114131

Gast
Wie siehts mit der Sprachdatei aus? Alles i.O.?

Sprachdeteien sind in Ordnung es gibt eine Deutsche und eine Englische im Ordner /Templates/Help/Lang/(de.php & en.php)

session_start() vergessen?

Habe exakt diesen Code benutzt: (also außer halt dem Pfad zur Sprachdatei, den hab ich natürlich entsprechend geändert)
PHP:
<?php
session_start();
$possible_langs = array('de', 'en'/*,... */);

if (!isset($_SESSION['lang'])) {
   $_SESSION['lang'] = 'de';
}

if (isset($_GET['lang']) && in_array($_GET['lang'], $possible_langs)) {
   $_SESSION['lang'] = $_GET['lang'];
   // cookie würde auch gehen, den müsstest du aber vor jedem include 
   // überprüfen ob da wirklich nur de/en drinsteht oder ein anderer 
   // böser pfad
} 

include "./lang/".$_SESSION['lang'].".php"; // niemals mit ungeprüftem $_COOKIE !!
?>

Also bei mir verändert sich da nichts. Entweder sind Seiten komplett auf Deutsch oder komplett auf Englisch.

Die Seiten sind noch nicht alle fertig. Die Seiten, die sich bei "Gebäude" -> "Infrastruktur" befinden sind fertig und enthalten alle keinen Text. Sie haben lediglich <?php echo ... verweise, da wo Text angezeigt wird.

hast du überhaupt die Daten aus $_GET['lang'] in die Session eingetragen? Sonst funktionierts natürlich nicht ^^
Und vergiss nicht zu prüfen, ob $_GET['lang'] überhaupt im $possible_languages - Array enthalten ist! Sonst haste da gleich ne böse Sicherheitslücke am Haken.

mfg
Heinzel

Die Daten eintragen? Öhm nähere beschreibung dazu ? Reicht der Code von oben nicht aus ? ^^


Grüße
la noob
 

TimLim

Gast
Du nutzt aber schon die Variablen aus deinen Sprachdateien oder?


das var_dump($_SESSION['lang']); von c1b1 sollte dir Informationen über die Session['lang'] ausgeben.
 

DeletedUser

Gast
Angesichts dessen, dass du den Fehler nicht eingrenzen kannst wär wohl der ganze Code am besten.
 

DeletedUser114131

Gast
Angesichts dessen, dass du den Fehler nicht eingrenzen kannst wär wohl der ganze Code am besten.

den ganzen code der ganzen dateien hier zu posten würde glaube ich den rahmen sprengen.
Schließlich sind das nicht wenige dateien.
(//edit) Hier sind alle Dateien frei einsehbar. Jede Datei kann mit rechtsklick -> Ziel speichern unter gespeichert und angesehen werden. Ich hoffe das reicht euch um helfen zu können, denn wenn ich jetzt jede Datei hier posten würde dann wären das ein paar seiten hier und das wollt ihr dann auch sicher nicht alles durchkämmen ... ;)

e:/
Habe nun doch auf einer Seite eine ausgabe von dem code:
Die Seite ist die Seite der Brauerei (Gebäude->Infrastruktur->Brauerei) Dort steht nun oben:

string(2) "de"
oder aber wenn die englische Flagge angeklickt wurde:
string(2) "en"


edit2: Oh damn I'm stupid :D Mensch da hab ich einfach die en Sprachdatei von der de Sprachdatei kopiert und hab danach die Variablen nochmal verändert weil sie mir zu lang & kompliziert waren. Hab das leider aber nur in der de Sprachdatei gemacht und wunder mich warum da nichts geht -.-'

Danke für euere Hilfe, letztendlich hat der entscheidende Fehler nun doch an einer schusseligkeit gelegen, nun bin ich sehr viel weiter gekommen und hab auch noch etwas dazu gelernt !

Danke :)

Grüße la noob
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser

Gast
den ganzen code der ganzen dateien hier zu posten würde glaube ich den rahmen sprengen.
Schließlich sind das nicht wenige dateien.
Es gäbe etwas. Nennt sich ZIP ;)

Ansonsten solltest du dir den Tipp mit dem var_dump(); merken. Damit finden sich solche Fehler sehr gut. Einfach alle relevanten Variablen ausgeben. Damit kann man den Fehler dann leicht auf bestimmte Codezeilen eingrenzen. In deinem Fall wäre das die include Zeile gewesen. Damit hättest du gewusst, es liegt an der Sprachdatei ;)
 

DeletedUser114131

Gast
Es gäbe etwas. Nennt sich ZIP ;)

Ansonsten solltest du dir den Tipp mit dem var_dump(); merken. Damit finden sich solche Fehler sehr gut. Einfach alle relevanten Variablen ausgeben. Damit kann man den Fehler dann leicht auf bestimmte Codezeilen eingrenzen. In deinem Fall wäre das die include Zeile gewesen. Damit hättest du gewusst, es liegt an der Sprachdatei ;)

Ahh :D Daran hab ich jetzt nicht gedacht ;D
Ja merk ich mir das ist wirklich ne gute Sache um Fehler zu finden :)

Nochmal vielen Dank :)
 
Oben