Mehrsprachige seite
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
array
aufrufen
aussehen
beispiel
code
datei
datenbank
frage
ftp
http
impressum
index
lang index
login
ordner
parameter
speichern
sprache
url
-
ih habe php code in internet gefunden und komme nicht weiter bei spacher von php seite
<?php $lang = $_GET["lang"]; // GET Variable setzen if($lang == "") { $lang = "de"; // Wenn die Variable $lang leer aufgerufen wird, lassen wir uns eine Sprache vor definieren! ( In meinem Beispiel verwende ich Deutsch ) } include("lang_".$lang.".php"); // Includieren der lang_de.php, Wenn $lang Variable leer ist! ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Dein Webseiten Name</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </head> <body> <a href="?lang=de">Deutsch</a> | <a href="?lang=en">Englisch</a> <p><?php echo $Beispiel ?></p> </body> </html>
Frage?
wenn ich seite zum Beilspiel auf Englisch wie soll ich php seite speichern
die
kann man nicht speichern wegen sonderzeichen?lang=de
?
Beitrag zuletzt geändert: 12.2.2013 13:59:33 von tshaika -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hm? Was gibts denn da bitte nicht zu verstehen? Dein Beispiel bindet eine lang_$lang.php ein. Also wenn ?lang=de gesetzt ist, bindest du eine lang_de.php ein. Und wie du jetzt eine Englische Seite abspeichern sollst? Dann natürlich als lang_en.php oder was genau willst du wissen?
Beitrag zuletzt geändert: 12.2.2013 14:02:37 von midwar -
das
stellt nicht den dateinamen dar, sondern ist ein get-parameter mit dem die seite aufgerufen werden kann.?lang=de
wenn du die seite zb "home.php" nennest kannst die seite auch mit dieser url aufrufen: "home.php?lang=de".
dann wird normal die seite home.php aufgerufen in der es dann den get-parameter "lang" gibt, mit dem wert "de" - und genau das wird ja auch am anfang deines codes abgefragt... -
hcms schrieb:
das
stellt nicht den dateinamen dar, sondern ist ein get-parameter mit dem die seite aufgerufen werden kann.?lang=de
wenn du die seite zb "home.php" nennest kannst die seite auch mit dieser url aufrufen: "home.php?lang=de".
dann wird normal die seite home.php aufgerufen in der es dann den get-parameter "lang" gibt, mit dem wert "de" - und genau das wird ja auch am anfang deines codes abgefragt...
du hast mich nicht ganz verstanden
ich meinte so
zb
ich seite die ist in deutsch und heist dann index.php
dann will ich zB englische seite dann eine Neu seite auf englisch und speichern unter index.php???? das der index.php exestiert schön -
tshaika schrieb:
hcms schrieb:
das
stellt nicht den dateinamen dar, sondern ist ein get-parameter mit dem die seite aufgerufen werden kann.?lang=de
wenn du die seite zb "home.php" nennest kannst die seite auch mit dieser url aufrufen: "home.php?lang=de".
dann wird normal die seite home.php aufgerufen in der es dann den get-parameter "lang" gibt, mit dem wert "de" - und genau das wird ja auch am anfang deines codes abgefragt...
du hast mich nicht ganz verstanden
ich meinte so
zb
ich seite die ist in deutsch und heist dann index.php
dann will ich zB englische seite dann eine Neu seite auf englisch und speichern unter index.php???? das der index.php exestiert schön
Ja das kannst du doch auch alles machen. Mach eine index.php mit zwei Get Variablen. Eine s, die festlegt WELCHE Seite eingebunden wird und eine lang, die festlegt in welcher Sprache die eingebunden wird. Also könnte eine BeispielURL so aussehen: testurl.com/index.php?s=home&lang=de
Dann würde auf index.php die Seite home eingebunden und zwar in der Sprache Deutsch.
Das ganze kannst du zum Beispiel so abfragen:
if(isset($_GET['s']) && isset($_GET['lang'])) { $lang = $_GET['lang']; $s = $_GET['s']; include($s . "_" . $lang . ".php"); }
Denk dann noch bitte dran das ganze vernünftig abzusichern, also zu überprüfen, ob in lang und s auch die richtigen Inhalte übergeben wurden.
Und deine Seiten speicherst du dann ab unter:
home_de.php
home_en.php
impressum_de.php
impressum_en.php
Und so weiter..
Wenn du es noch einfacher haben willst, klatsch die Inhalte in eine Datenbank und les die entsprechend $lang und $s aus. -
doch doch...
die aufzurufende seite heißt dann immer index.php
es wird mittels des o.g. get-parameters unterschieden.
in der index.php wird dann je nach get-parameter eine andere ressource includiert, also wird entweder die datei "lang_de.php" eingebunden wenn die index.php ganz ohne ?lang aufgerufen wird oder mit ?lang=de
damit eine andere datei includiert wird musst du die index.php mit entsprechend anderem parameter aufrufen, zb: "index.php?lang=en" dann würde die index.php die datei lang_en.php einfügen...
natürlich brauchst du dann neben der index.php auch die dateien lang_de.php und lang_en.php -
midwar schrieb:
tshaika schrieb:
hcms schrieb:
das
stellt nicht den dateinamen dar, sondern ist ein get-parameter mit dem die seite aufgerufen werden kann.?lang=de
wenn du die seite zb "home.php" nennest kannst die seite auch mit dieser url aufrufen: "home.php?lang=de".
dann wird normal die seite home.php aufgerufen in der es dann den get-parameter "lang" gibt, mit dem wert "de" - und genau das wird ja auch am anfang deines codes abgefragt...
du hast mich nicht ganz verstanden
ich meinte so
zb
ich seite die ist in deutsch und heist dann index.php
dann will ich zB englische seite dann eine Neu seite auf englisch und speichern unter index.php???? das der index.php exestiert schön
Ja das kannst du doch auch alles machen. Mach eine index.php mit zwei Get Variablen. Eine s, die festlegt WELCHE Seite eingebunden wird und eine lang, die festlegt in welcher Sprache die eingebunden wird. Also könnte eine BeispielURL so aussehen: testurl.com/index.php?s=home&lang=de
Dann würde auf index.php die Seite home eingebunden und zwar in der Sprache Deutsch.
Das ganze kannst du zum Beispiel so abfragen:
if(isset($_GET['s']) && isset($_GET['lang'])) { $lang = $_GET['lang']; $s = $_GET['s']; include($s . "_" . $lang . ".php"); }
Denk dann noch bitte dran das ganze vernünftig abzusichern, also zu überprüfen, ob in lang und s auch die richtigen Inhalte übergeben wurden.
Und deine Seiten speicherst du dann ab unter:
home_de.php
home_en.php
impressum_de.php
impressum_en.php
Und so weiter..
Wenn du es noch einfacher haben willst, klatsch die Inhalte in eine Datenbank und les die entsprechend $lang und $s aus.
und wie sol ich am beste verlinken
<a href=" " ><img src="bundesflagge.jpg" width="30" height="20" border="1" alt="">
Beitrag zuletzt geändert: 12.2.2013 15:05:29 von tshaika -
zb so:
<a href="index.php?lang=de"><img src="bundesflagge.jpg" width="30" height="20" border="1" alt=""></a> <a href="index.php?lang=en"><img src="unionjack.jpg" width="30" height="20" border="1" alt=""></a>
-
tshaika schrieb:
midwar schrieb:
tshaika schrieb:
hcms schrieb:
das
stellt nicht den dateinamen dar, sondern ist ein get-parameter mit dem die seite aufgerufen werden kann.?lang=de
wenn du die seite zb "home.php" nennest kannst die seite auch mit dieser url aufrufen: "home.php?lang=de".
dann wird normal die seite home.php aufgerufen in der es dann den get-parameter "lang" gibt, mit dem wert "de" - und genau das wird ja auch am anfang deines codes abgefragt...
du hast mich nicht ganz verstanden
ich meinte so
zb
ich seite die ist in deutsch und heist dann index.php
dann will ich zB englische seite dann eine Neu seite auf englisch und speichern unter index.php???? das der index.php exestiert schön
Ja das kannst du doch auch alles machen. Mach eine index.php mit zwei Get Variablen. Eine s, die festlegt WELCHE Seite eingebunden wird und eine lang, die festlegt in welcher Sprache die eingebunden wird. Also könnte eine BeispielURL so aussehen: testurl.com/index.php?s=home&lang=de
Dann würde auf index.php die Seite home eingebunden und zwar in der Sprache Deutsch.
Das ganze kannst du zum Beispiel so abfragen:
if(isset($_GET['s']) && isset($_GET['lang'])) { $lang = $_GET['lang']; $s = $_GET['s']; include($s . "_" . $lang . ".php"); }
Denk dann noch bitte dran das ganze vernünftig abzusichern, also zu überprüfen, ob in lang und s auch die richtigen Inhalte übergeben wurden.
Und deine Seiten speicherst du dann ab unter:
home_de.php
home_en.php
impressum_de.php
impressum_en.php
Und so weiter..
Wenn du es noch einfacher haben willst, klatsch die Inhalte in eine Datenbank und les die entsprechend $lang und $s aus.
und wie sol ich am beste verlinken
<img src="bundesflagge.jpg" width="30" height="20" border="1" alt="">
Aha, du möchtest also irgendwo Flaggen eingeblendet haben, dann klickt man auf eine Flagge und schon ist die gesamte Homepage in einer anderen Sprache zu sehen. Dann sag das bitte doch. Wenn du mal deine Fragen in vernünftigem Deutsch verfassen würdest, hätte man das viel früher kapiert.
Zu deiner Frage:
Entweder du zählst jeden deiner einzelnen Links auf und stellst die jeweilige Flagge dahinter, oder du machst es über Sessions. Ich habe dir oben Schritt für Schritt erklärt wie es geht, wenn du der Anleitung folgst, hast du Links nach dem Muster index.php?s=home&lang=de. Dementsprechend müsstest du, wenn du zwei Sprachen anbieten möchtest den Homelink zweimal einfügen - für jede Sprache einmal - also:
<a href="index.php?s=home&lang=de">Home <img src="deutsch.png"></a> <a href="index.php?s=home&lang=en">Home <img src="englisch.png"></a>
Wenn du das so machst, hast du zwar viel mehr Links aufzuzählen, aber du kannst das oben von mir aufgeführte Beispiel (welches sehr einfach ist) problemlos übernehmen.
Die andere Möglichkeit läuft über Sessions: Du definierst eine index.php, die GANZ AM ANFANG guckt, ob
if(isset($_SESSION['lang']) { $lang = $_SESSION['lang']; } else { $lang = "deutsch"; // Standardsprache }
Und dann packst du irgendwo auf deine Seite die Länderflaggen, die wenn du sie anklickst die Session['lang'] auf die jeweilige Sprache setzen. Fertig. -
klar. im ftp-progrmm deiner wahl (sagen wir filezilla) rechtsklick -> "Verzeichnis erstellen"...
dann achte beim include() aber darauf das du den pfad dort auch berücksichtigst:
include($lang.'/index.php');
... die dateien im ordner brauchen dann ja nicht mehr das sprchkürzel im dateinamen. -
hcms
ich hab jetz ftp ordner gemach
dann heißt dann link
<a href="ru/index.php?lang=de"><img src="bundesflagge.jpg" width="30" height="20" border="1" alt=""></a>
Beitrag zuletzt geändert: 12.2.2013 16:03:24 von tshaika -
nein, der link heißt "index.php?lang=de" - in der datei index.php muss der pfad für den include() angepasst werden (s.o.)...
-
es immer noch nicht richtig
die seite heißt
http://tshaika.lima-city.de/ru/index.flang_ru.php
und der verlinke mich auf
http://tshaika.lima-city.de/index.php?lang=ru
-
am besten postest du den code als .txt - ich steig da sonst nicht durch...
-
also hcms
Jetz schritt für schritt gesten war soviel das mich dursch anender gebrach
1 ich hab jetz seite seitenkopf.php
also brauch dann noch seitenkopf.php
in 2 sprachen (englisch lassen mal weg)
seitenkopf.lang_de.php
seitenkopf. lang_ru.php
stimmt soweit -
tshaika schrieb:
es immer noch nicht richtig
die seite heißt
http://tshaika.lima-city.de/ru/index.flang_ru.php
und der verlinke mich auf
http://tshaika.lima-city.de/index.php?lang=ru
Natürlich verlinkt der auf index.php?lang=ru... Index.php ist IMMER die Seite, auf der du dich bewegst - du verlässt niemals die index.php. Jedoch werden abhängig von den gewählten GET Parametern verschiedene Inhalte auf index.php eingebunden. Stell dir vor du möchtest auf deiner index.php Äpfel angezeigt haben und hast in index.php die Abfrage
if(isset($_GET['frucht']) && $_GET['frucht'] == 'apfel') { include("apfel.php");
Dann wird bei dir auch ein Apfel angezeigt, wenn du index.php mit dem Parameter frucht=apfel aufrufst, was dann so aussieht:
index.php?frucht=apfel
So um nun auf dein Problem zurückzukommen:
Wir haben dir in vorherigen Posts gezeigt wie es geht. Und wenn du unsere Tipps umsetzt, dann hast du eben genau das Erscheinungsbild, wie du es beschrieben hast. http://tshaika.lima-city.de/index.php?lang=ru Bedeutet hier dann einfach, dass du auf der Seite index.php bist, die mit dem Parameter lang=ru aufgerufen wurde, also mit der Einstellung, dass der Benutzer deine Homepage bitte auf Russisch angucken möchte - und wir haben dir auch gesagt, dass du den Link zu index.php mit genau DEM Parameter natürlich nur verlinken sollst, wenn man auf die Russische Flagge klickt. Würde ja wenig Sinn anders machen.
Was du glaube ich noch nicht begriffen hast, ist, dass du die jeweiligen Seiten nicht als "http://tshaika.lima-city.de/ru/index.flang_ru.php" abspeicherst, sondern immernoch als lang_NAME.php. index.php hat NICHTS im Dateinamen verloren. Zumindest wenn du dich an das von uns vorgeschlagene System hälst. -
ich würde eher einen anderen weg vorschlagen, die mehrsprachigkeit einer Seite zu ermöglichen. Es ist aber shcon einie abstraktere Programmierung.
der Weg, den ich vorschlagen will, ist der weg über Platzhalter. Wenn man eine Mehrsprachige seite macht, indem man denselben Code mehrfach kopiert, bekommt man das Problem, dass man bei Updates diese Änderungen an mehreren Stellen simultan machen muss.
dazu folgende Lektüre: http://php.net/manual/de/function.define.php
das würde so aussehen, dass du ein require_once auf die gewählte Sprach-Datei machst. Die sprach-Datei würde dann folgendermaßen aussehen:
//file: lang_de.php define('MENUE', "Menü"); define('TEST', "Testeintrag"); define('IMPRESSUM', "Opossum"); define('ENTRY_1', "Sinnloser Eintrag"); define('MSG_OF_THE_DAY', "Nachricht des Tages"); . . . //eher für die statischen Elemente der Seite, keine Content-Bereiche, //die würde ich über Datenbank-blobs lösen
//file: lang_en.php define('MENUE', "Menue"); define('TEST', "Test-Entry"); define('IMPRESSUM', "Impressum"); define('ENTRY_1', "Enrty without any sense"); define('MSG_OF_THE_DAY', "Message of the Day"); . . .
so, und dann würdest du einfach abfragen über
//index.php define('LANG_ROOT', "lang/"); define('INDEX_ROOT', "/"); switch($_SERVER['HTTP_ACCEPT_LANGUAGE']) { case 'de-DE': require_once(INDEX_ROOT.LANG_ROOT.'lang_de.php'); break; case 'en-EN': require_once(INDEX_ROOT.LANG_ROOT.'lang_en.php'); break; default: require_once(INDEX_ROOT.LANG_ROOT.'lang_en.php'); break; } //build_page
und wie du oben siehst, kannst du das dementsprechend verwenden, innerhalb eines HTML-templates müsstest du dann die platzhalter über <?php echo PLATZ_HALTER ?> einfügen. die datei mus dann aber .php endung haben, damit er die php-codes entsprechend ausführt.
wär ein vorschlag. der vorteil ist, du hast die struktur nur einmal und musst sie entsprechend nur einmal bearbeiten und die gesamte geschichte wird übersichtlicher. wenn du dann noch über eine datenbank gehst, kannst ud sogar abprüfen lassen, ob alle Einträge vorhanden sind. -
klar gibt es viele verschiedene möglichkeiten dein vorhaben zu realisieren, und der von sebulon hat natürlich seine vorteile aber um den zu erst angesprochenen fall nochmal zu verdeutlichen:
ordner und dateien auf dem webspace:
/index.php
/impressum.php
/de/
/de/seitenkopf.php
/de/index.php
/de/impressum.php
/de/seitenfuss.php
/en/
/en/seitenkopf.php
/en/index.php
/en/impressum.php
/en/seitenfuss.php
/ru/
/ru/seitenkopf.php
/ru/index.php
/ru/impressum.php
/ru/seitenfuss.php
die index.php würde dann ungefähr so aussehen:
<?php $standart_sprache = 'de'; $verfuegbare_andere_sprachen = array('en','ru'); if(isset($_GET['lang']) and in_array($_GET['lang'],$verfuegbare_andere_sprachen)) { $lang = $_GET['lang']; }else { $lang = $standart_sprache; } include($lang.'/seitenkopf.php'); include($lang.'/index.php'); include($lang.'/seitenfuss.php'); ?>
die impressum.php würde dann ungefähr so aussehen:
<?php $standart_sprache = 'de'; $verfuegbare_andere_sprachen = array('en','ru'); if(isset($_GET['lang']) and in_array($_GET['lang'],$verfuegbare_andere_sprachen)) { $lang = $_GET['lang']; }else { $lang = $standart_sprache; } include($lang.'/seitenkopf.php'); include($lang.'/impressum.php'); include($lang.'/seitenfuss.php'); ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage