mehrsprachig
dennis94m
- php
liebe forumianer,
hab mal wieder eine frage und zwar habe ich vor meine webseite in deutsch und englisch anzubieten. dazu habe ich im ordner "lang" die dateien de.php und en.php erstellt. in diesen php-Dateien sind dann die einzelnen variablen festgelegt.
zb:
$welcome = "Willkommen";
bzw:
$welcome = "Welcome";
Die php-Dateien lade ich per include in das jeweilige dokument und zwar so:
<?
$lang = $_GET['lang'];
include ("lang/$lang.php");
?>
Also wenn ein User dann auf "example.php?lang=de" geht kommt die seite in deutsch bzw. wenn er auf "example.php?lang=en" geht kommt die seite in englisch.
Nun muss ich aber teilweise formulare auch per "post" abschicken und habe auch bei anderen aktionen gemerkt das das anhaengsel "lang=xx" verschwindet.
Meine Frage also:
Wie kann ich dieses Problem noch loesen?
Kann ich irgendwie (nicht über URL-Variablen) den Wert fest einschreiben?
ich habe links auf der seite für deutsch und englisch.
viele gruesse,
dennis
Grüße,
Kann ich irgendwie (nicht über URL-Variablen) den Wert fest einschreiben?
über POST?
MFG
bleicher
ok bin grade auf die idee sessions gekommen. kann man das damit nicht loesen. ich moechte, das waehrend dem kompletten seitenbesuch die ausgewaehlte sprache gespeichert wird.
wie koennte das mit sessions gehen?
leibe gruesse,
dennis
Hi,
ok bin grade auf die idee sessions gekommen. kann man das damit nicht loesen. ich moechte, das waehrend dem kompletten seitenbesuch die ausgewaehlte sprache gespeichert wird.
wie koennte das mit sessions gehen?
In dem man die Sprachauswahl in der Session hinterlegt und von dort auch wieder ausliest.
MfG ChrisB
ok ich bin anfaenger auf dem gebiet waere ganz lieb wenn mir einer ein kurzes beispiel oder ein link zu einem beispiel posten koennte.
viele gruesse,
dennis
Hi,
ok ich bin anfaenger auf dem gebiet waere ganz lieb wenn mir einer ein kurzes beispiel oder ein link zu einem beispiel posten koennte.
http://tut.php-quake.net/de/sessions.html
http://www.php.net/manual/en/book.session.php
MfG ChrisB
ok...danke...trotzdem habe ich irgendwas falsch gemacht:
index.php:
<?php include('lang.php'); ?>
lang.php:
<?php session_start();
if ($HTTP_PODT_VARS['lang'])
{
session_register ("lang")
$sid = session_id();
}
if ($sid == "")
{
session_register("en-GB") //Hiermit möchte ich bezwecken, dass wen keine Sprache ausgewählt wurde, Englisch gewählt wird.
}
else
{
include ($lang.".php");
}
liebe gruesse,
dennis
if ($HTTP_PODT_VARS['lang'])
daran liegts nicht nur vertippt! sorry
ok mittlerweile bin ich soweit
<?php
session_start ();
if ($_GET['lang'])
{
session_register ($_GET['lang']);
$sid = session_id();
}
if ($sid == "")
{
include ('de-DE.php');
}
else
{
include ($_GET['lang'].".php");
}
?>
Problem:
wenn ich die seite direkt über index.php aufrufe wird de-DE benutzt.
wenn ich die seite ueber index.php?lang=en-GB aufrufe wird en-GB benutzt.
Nur wenn ich jetzt erneut wieder direkt index.php aufrufe wurde englisch nicht aktiviert, d.h. es wird wieder deutsch angezegit.
wie loes ich dieses problem?
Hello,
ok mittlerweile bin ich soweit
<?phpsession_start ();
if (isset($_GET['lang']))
{
$_SESSION['lang'] = $_GET['lang'];
}
So würde die Sprache immer nue gesetzt werden, wenn dies per Get-Request gefordert wird.
Wenn nun kein Sprachparameter mehr mitgeschickt wird, soll aber trotzdem eine Sprache definiert sein. Das machstg Du, indem Du in die Session schaust, was dort eingetragen ist.
if (!isset($_SESSION['lang']))
{
## Standardsprache setzen
## ...
}
else
{
## prüfen ob $_SESSION['lang'] gültig ist
## wenn nicht eine gültige Standardsprache setzen
}
## Hier die eingestellte Sprache laden
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
also wenn ich das jetzt richtig verstanden habe so
$_SESSION['lang'] = $_GET['lang'];
if (!isset ($_SESSION['lang']))
{
include ($_SESSION['lang'].".php");
}
else
{
include ('de.php')
}
Hello,
also wenn ich das jetzt richtig verstanden habe so
Nein!
Ich hatte es Dir anders aufgeschrieben!
Du musstest es doch niur abschreiben!
!
So würde $_SESSION['lang'] immer mit false überschrieben werden, wenn im Get-Request keine Sprache angegeben war.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
irgendwas versteh ich dann falsch
if (!isset($_SESSION['lang']))
{
## Dasheißt doch wenn $SESSION['lang'] exisitiert, soll ich hier
## die standardsprache Deutsch einfügen
}
else
{
## prüfen ob $_SESSION['lang'] gültig ist (ist doch oben schon)
## wenn nicht eine gültige Standardsprache setzen (ist doch auch oben schon)
}
## Hier die eingestellte Sprache laden (???)
sorry, ich verstehs einfach nicht. Könntest du es vielleicht mir zuliebe kommplett ausschreiben. wäre echt super.
leibe gruesse, dennis
Hello,
irgendwas versteh ich dann falsch
Oh Mann! Also nochmal... :-)
<?php
## fürs Debugging:
error_reporting(E_ALL);
ini_set('display_errors, 1);
session_start();
## erlaubte Werte für Language
$_lang = array('de','fr','en','es'); ### und so weiter
## Sprache neu setzen, wenn dies gefordert wurde
if (isset($_GET['lang']))
{
## Prüfen ob die angeforderte Sprache einen erlaubten Wert enthält
if (in_array($_GET['lang'], $_lang))
{
$_SESSION['lang'] = $_GET['lang'].'.php';
}
}
if (!isset($_SESSION['lang']))
{
## Das heißt doch, wenn $SESSION['lang'] NICHT exisitiert, soll ich hier
## die standardsprache Deutsch einfügen
## genau!
$_SESSION['lang'] = 'de.php';
}
## Hier die eingestellte Sprache laden
include ($_SESSION['lang']);
Das include mit einem Wert aus einem Request darfst Du nur durchführen, wenn Du diesen vorher auf erlaubte Werte gecheckt hast. Andernfalls könnte der Client hier jedes File, dass für PHP auf deinem Server erreichbar ist, oder sogar welche von außen (über http://) includen lassen. Damit könnte man Deinen Server übernehmen.
So, wie das include jetzt durchgeführt wird, muss sichergestellt sein, dass es die erlaubten Dateien auch gibt. Sonst müsstest Du noch zusätzlich mit is_readable() prüfen.
http://de.php.net/manual/en/function.is-readable.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
super genauso hab ichs mir vorgestellt...ich weiß das du dafür jetzt auch Geld verlangen könntest aber Danke nochmal.
Und so ist jetzt sichergestellt, das die Sprache auch noch funktioniert, wenn keine $_Get-Variable mehr existiert?
lg, dennis
Hello,
super genauso hab ichs mir vorgestellt...ich weiß das du dafür jetzt auch Geld verlangen könntest aber Danke nochmal.
Samstags nie :-)
Und so ist jetzt sichergestellt, das die Sprache auch noch funktioniert, wenn keine $_Get-Variable mehr existiert?
Probier es doch aus.
Aber es sollte Dir auch möglich sein, den Code nachzuvollziehen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
ok...guten morgen sonntag und weiter gehts..
den satzt mit den 4 stunden nehm ich zurück war besser so...
also folgendes:
<?php
session_start();
## erlaubte Werte für Language
$_lang = array('de-DE','fr-FR','en-GB','es-ES'); ### und so weiter
## Sprache neu setzen, wenn dies gefordert wurde
if (isset($_GET['lang']))
{
## Prüfen ob die angeforderte Sprache einen erlaubten Wert enthält
if (in_array($_GET['lang'], $_lang))
{
$_SESSION['lang'] = $_GET['lang'].'.php';
}
}
if (!isset($_SESSION['lang']))
{
## Das heißt doch, wenn $SESSION['lang'] NICHT exisitiert, soll ich hier
## die standardsprache Deutsch einfügen
## genau!
$_SESSION['lang'] = 'de-DE.php';
}
## Hier die eingestellte Sprache laden
include ($_SESSION['lang']);
?>
funktioniert auch einwandfrei...
und ist das jetzt so sicher?
wenn ich allerdings eine falsche sprache einstelle bekomme ich genauso fehlermeldungen..."no such file or directiory". ich möchte dann aber auch eine bestimmte seite verweisen.
D.h. wenn die Sprache nicht existiert, möchte ich auf die seite error.php
lg, dennis
Hello,
wenn ich allerdings eine falsche sprache einstelle bekomme ich genauso fehlermeldungen..."no such file or directiory".
Die Meldung brauche ich vollständig!
Welches File wurde denn gesucht?
Auf welchem System testet Du?
Es könnte sein, dass da noch eine alte Session vorhanden ist, die wiederaufgenommen wird.
ich möchte dann aber auch eine bestimmte seite verweisen.
D.h. wenn die Sprache nicht existiert, möchte ich auf die seite error.php
Ich hatte Dich ja schon darauf hingewiesen, dass Du das Include noch mit einem is_readable() absichern kannst.
statt:
## Hier die eingestellte Sprache laden
include ($_SESSION['lang']);
setze:
## Hier die eingestellte Sprache laden, wenn vorhanden
if (is_readable($_SESSION['lang']))
{
include_once ($_SESSION['lang']);
}
else
{
## Fehlerbehandlung wegen nicht lesbarer oder nicht vorhandener Sprachdatei,
## was aber nur in Ausnahmefällen zutreffen dürfte, da ja zu jeder erlaubten
## Sprache auch eine Datei gehören sollte
}
Ich hoffe, dass ich da jetzt selber keinen Denkfehler gemacht habe, es dürfte überhaupt nicht zur von Dir beschriebenen Fehlermeldung führen, wenn Du für jede erlaubte Sprache auch eine Sprachdatei hast. Dann könnte nur noch eine alte Eintragung in $_SESSION vorhanden sein, für die es keine Datei gibt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ok....also das ganze sieht jetzt so aus:
Funktioniert auch alles einwandfrei.
Wenn ich jetzt irgendeinwert eingebe (zb: lang=reingelegt) bleibt die alte Sprache vorhanden udn es kommt keine fehlermeldung!!!
<?php
// mehr brauchst nicht,
// es sei denn Du willst noch ne Abfrage
// nach der Browsersprache machen
session_start();
$lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR');
// erster Seitenaufruf ? dann ist die voreingestellte Sprache deutsch
if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';
// Sprachwechsel ? dann Sprache aus GET-Variable übernehmen
if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))
{
$_SESSION['lang'] = $_GET['lang'];
}
include ($_SESSION['lang'].'.php');
?>
da ist es eigentlich vollkommen unnötig eine fehlermeldung einzubauen. Entschuldigung ich habe einen Denkfehler gemacht.
Und das ganze kann ich jetzt wie du gesagt hast noch durch is-readable() absichern. Müsste dann so aussehen oder:
<?php
// mehr brauchst nicht,
// es sei denn Du willst noch ne Abfrage
// nach der Browsersprache machen
session_start();
$lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR');
// erster Seitenaufruf ? dann ist die voreingestellte Sprache deutsch
if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';
// Sprachwechsel ? dann Sprache aus GET-Variable übernehmen
if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))
{
$_SESSION['lang'] = $_GET['lang'];
}
if (is_readable($_SESSION['lang'].'.php'))
{
include ($_SESSION['lang'].'.php');
}
else
{
print "Error";
}
?>
Hello,
Ok....also das ganze sieht jetzt so aus:
Funktioniert auch alles einwandfrei.
Wenn ich jetzt irgendeinwert eingebe (zb: lang=reingelegt) bleibt die alte Sprache vorhanden udn es kommt keine fehlermeldung!!!
Und das ganze kann ich jetzt wie du gesagt hast noch durch is-readable() absichern. Müsste dann so aussehen oder:
<?php
// mehr brauchst nicht,
// es sei denn Du willst noch ne Abfrage
// nach der Browsersprache machen
session_start();
$lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR');
// erster Seitenaufruf ? dann ist die voreingestellte Sprache deutsch
if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';// Sprachwechsel ? dann Sprache aus GET-Variable übernehmen
if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))
{
$_SESSION['lang'] = $_GET['lang'];
}if (is_readable($_SESSION['lang'].'.php'))
{
include ($_SESSION['lang'].'.php');
}
else
{
print "Error";
}
?>
So sieht es gut aus.
Wobei ich nicht einfach "Error" \_ausgeben\_ würde, sondern ein Fehlerflag setzen würde, was dann von den nachfolgenden Modulen ausgewertet werden kann. Dann ist die Chance größer, dass der User trotzdem immer ein valides HTML-Dokument bekommt, wenn auch mit für ihn wenig nützlichem Inhalt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
ok...hab das so jetzt mal getest...leider funktionierts jetzt nicht mehr...die sprache wird nicht mehr geladen....ohne fehlermeldung
doch die fehlermeldung "error" erscheint"
aber die datei existiert!!!
Hello,
doch die fehlermeldung "error" erscheint"
aber die datei existiert!!!
Wo stehen denn die Sprachdateien?
Stehen die im selben Verzeichnis, wie Deine Script-Datei?
Oder hast Du sie ins include-Dir gepackt?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
das script und die datei im selben verzeichnis
Hello,
das script und die datei im selben verzeichnis
Lass Dir doch nicht jeden Wurm einzeln aus der Nase ziehen!
Welches OS?
Was für ein Filesystem?
Wie sind die Rechte eingestellt?
Wird die Datei vielleicht noch von Deinem Editor gesperrt gehalten?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
editor sperrt nichts.
verzeichniss lang = 775
datei de-DE.php = 644
datei lang.php = 644
os, filesystem = ?
Apache/2.2 Server
Hello,
editor sperrt nichts.
verzeichniss lang = 775
datei de-DE.php = 644
datei lang.php = 644os, filesystem = ?
Apache/2.2 Server
ist bei diesem Host der safe_mode aktiviert?
Funktioniert es denn ohne "is_readable()"?
Dann muss es auch mit funktionieren. Ein File, das Du nicht lesen kannst, kannst Du auch nicht includen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
Hello,
editor sperrt nichts.
verzeichniss lang = 775
datei de-DE.php = 644
datei lang.php = 644os, filesystem = ?
Apache/2.2 Server
ist bei diesem Host der safe_mode aktiviert?
Funktioniert es denn ohne "is_readable()"?
Dann muss es auch mit funktionieren. Ein File, das Du nicht lesen kannst, kannst Du auch nicht includen.
ABER (nur zur Vollständigkeit fürs Archiv): liegt das File im safe_mode_include_dir, dann kann man es includen, aber nicht normal lesen... Du hast aber bestätigt, dass die Files im selben Verzeichnis liegen, wie das Script und _nicht_ im safe_mode_include_dir.
Da hier keine Antwort mehr kommt, wollte ich das nicht schuldig bleiben.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
sorry ich musste gestern abend überraschend weg.
also es liegt nicht im safe_mode_include_dir!
liegt im selben ordner wie das script
aber ohne is_readable funktioniert es???
lg, dennis
Hello,
sorry ich musste gestern abend überraschend weg.
also es liegt nicht im safe_mode_include_dir!
liegt im selben ordner wie das script
aber ohne is_readable funktioniert es
Das kann ich mir nicht weiter erklären.
Da kann ich nur noch Tippfehler oder sonstige Dinge vermuten, die ich nicht sehen kann.
Vielleicht fällt ja sonst noch jemand 'was ein.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
hab gerade nochmal was ausprobiert und zwar folgendes
hab mal echo getcwd(); eingegeben ins script an ende
spuckt folgendes aus:
Error/users/meinname/www/HAUPTVERZEICHNIS/doc/web-manuals
Lösung:
<?php
session_start();
$lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR'); //Alle verfügbaren Sprache im Fomat sprache-LAND
// Erster Seitenaufruf? Dann ist die voreingestellte Sprache Deutsch!
if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';
// Sprachwechsel? Dann Sprache aus GET-Variable übernehmen und "speichern"
if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))
{
$_SESSION['lang'] = $_GET['lang'];
}
if (file_exists('../../lang/' . $_SESSION['lang'].'.php'))
{
include ('../../lang/' . $_SESSION['lang'].'.php');
}
else
{
print "Error. The language is not available. Please inform the administrator";
//DIese Fehlermeldung wird nur angezeigt, wenn einer der oben erlaubten Sprachdateien gelöscht oder nicht verfügbar ist.
}
?>
Hello,
Lösung:
<?php
session_start();
$lang_array = array('de-DE', 'en-GB', 'es-ES', 'it-IT', 'fr-FR'); //Alle verfügbaren Sprache im Fomat sprache-LAND
// Erster Seitenaufruf? Dann ist die voreingestellte Sprache Deutsch!
if (!isset($_SESSION['lang'])) $_SESSION['lang'] = 'de-DE';// Sprachwechsel? Dann Sprache aus GET-Variable übernehmen und "speichern"
if (isset($_GET['lang']) && in_array($_GET['lang'], $lang_array))
{
$_SESSION['lang'] = $_GET['lang'];
}if (file_exists('../../lang/' . $_SESSION['lang'].'.php'))
{
include ('../../lang/' . $_SESSION['lang'].'.php');
}
else
{
print "Error. The language is not available. Please inform the administrator";
//DIese Fehlermeldung wird nur angezeigt, wenn einer der oben erlaubten Sprachdateien gelöscht oder nicht verfügbar ist.
}
?>
>
Wobei das mMn sachlich falsch ist.
Ich habe mich aber schon gewundert, wieso Christian Seiler in seinem Beispiel zum Autoloader (ist ein anderes Hauptthema, aber eine ähnlicher Zusammenhang bzüglich Verfügbarkeitstest) file\_exists() benutzt und nicht is\_readable(), obwohl er es sonst immer sehr genau nimmt.
Ein File, das vorhanden ist, muss nämlich nicht unbedingt lesbar sein. Is\_readable() wäre also die richtige Funktion.
Da gibt es also noch ein dunkles Geheimnis.
Mal sehen, ob sich das noch klären lässt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
Funktioniert einwandfrei.
Jetzt stellt euch mal vor jemand hätte gleich auf meine Frage das gepostet:
<?php
session_start();
if (isset($_GET['lang']))
{
$_SESSION['lang'] = $_GET['lang']; //Hiermit wird sichergestellt, das der GET-Wert verwendet wird, wenn er verfügbar ist.
}
else if (!isset($_SESSION['lang'])) // falls in Session noch keine Sprache eingetragen worden ist, Standardsprache "Deutsch" setzen.
{
$_SESSION['lang'] = 'de-DE'; //Sprachkürzel angeben.
}
include $_SESSION['lang'] . '.php'; //Hiermit wird dann die entsprechende Sprachdatei inkludiert.
?>
es wären mir (siehe Postingszeiten) 4 Stunden erspart geblieben.
an dieser stell gruß an chris ;-)
bis dann, dennis
Hello,
Funktioniert einwandfrei.
Das sieht nur so aus. Warts ab, bis jemand Dir eine Sprache einstellt, die Du nicht vorgesehen hast.
Und meinen Sicherheitshinweis hast Du acuh nicht berücksichtigt.
include $_SESSION['lang'] . '.php'; //Hiermit wird dann die entsprechende Sprachdatei inkludiert.
Das glaubst aber nur DU!
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
Funktioniert einwandfrei.
Jetzt stellt euch mal vor jemand hätte gleich auf meine Frage das gepostet:
Das hätte *keiner* machen "dürfen" - Tom hat ja schon darauf hingewiesen, dass da noch eine eklatante Sicherheitslücke drin steckt.
es wären mir (siehe Postingszeiten) 4 Stunden erspart geblieben.
Also noch vier Stunden Lernzeit deinerseits weniger - dabei zeigst du ja, wie nötig du sie noch brauchst.
MfG ChrisB
Mahlzeit dennis94m,
Jetzt stellt euch mal vor jemand hätte gleich auf meine Frage das gepostet:
Dann hätte er Dich in falsche Sicherheit gewiegt, Du hättest NOCH weniger Ahnung von der gesamten Problematik und würdest weiterhin nur zusammengeklaute Codefetzen solange aneinanderstoppeln, bis keine offensichtlichen Fehlermeldungen mehr nerven.
Bist Du Dir sicher, dass Du das willst?
es wären mir (siehe Postingszeiten) 4 Stunden erspart geblieben.
Sieh's mal anders: Du hättest 4 Stunden weniger Zeit gehabt, Dich mit der Problematik auseinanderzusetzen (und offenbar war bereits das zu wenig!).
Im Übrigen sind wir hier im "SELF"HTML-Forum ... nicht bei "Ich-hab-keine-Ahnung,-wie-ich-das,-was-ich-will,-umsetzen-kann-und-auch-keinen-Bock-auf-Lernen-oder-so,-aber-hier-gibt's-bestimmt-haufenweise-Deppen,-die-mir-mal-eben-schnell-funzende-Proggies-coden"HTML.
MfG,
EKKi
Hi,
if ($HTTP_POST_VARS['lang'])
Welche Uralt-PHP-Version nutzt du, in der das noch nötig ist?
Aktuell ist $_POST.
session_register ("lang")
Welche Uralt-PHP-Version nutzt du, in der das noch nötig ist?
Aktuell ist $_SESSION.
if ($sid == "")
{
session_register("en-GB") //Hiermit möchte ich bezwecken, dass wen keine Sprache ausgewählt wurde, Englisch gewählt wird.
Dann frage ab, ob die Session-Variable einen Wert enthält.
MfG ChrisB
Hallo,
Nun muss ich aber teilweise formulare auch per "post" abschicken und habe auch bei anderen aktionen gemerkt das das anhaengsel "lang=xx" verschwindet.
Das kann normalerweise nicht passieren, wenn du ?lang= im action-Attribut des Formulars festlegst.
Bei GET-Formularen erstelltst du ein verstecktes input-Feld mit den entsprechenden Werten.
Nebenbei: Starte php-Abschnitte immer mit <?php :-)
Gruß
hab das ganze wie folgt geloest
<?php
session_start ();
$_SESSION["lang"] = ($_GET["lang"]);
include ($_SESSION['lang'].".php");
?>
Problem: Sobald ich die URL-Variable "lang" entferne funktioniert nichts mehr. Sie wie kann ich die session speichern?
hi,
hab mal wieder eine frage und zwar habe ich vor meine webseite in deutsch und englisch anzubieten. dazu habe ich im ordner "lang" die dateien de.php und en.php erstellt. in diesen php-Dateien sind dann die einzelnen variablen festgelegt.
Ich habe mir jetzt diesen Thread durch gelesen und möchte eine Alternative zu SESSION vorschlagen, wobei ich noch nicht ganz nachvollziehen kann, warum so eine wichtige Funktion von einer SESSION und GET abhängig gemacht wird.
Wie dem auch sei, wenn du die möglichkeit hast, Subdomains anzulegen, dann lege eine für deutsch an, bspw. „de.example.org“.
Diese Domain lässt du auf dein Root (/) zeigen, sprich, egal, ob du mit oder ohne das „de.“ in der URI die Seite aufrufst, bekommst du immer die gleiche index.php angezeigt.
Nun kannst du mittels [link:http://de2.php.net/manual/de/reserved.variables.server.php@title=$_SERVER['HTTP_HOST'\]]
prüfen, ob „de.“ im Host vorkommt, wenn ja, inkludierst du die „de.php“, wenn nein, dann wird immer „en.php“ inkludiert.
Grob vereinfacht bzw. die prüfung, ob „de.“ oder nicht, überlasse ich dir ;)
if (HOST == 'de.')
{
require_once 'de.php';
}
else
{
require_once 'en.php';
}
Diese Variante hat den Vorteil, dass du nichts in der URI mitschleppen, also jedem Link innerhalb deiner Seite nicht noch irgend welche Parameter mit geben musst, denn du kannst nicht immer davon ausgehen, dass Cookies bei jedem akzeptiert werden.
Zur Ergänzung kannst du noch den Client fragen, welche Sprache er bevorzugt, und dementsprechend den Client direkt auf die richtige Seite weiterleiten.
Ermitteln der Sprache des Browsers mittels PHP
Alternative Dokumentinhalte via HTTP
mfg
Moin!
Grob vereinfacht bzw. die prüfung, ob „de.“ oder nicht, überlasse ich dir ;)
if (HOST == 'de.')
{
require_once 'de.php';
}
else
{
require_once 'en.php';
}
Ach, [du bist Schuld an diesem Thread](https://forum.selfhtml.org/?t=186398&m=1237915)...
- Sven Rautenberg
hi,
Ach, du bist Schuld an diesem Thread...
Mitgehangen, mitgefangen.
mfg
@@dennis94m:
nuqneH
Also wenn ein User dann auf "example.php?lang=de" geht kommt die seite in deutsch bzw. wenn er auf "example.php?lang=en" geht kommt die seite in englisch.
Sollte man einem Nutzer zusätzliche Arbeit aufbürden, die sein Browser doch für ihn automatisch erledigen kann? Nein, sollte man natürlich nicht. Beschäftige dich mit Sprachvereinbarung! Und s.a. diese Lösung mit Cookies
Qapla'
Hello,
Sollte man einem Nutzer zusätzliche Arbeit aufbürden, die sein Browser doch für ihn automatisch erledigen kann?
Meinst Du etwa dieses leidige Feature, dass die früher bei PHP auch immer benutzt haben?
Immer, wenn ich die englische Manualseite haben wollte, kam nach einigen Links wieder automaitsch die deutsche. :-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
»» Sollte man einem Nutzer zusätzliche Arbeit aufbürden, die sein Browser doch für ihn automatisch erledigen kann?
Meinst Du etwa dieses leidige Feature, dass die früher bei PHP auch immer benutzt haben?
offensichtlich haben die was anderes benutzt.
Immer, wenn ich die englische Manualseite haben wollte, kam nach einigen Links wieder automaitsch die deutsche. :-)
Ja, das hat mich auch schon ungefähr (n+1) mal genervt. Also kann's nicht Language Negotiation sein: Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.
Ciao,
Martin
Hello,
Ja, das hat mich auch schon ungefähr (n+1) mal genervt. Also kann's nicht Language Negotiation sein: Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.
Woher hat er die denn?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
»» Ja, das hat mich auch schon ungefähr (n+1) mal genervt. Also kann's nicht Language Negotiation sein: Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.
Woher hat er die denn?
von mir, woher sonst?
So long,
Martin
@@Tom:
nuqneH
»» Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.
Woher hat er die denn?
Grmpf, du hast den Artikel wirklich nicht gelesen.
Qapla'
@@Der Martin:
nuqneH
»» Immer, wenn ich die englische Manualseite haben wollte, kam nach einigen Links wieder automaitsch die deutsche. :-)
Ja, das hat mich auch schon ungefähr (n+1) mal genervt. Also kann's nicht Language Negotiation sein: Die Information, welche Sprache ich gerne hätte, sendet mein Browser ja schließlich mit jedem Request wieder aufs neue mit.
Wäre natürlich cool, wenn man seinen Browser nicht nur sagen lassen könnte „lieber deutsch als englisch“, sondern „lieber ein englisches Original als eine deutsche Übersetzung; ist das Original aber nicht englisch, dann lieber die deutsche Übersetzung als die englische“.
Ich erinnere mich, dass das mal auf der W3C-I18n-Mailingliste diskutiert wurde.
Qapla'
Hallo Gunnar,
Wäre natürlich cool, wenn man seinen Browser nicht nur sagen lassen könnte „lieber deutsch als englisch“, sondern „lieber ein englisches Original als eine deutsche Übersetzung; ist das Original aber nicht englisch, dann lieber die deutsche Übersetzung als die englische“.
huii, das hört sich nach einem phantastischen Traum an. Wobei ich das für mich etwas anders formulieren würde: Wenn und nur wenn das Original in deutscher Sprache vorliegt, dann bitte das deutsche Original, sonst die englische Fassung; wenn's die nicht gibt, dann meinetwegen auch niederländisch.
Ich erinnere mich, dass das mal auf der W3C-I18n-Mailingliste diskutiert wurde.
Mit welchem Erfolg? "Reden wir nächstes Jahr nochmal drüber"?
Ciao,
Martin
@@Tom:
nuqneH
Meinst Du etwa dieses leidige Feature, dass die früher bei PHP auch immer benutzt haben?
Leidig?
Du hast den Artikel
[ ] nicht gelesen.
[ ] nicht verstanden.
Immer, wenn ich die englische Manualseite haben wollte, kam nach einigen Links wieder automaitsch die deutsche. :-)
Die Problematik wurde im Artikel angesprochen und es wurden Lösungen vorgestellt.
Sprachvereinbarung sollte immer stattfinden, wenn ein Nutzer das erste Mal auf die Website kommt.
Qapla'