Hallo zusammen,
ich bin gerade dabei meine Seite mehrsprachig aufzubauen. Hierfür nutze ich Übersetzungsseiten im .json-Format.
Die Sprache würde ich gerne als Cookie ($_COOKIE["language"]) regeln. Jetzt habe ich das Problem, dass zwar ein Cookie namens language und dem Inhalt de_DE oder us_US erstellt, jedoch anschließend nicht die richtige Übersetzungsdatei geladen wird, weil der $_COOKIE["language"] wohl NULL sei. Angezeigt wird er mir im Dev-Tool jedoch mit dem Inhalt us_US. Erst nach einem reload oder nach einer Weiterleitung wird dann die richtige Übersetzungsdatei geladen.
Code aus meiner header-Datei und somit der Datei, die bei egal welchem Unterseitenaufruf IMMER als erstes geladen wird.
Zudem kann der Cookie language für diverse andere Zwecke via POST (weil die Sprachenänderung für den User mit Sprachenflaggen in Form von <forms> gehandhabt wird) und GET (aus einem Link mit z.B. $lang=us_US) geändert werden.
Hier der konkrete Fall. Sollte ich die Seite zum ersten Mal besucht haben und noch kein Cookie language gesetzt sein, dann wird obwohl beim ersten Besuch der Cookie language zwar laut Dev-tool gesetzt wird ( siehe den else-Fall der if-Schleife ), jedoch versucht er dann mit $lang_file_content die Datei zu laden, bei der $_COOKIE["language"] dann NULL ist... Wenn ich mit header("Location: #"); die Seite nach der Erstellung des Cookies nochmals reloade dann lädt er die richtige Datei und alles funkst.
Vielleicht kann mir jemand helfen ? Fehler von PHP bekomme ich abgesehen von $_COOKIE["language"] = NULL keine angezeigt.
ich bin gerade dabei meine Seite mehrsprachig aufzubauen. Hierfür nutze ich Übersetzungsseiten im .json-Format.
Die Sprache würde ich gerne als Cookie ($_COOKIE["language"]) regeln. Jetzt habe ich das Problem, dass zwar ein Cookie namens language und dem Inhalt de_DE oder us_US erstellt, jedoch anschließend nicht die richtige Übersetzungsdatei geladen wird, weil der $_COOKIE["language"] wohl NULL sei. Angezeigt wird er mir im Dev-Tool jedoch mit dem Inhalt us_US. Erst nach einem reload oder nach einer Weiterleitung wird dann die richtige Übersetzungsdatei geladen.
Code aus meiner header-Datei und somit der Datei, die bei egal welchem Unterseitenaufruf IMMER als erstes geladen wird.
Zudem kann der Cookie language für diverse andere Zwecke via POST (weil die Sprachenänderung für den User mit Sprachenflaggen in Form von <forms> gehandhabt wird) und GET (aus einem Link mit z.B. $lang=us_US) geändert werden.
Code:
// configuration of the language with the cookie $_COOKIE["language"]
if((isset($_COOKIE["language"]) AND $_COOKIE["language"] == 'de_DE') OR (isset($_COOKIE["language"]) AND $_COOKIE["language"] == 'us_US')){
// change language with get ?lang
if(isset($_GET["lang"]) AND !empty($_GET["lang"])){
setcookie("language", htmlspecialchars($_GET["lang"]), time()+(3600*24*365), '/');
$_SESSION["user_language"] = htmlspecialchars($_GET["lang"]);
$translations = json_decode($lang_file_content, true);
$_GET["lang"] = NULL;
}
// change language with language flag
if(isset($_POST['lang']) AND !empty($_POST['lang'])){
$_SESSION["user_language"] = htmlspecialchars($_POST["lang"]);
setcookie("language", htmlspecialchars($_POST["lang"]), time()+(3600*24*365), '/');
}
} elseif(!isset($_COOKIE["language"]) AND ((isset($_POST["lang"]) AND !empty($_POST["lang"])) OR (isset($_GET["lang"]) AND !empty($_GET["lang"])))) {
// change language with get ?lang
if(isset($_GET["lang"]) AND !empty($_GET["lang"])){
setcookie("language", htmlspecialchars($_GET["lang"]), time()+(3600*24*365), '/');
$_SESSION["user_language"] = htmlspecialchars($_GET["lang"]);
$translations = json_decode($lang_file_content, true);
$_GET["lang"] = NULL;
}
// change language with language flag
if(isset($_POST['lang']) AND !empty($_POST['lang'])){
$_SESSION["user_language"] = htmlspecialchars($_POST["lang"]);
setcookie("language", htmlspecialchars($_POST["lang"]), time()+(3600*24*365), '/');
}
} elseif((isset($_COOKIE["language"]) AND $_COOKIE["language"] != "de_DE") OR (isset($_COOKIE["language"]) AND $_COOKIE["language"] != "us_US")) {
// if changed and not de_DE or us_US
setcookie("language","us_US",time()+(3600*24*365), '/');
include_once $_SERVER['DOCUMENT_ROOT'] . "/nocookies.php";
exit();
} else {
// set language cookie
setcookie("language", "us_US", time()+(3600*24*365), '/');
}
// language files
$lang_file_content = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/config/lang/" . $_COOKIE["language"] . ".json");
$translations = json_decode($lang_file_content, true);
Vielleicht kann mir jemand helfen ? Fehler von PHP bekomme ich abgesehen von $_COOKIE["language"] = NULL keine angezeigt.