2011-09-02 172 views
1

我使用php gettext實現根據用戶偏好(通過分析HTTP_ACCEPT_LANGUAGE)獲取本地化的網站。PHP gettext問題:字符串只翻譯爲英文

我測試了我構建的翻譯系統,它工作正常,但我剛剛發現(在添加其他語言後),當我嘗試使用不同的語言時,它不起作用,返回未翻譯的字符串。

我得到正確的語言環境(用德語設置調試,我得到它使用de_DE),並且我有正確的.mo文件(locale/de_DE/LC_MESSAGES/messages.mo)。

我使用這個代碼來設置翻譯環境:

putenv("LC_ALL=" . $g_locale); 
    setlocale(LC_ALL, $g_locale); 
    bind_textdomain_codeset('messages', 'UTF-8'); 
    bindtextdomain('messages', './locale'); // echo here makes sure it's getting the right absolute path 
    textdomain('messages'); 

其中$ g_locale是 「de_DE這個」。

我嘗試了以下幾種解決方案,我安裝了德語語言環境和語言環境-a告訴de_DE.UTF-8已正確安裝。我也重新啓動了apache2。

但是,除en_US以外的任何語言都不會翻譯消息。

這種行爲的原因是什麼? 我能做些什麼才能使它工作?

謝謝。

編輯:我忘了說它也使用默認系統語言(意大利語)。 這似乎是一個錯誤的配置,但我運行了正確的命令(sudo apt-get install language-pack-de-base)。

回答

2

我通過簡單地將「.UTF-8」添加到$ g_locale的值中,導致德語用戶爲「de_DE.UTF-8」,英語爲「en_US.UTF-8」上。

安裝完所有我需要每次重新啓動網絡服務器(這看起來像緩存很重要)的區域設置。

在Ubuntu上我並不需要使用既不putenv("LC_ALL=" . $g_locale);也不bind_textdomain_codeset('messages', 'UTF-8');減少代碼量:

// $g_locale = "en_US.UTF-8"; 
setlocale(LC_ALL, $g_locale); 
bindtextdomain('messages', './locale'); 
textdomain('messages'); 

希望這有助於問候。