2010-08-31 78 views

回答

3

我通過構建在http://www.treutech.com/files/wordpress/jLanguage.zip處的jLanguage插件來實現此目的。 *該作者的網站不再提供該插件,因此我正在託管我的更新版本。這使您可以使用語法[english][/english]來設置博客文章和頁面的格式。它將查詢字符串傳遞給代碼以知道要使用哪種語言。我開始修改代碼,以便使用標準的雙字母語言代碼。我也廢除了代碼用來表示各種語言的標誌。但是,畢竟,插件仍然只翻譯頁面或帖子。我希望網站的其他部分根據用戶的選擇進行翻譯。

WordPress允許國際化;然而,一旦你選擇了一種語言,你就會一直堅持下去,直到你手動改變它爲止。所以我創建了wp-lang.php。它首先查看用戶從可用語言鏈接中選擇的語言,然後將其存儲在SESSION變量中,以便狀態保持不變。最後,如果沒有選擇,並且沒有SESSION變量,代碼將查看瀏覽器的默認語言。

現在,所有這些更改都取決於您是否下載了與網站上的語言選項相對應的語言包。語言MO文件包含WordPress中所有函數名稱的翻譯。因此,如果用戶登錄到管理控制檯,所有內容都將被翻譯。如果你的主題編碼正確,那麼你的菜單標題和元信息也會被翻譯。畢竟,我修改了wp-config文件以包含wp-lang。現在這個設置的網站將在西班牙文和英文之間切換。

* WP-lang.php

session_start(); 
if (isset($_GET['lang'])) { 
    $_SESSION['WPLANG'] = $_GET['lang']; 
    define ('WPLANG', $_SESSION[WPLANG]); 
} else { 
    if(isset($_SESSION['WPLANG'])) { 
     define ('WPLANG', $_SESSION['WPLANG']); 
     $_GET['lang'] = $_SESSION['WPLANG']; 
    } else { 
     if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) { 
      $languages = strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]); 
      $languages = explode(",", $languages); 
      $_SESSION['WPLANG'] = $languages[0]; 
      $_SESSION['WPLANG'] = str_replace("-", "_", $_SESSION['WPLANG']); 
      $_GET['lang'] = substr($_SESSION['WPLANG'],0,2); 
      define ('WPLANG', $_SESSION[WPLANG]); 
     } else { 
      define ('WPLANG', ''); 
     } 
    } 
} 

* WP-config.php文件 - 查找其中常量WPLANG定義的部分。在WPLANG聲明之前添加在以下行中。

require_once(dirname(__FILE__).'/wp-lang.php'); 
define ('WPLANG', ''); 

此頁面將首先檢查瀏覽器的默認語言,然後設置語言。如果沒有,用戶還可以根據他們從帖子中選擇的語言來設置語言。該語言設置在會話變量中以保持整個訪問的狀態。

+0

嘿,這是一個非常好的實現,但後來我應該怎麼寫,爲用戶更改語言的錨鏈接? 這樣的事情? ESPAÑOL alexchenco 2010-08-31 18:40:25

+0

是的。 wp_lang.php的第一部分從鏈接中獲取$ _GET ['lang']並設置seesion變量,然後爲WordPress設置WP_LANG常量。 – 2010-09-16 19:59:39

2

我的2美分:我做了類似的事情,但我也從URL中刪除了?lang=XX參數。

在完成語言檢測的所有工作後,我將代碼中的307重定向到相同的URL(從中刪除?lang=xxx&lan=xxx),然後die()。這使得URL清除了GET變量,對於書籤來說乾淨且可能安全。

此外,我將語言首選項存儲在cookie中,以允許用戶在下次訪問時看到相同的語言。

0

我最好的解決辦法是...(在session_start();在上面)

if(!isset($_GET['lang']) && isset($_SESSION['WPLANG'])) { 
     define ('WPLANG', $_SESSION['WPLANG']); 
} else { 

    if (!isset($_GET['lang'])) { 
     if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) { 
     $languages = strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]); 
     $languages = explode(",", $languages); 
     $wplang = str_replace("-", "_", $languages[0]); 
     $_GET['lang'] = substr($wplang,0,2); 
     } 
    } 

    $language = isset($_GET['lang']) ? htmlspecialchars($_GET['lang'], ENT_QUOTES) : 'es'; 
    switch ($language) { 
     case 'en': 
      define('WPLANG', 'en_US'); 
      $_SESSION['WPLANG'] = 'en_US'; 
     break; 

     case 'es': 
     default: 
      define('WPLANG', 'es_ES'); 
      $_SESSION['WPLANG'] = 'es_ES'; 
    } 

}