Seite in Sprache umstellen

EuroCent

Klappstuhl 2.0
Hallo

Hab folgendes Problem:

Und zwar möchte ich das Gäste sich die Sprache ihres Landes wählen können! Dies sollte aber dann komplett Seite geschehen!

Wie muss ich das anstellen?
Bisher bekomm ich immer nur die Index auf Deutsch oder Englisch.

Meine lang_de.php und lang_en.php ist so aufgebaut:

PHP:
<?php
$lg = array();
$lg['welcome'] = "Willkommen bzw. Welcome";
?>

Um auch die Sprache in meinem Templates benutzen zu können hab ich dafür eine Funktion erstellen:

PHP:
		function language(&$tpl) {
			$tpl = preg_replace('$lg([_a-zA-Z0-9]*)\s*\((.*?)\)', '$lg[\'\']', $tpl);
		}

in der Global.php hab ich dies stehen:

PHP:
<?
require("templates.php"); //Template-Class zum ausgeben der TPLs
//require("language.php");

switch($_REQUEST['language']) {
	case 'de_DE';
		require("./lang/lang_de.php");
	break;
	case 'en_EN';
		require("./lang/lang_en.php");
	break;
	default;
		require("./lang/lang_de.php");
	break;
}

	$tpl = &new dbbtpl('./templates/cache', './templates', 0);
	
		eval("\$css = \"".$tpl->get("css")."\";"); // CSS
		eval("\$lang = \"".$tpl->get("language")."\";"); // Language-Change
		eval("\$header = \"".$tpl->get("header")."\";"); // Kopfbereich
		eval("\$acp_h = \"".$tpl->get("acp_header")."\";"); //ACP Kopfbereich
		eval("\$footer = \"".$tpl->get("footer")."\";"); // Fussbereich
?>

language.tpl
Code:
<span class="smallfont">
<div id="menuebox">
<div id="menue_header">
<div class="aussen">
<span class="menutag">$lg[language]</span>
<a style="text-decoration: none;" class="innen-1" href="index.php?action=lang&amp;language=de_DE"><img border="0" src="./images/flags/de.gif" alt="" /> $lg[german]</a>
<a style="text-decoration: none;" class="innen-1" href="index.php?action=lang&amp;language=en_EN"><img src="./images/flags/england.gif" border="0" alt="" /> $lg[english]</a></div>
</div>
</div>
</span>

Ob dies nun wirklich richtig ist weiss ich mittlerweile da ich bisher nur die Index zum Wechseln bekomme leider aber nicht die anderen

Ich hoffe ihr könnt mir da helfen
 
Sobabald du die richte Sprache einfügst, brauchst du keine Extra Funktion mehr.
Du musst einfach nur das richtige Array Element an richtiger Stelle ausgeben.
PHP:
<?php echo $lg['welcome']; ?>
Sobald die deutsche Datei eingefügt wird, gibt er den deutschen Text aus.
Und genau so ist es mit der englischen Sprache.
 
Ja na das ist mir bekannt ;)

Aber wie bekomm ich es hin das es seitenübergreifend wirk

so das ich nicht unbeding beispiel: index.php?action=news&language=de_De oder en_EN habe?

Also in der global.php sind ja alle daten enthalten nun möchte ich wenn ich auf download.php gehe das dort dann die sprache ich die ich eventuell auf der index.php gewählt habe auch unter download.php hab

Wenn ich also auf der index.php englisch wähle dann sollten die anderen alle seiten ebenfalls in englisch sein und nicht wie es derzeit bei mir ist

den wähle ich bei mir englisch auf der Index dann ist es soweit richtig sobald ich aber auf download.php gehe hab ich deutsch und genau das soll nicht sein!

Ich hoffe man kann mir dabei helfen wie ich es machenkann/könnte/muss
 
Variablen (wie deine Spracheinstellung), die über mehrere Seiten hinweg erhalten bleiben sollen, musst du entweder in Sessions oder in Cookies speichern. Sessions haben eine geringere Haltbarkeit (sie halten nur bis der User den Browser schließt oder bis die Idle-time, die beim Webserver eingestellt ist, erreicht ist), dafür funktionieren sie unabhängig davon welche Sicherheitseinstellungen ein User in seinem Browser gemacht hat. Cookies sind nicht immer verfügbar (manche User haben Cookies ganz abgestellt oder verweigern deiner Seite, welche zu setzen.). Dafür sind sie aber, wenn sie einmal erfolgreich gesetzt wurden, über mehrere Sitzungen gut geeignet um seitenspezifische Daten zu speichern.

Eine optimale Strategie für deine Spracheinstellungen sollte daher beide Techniken kombinieren. Du solltest versuchen mit Cookies zu arbeiten - dich aber nicht drauf verlassen, dass das bei allen Besuchern deiner Seite auch funktioniert und darum auch Sessions benutzen.

Besucher, die Cookies aktiviert haben, müssen dann nur ein einziges Mal ihre Sprache wählen. Besucher, die keine Cookies aktiviert haben, müssen zwar bei jedem neuen Besuch deiner Seite die Sprache neu wählen, so lange sie aber auf deinen Seiten surfen, merkt sich die Session was sie ausgewählt haben.

Besser noch wäre es, deinen Besuchern diese lästige Sprachwahl abzunehmen. Ich entwickle gerade eine Plattform, die in momentan 4 Sprachen erscheinen soll (und weitere sind für später geplant). Dafür hab ich eine kleine Funktion geschrieben, die anhand der Variable $_SERVER['HTTP_ACCEPT_LANGUAGE'] die Sprache des Besuchers automatisch bestimmt.
 
Zuletzt bearbeitet:
Variablen (wie deine Spracheinstellung), die über mehrere Seiten hinweg erhalten bleiben sollen, musst du entweder in Sessions oder in Cookies speichern. Sessions haben eine geringere Haltbarkeit (sie halten nur bis der User den Browser schließt oder bis die Idle-time, die beim Webserver eingestellt ist, erreicht ist), dafür funktionieren sie unabhängig davon welche Sicherheitseinstellungen ein User in seinem Browser gemacht hat. Cookies sind nicht immer verfügbar (manche User haben Cookies ganz abgestellt oder verweigern deiner Seite, welche zu setzen.). Dafür sind sie aber, wenn sie einmal erfolgreich gesetzt wurden, über mehrere Sitzungen gut geeignet um seitenspezifische Daten zu speichern.

Eine optimale Strategie für deine Spracheinstellungen sollte daher beide Techniken kombinieren. Du solltest versuchen mit Cookies zu arbeiten - dich aber nicht drauf verlassen, dass das bei allen Besuchern deiner Seite auch funktioniert und darum auch Sessions benutzen.

Besucher, die Cookies aktiviert haben, müssen dann nur ein einziges Mal ihre Sprache wählen. Besucher, die keine Cookies aktiviert haben, müssen zwar bei jedem neuen Besuch deiner Seite die Sprache neu wählen, so lange sie aber auf deinen Seiten surfen, merkt sich die Session was sie ausgewählt haben.

Besser noch wäre es, deinen Besuchern diese lästige Sprachwahl abzunehmen. Ich entwickle gerade eine Plattform, die in momentan 4 Sprachen erscheinen soll (und weitere sind für später geplant). Dafür hab ich eine kleine Funktion geschrieben, die anhand der Variable $_SERVER['HTTP_ACCEPT_LANGUAGE'] die Sprache des Besuchers automatisch bestimmt.

Kann man da schon etwas genaueres erfahren bzw. sehen?
Ansonsten werd ich mal schauen und es dann mit Cookies und Sessions testen
 
Ich würde den Sprachkürzel einfach als Teil des URLs machen, beispielsweise als Teil des URL-Pfads (etwa „/de/…“). Der Vorteil ist, dass weder der Client Cookies akzeptieren muss noch die Sitzungs-ID im URL erscheint.
Den Initialwert dafür würde ich aus den vom Client gesendeten Informationen extrahieren (etwa bereits genannte „Accept-Language“-Header-Feld) oder beim Fehlen dieser Informationen auf einen Standardwert zurückgreifen und den Benutzer nach seiner bevorzugten Sprache fragen. Später sollte ein Sprachwechsel allerdings auch problemlos möglich sein.
 
Ja so wie Gumbo würde ich es auch machen. Bei meinen Programmen (Delphi) erstelle ich Unterverzeichnisse mit Landeskürzeln. Je nach dem welche Sprache der User wählt, verzweigt das Programm in die entsprechenden Unterverzeichnisse. Das Verfahren hat sich seit mehreren Jahren bestens bewährt.
 
Physische Verzeichnisse sind gar nicht nötig. Es ist möglich allein den Anfrage-URL zu analysieren, das Sprachkürzel zu streichen und den Rest auf das Dateisystem abzubilden.
 
Hi, ich hatte das auch einmal auf einer meiner Seiten eingebaut.

Habe dazu einfach sine $_SESSION variable verwendet.

bsp:

$_SESSION['lang']="de";

diese kannst du bei der Abfrage der Sprache auf den gewünschten Wert ändern, und im Content diesen abfragen. Ich hatte dazu einfach zu jeder Sprache eine MySQL Table mit den entsprechenden Sprachnamen.

$lang=$_SESSION['lang'];
$go=mysql_query("SELECT news FROM $lang );

oder du machst gleich für jede sprache eine DB was bei grossen Projekten meiner Meinung nach das Ganze übersichtlicher und einfacher in der Handhabung ist. dann must du einfach beim connecten die $lang angeben..

ich hoffe das hilft dir weiter.
 
Zuletzt bearbeitet:
Zurück