-1

多言語のウェブサイトで作業していますが、現在問題があります。$ _GET ['setlang']が空の場合、以前に?setlang = plを開いていたとしても、言語はen_USに設定されます(これは正常に機能しています-言語は変更されています)

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'))

==この方法ではなく、またはが何であれ=割り当てると比較します。'en_US'$_SESSION["lang"]$_COOKIE["lang"]

于 2013-02-05T23:42:38.983 に答える
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 に答える
0

セッションを開始しましたか?設定していない場合、セッション変数を設定または照会することはできません。

session_start();を使用します。

于 2013-02-05T23:39:23.933 に答える