Reputation: 25
I've got the following main function in the start of my Site Engine main class. This is used to create all pages on my website. So, before that I use this below:
$language = @$_GET['language'];
switch ($language) {
case 'en':
$_SESSION['lang'] = 'en';
break;
case 'tr':
$_SESSION['lang'] = 'tr';
break;
default:
$_SESSION['lang'] = 'en';
break;
}
Template::SetLanguage($_SESSION['lang']);
It works, however, if I just refresh the page without the /?language=LANG_HERE
it just reverts back to the default en
. How to edit it, so upon first time visit the page, it will use default ENGLISH, if later it's set by accessing /?language=LANG_HERE
and load any other page, it won't revert back to english as default?
Upvotes: 1
Views: 8422
Reputation: 1356
That's because you have a default and as $language is NULL
when you load the page without /?language=LANG_HERE
the default is being selected in the switch. Wrap it in a if(!is_null())
$language = @$_GET['language'];
if(!is_null($laguage)) {
switch ($language) {
case 'en':
$_SESSION['lang'] = 'en';
break;
case 'tr':
$_SESSION['lang'] = 'tr';
break;
default:
$_SESSION['lang'] = 'en';
break;
}
}
Upvotes: 1
Reputation: 1872
Use cookies.
setcookie('lang', 'en', time()+3600*24*7*4);
Will remember your selection for a month, if you want it to remember it for longer, add a bigger number to time().
Also, you don't need case 'en' in your switch, if it's not found in the other cases it will go with the default.
$language = $_GET['lang'];
if(!is_null(($language))) {
switch ($language) {
case 'tr':
setcookie('lansg', 'tr', time()+3600*24*7*4);
break;
default:
setcookie('lang', 'en', time()+3600*24*7*4);
break;
}
}
Template::SetLanguage($_COOKIE['lang']);
Upvotes: 1
Reputation: 12391
because, if you do not have $_GET['language']
, the case default
will happens.
//Starting the session
session_start();
//This is the default language. We will use it 2 places, so i am put it
//into a varaible.
$defaultLang = 'en';
//Checking, if the $_GET["language"] has any value
//if the $_GET["language"] is not empty
if (!empty($_GET["language"])) { //<!-- see this line. checks
//Based on the lowecase $_GET['language'] value, we will decide,
//what lanuage do we use
switch (strtolower($_GET["language"])) {
case "en":
//If the string is en or EN
$_SESSION['lang'] = 'en';
break;
case "tr":
//If the string is tr or TR
$_SESSION['lang'] = 'tr';
break;
default:
//IN ALL OTHER CASES your default langauge code will set
//Invalid languages
$_SESSION['lang'] = $defaultLang;
break;
}
}
//If there was no language initialized, (empty $_SESSION['lang']) then
if (empty($_SESSION["lang"])) {
//Set default lang if there was no language
$_SESSION["lang"] = $defaultLang;
}
Upvotes: 5