-1

我正在开发一个多语言网站,现在我遇到了问题。当 $_GET['setlang'] 为空时,语言设置为 en_US,即使我之前打开了 ?setlang=pl(工作正常 - 语言正在改变)

empty($_GET['setlang']) ? $_GET['setlang'] = '' : $_GET['setlang'];
    switch ($_GET['setlang']) {
        case 'en':
            $lang = 'en_US';
            putenv('LC_ALL='.$lang);
            setlocale(LC_ALL, $lang.'.UTF8');
            setcookie('lang', $lang, time()+60*60*24*365);
            $_SESSION['lang'] = $lang;
            $_config['lang'] = $lang;
            break;

        case 'pl':
            $lang = 'pl_PL';
            putenv('LC_ALL='.$lang);
            setlocale(LC_ALL, $lang.'.UTF8');
            setcookie('lang', $lang, time()+60*60*24*365);
            $_SESSION['lang'] = $lang;
            $_config['lang'] = $lang;
            break;

        default:
            if((isset($_SESSION['lang']) && $_SESSION['lang'] ='en_US') || (isset($_COOKIE['lang']) && $_COOKIE['lang'] = 'en_US')){
                $lang = 'en_US';
                putenv('LC_ALL='.$lang);
                setlocale(LC_ALL, $lang.'.UTF8');
             }

            else{
                $lang = 'pl_PL';
                putenv('LC_ALL='.$lang);
                setlocale(LC_ALL, $lang.'.UTF8');
             }

            $_config['lang'] = $lang;
            break;
    }

    $my_name = 'default';

    bindtextdomain($my_name,'./locale');
    textdomain($my_name);

运行 ?setlang=pl 操作后,我无法让此脚本将语言更改为 pl_PL。当此 get 为空时,cookie 值将更改为 en_US ;/

我应该如何检查它并避免这个问题?

我也在使用 MVC。这段代码似乎是正确的,还是我应该将一些代码放入模型而不是控制器?

4

3 回答 3

1

if((isset($_SESSION['lang']) && $_SESSION['lang'] =='en_US') || (isset($_COOKIE['lang']) && $_COOKIE['lang'] == 'en_US'))

==与not这种方式进行比较,=您可以分配or是'en_US'什么。$_SESSION["lang"]$_COOKIE["lang"]

于 2013-02-05T23:42:38.983 回答
0

你开始会话了吗?如果没有,则无法设置或查询会话变量。

使用 session_start();

于 2013-02-05T23:39:23.933 回答
0
$lang = "";

// Check if lang cookie is set
if(isset($_COOKIE['lang']))
{
    $lang = $_COOKIE['lang'];
}
// Cookie is not set
else
{
// Get language GET variable
    $set_lang = (empty($_GET['setlang'])) ? '' : $_GET['setlang'];

    switch($set_lang)
    {
        case 'en':
            $lang = "en_US";
        break;

        case 'pl':
            $lang = "pl_PL";
        break;

        default:
            $lang = "en_US";
        break;
    }

    // Set language cookie
    setcookie('lang', $lang, time()+60*60*24*365);
}

// Set locale
putenv('LC_ALL=' . $lang);
setlocale(LC_ALL, $lang . ".UTF8");
于 2013-02-05T23:53:49.847 回答