如何根据所选语言在php中设置会话?

时间:2014-10-20 13:01:59

标签: php

我的Site Engine主类的开头有以下主要功能。这用于在我的网站上创建所有页面。所以,在此之前我使用以下内容:

$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']);

但是,如果我只刷新没有/?language=LANG_HERE的页面,它只会恢复为默认的en。如何编辑它,所以在第一次访问页面时,它将使用默认的ENGLISH,如果以后通过访问/?language=LANG_HERE设置并加载任何其他页面,它将不会恢复为英语默认值?

3 个答案:

答案 0 :(得分:1)

因为,如果您没有$_GET['language'],则会发生案例default

//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;
}

答案 1 :(得分:0)

这是因为你有一个默认值,并且当你加载没有NULL的页面时,$ {语言是/?language=LANG_HERE,在交换机中选择了默认值。将其包裹在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;
    }
}

答案 2 :(得分:0)

使用cookies。

setcookie('lang', 'en', time()+3600*24*7*4);

将记住您的选择一个月,如果您想让它记住更长时间,请在时间()中添加更大的数字。

另外,你不需要案例&#39; en&#39;在您的交换机中,如果在其他情况下找不到,则它将使用默认值。

$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']);