2010-09-06 36 views
0

我在po/mo文件中使用CodeIgniter(我不喜歡內置函數)。我有一個已經創建的函數,它使用get變量來設置cookie的語言。用URI設置CodeIgniter中的語言的最佳方法

現在,CodeIgniter沒有get,但使用URI。這是我正在使用的功能(它在構造函數中觸發):

private function locale(){ 

    $cookie_name = $this->cookie_lang; 
    $uri = $this->uri->uri_to_assoc(3); 

    if ($this->tools->isArray($uri)){ 
     $locale = $uri['locale']; 
    } 

    if ($locale) { 
     setcookie("$cookie_name", $locale, 0, "/"); 
    } else { 
     if(!isset($_COOKIE[$cookie_name]) && empty($_COOKIE[$cookie_name])) { 
      setcookie("$cookie_name", 'it', 0, "/"); 
      $locale = 'it'; 
     } else { 
      $locale = $_COOKIE[$cookie_name]; 
     } 
    } 
    putenv("LC_ALL=$locale"); 
    setlocale(LC_ALL, $locale); 
    bindtextdomain("default", "./locale"); 
    textdomain("default"); 
    $this->locale = $locale; 
    return true; 
} 

它完美地工作。設置語言只是一個附加問題:

locale/x 

到URL。問題是,我使用用於其他目的的URI(例如加載頁面)

page/x 

這導致在很長的URL,如:

www.site.com/controller/method/page/x/locale/y 

只是爲了能夠設置語言。

什麼是設置語言的更簡單(或更好)的方法?

+1

我認爲這是一個相當優雅的方法,並且非常友好,至少只要您的參數順序不變。否則,重複的網址可能會出現在相同的內容中,至少據我所知,這對於搜索引擎優化不利。 – janosrusiczki 2010-09-06 09:11:41

+0

謝謝,在這方面的順序不應該改變,我很安全。 – 0plus1 2010-09-06 09:35:51

回答

1

使用Session來管理您的語言系統。 您可以在MY_Controller中設置默認會話並從配置文件($config['language'])中獲取。

不要讓自己和客戶端與URI混淆。 URI將會有重複。 如果您需要優先搜索引擎優化,不要這樣做。

相關問題