2013-02-05 2 views
-1

다국어 웹 사이트에서 작업 중이며 지금 문제가 있습니다. 때 $ _GET [ 'setlang'], 언어는 내가 가진 경우에도 ko 페이지에 빈 설정되어 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 값이 비어 있으면 쿠키 값이 en_US로 변경됩니다./

어떻게 확인하고이 문제를 방지해야합니까?

또한 MVC로 작업하고 있습니다. 이 코드가 옳은 것 같습니까? 아니면 컨트롤러 대신 모델에 코드를 넣어야합니까?

답변

1

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

당신이 $_SESSION["lang"] 또는 $_COOKIE["lang"] 무엇이든 'en_US'를 할당 ==하지 =이 방법을 비교합니다.

0

세션을 시작하셨습니까? 필요하지 않은 경우 세션 변수를 설정하거나 질의 할 수 없습니다.

use session_start();

+0

네, 그랬습니다. 그러나 비록 내가 원하지 않는다면, 쿠키는 그 일을해야합니다 .. – jdrzejb

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"); 
+0

코드를 가져 주셔서 감사합니다 :) 작동하도록하려면 약간의 변경이 필요합니다. 왜냐하면 sb가 쿠키를 설정하는 동안 언어를 변경하려고 할 때, 어떤 방법 으로든 수행 할 수 없습니다 :) – jdrzejb