2012-02-08 60 views
3

我使用gettext本地化這樣Gettext的不能得到的setlocale()工作

$lang = $_GET['lang']; 
echo $lang; 
putenv("LANG=$lang"); 
setlocale(LC_ALL, $lang); 
bindtextdomain("messages", realpath("../locale")); 
bind_textdomain_codeset("messages", "utf-8"); 
textdomain("messages"); 

... 

echo _("Welcome!") etc. 

我能看到的本地化工作,因爲該網站可以看到翻譯在斯洛伐克。然而,沒有什麼mather $ lang變量,該網站只翻譯斯洛伐克或根本不翻譯。

斯洛伐克語意思是我在'sk'文件夾中的任何.po和.mo文件。我曾嘗試在「sk」文件夾中放入不同的語言,它的工作原理和我得到不同的翻譯。但我不能讓它採取不同的文件夾,如'EN'或'CS'。所有其他文件夾都被忽略。我究竟做錯了什麼?

P.S. setlocale()返回false,我不知道爲什麼,但這可能導致麻煩。

+1

你看看的http://www.php.net/manual/en/book.gettext.php中的評論? – iblue 2012-02-08 14:08:26

+0

好吧,我沒有看到一個解決方案,我試着重命名文件夾和$ lang變量en_US,我仍然有'sk'翻譯。 – 2012-02-08 14:23:17

+1

如果我必須猜測你的標準語言環境是sk,那就是它的用途,因爲語言環境變化從未發生過。你指出你的setlocale調用返回false。你通過了什麼? '$ lang'的內容是什麼? – Dan 2012-02-08 14:33:56

回答

1

setlocale()如果您的系統不支持該語言環境,將返回false。您可以通過檢查locale -a的輸出來查看您的系統支持哪些語言環境。您通過lang get var傳入的值必須與其中一個語言環境名稱匹配。

正如丹說,SK可能是您的標準語言環境這就是爲什麼使用即使的setlocale返回false ..

0

嗯,還有另外一個討厭的黑客:

在我的系統只en_DK.utf -8是安裝,我無法安裝任何其他langs。

所以,我通過使用域而不是選擇語言:

$lang = "en"; 
putenv("LANG=en_DK.utf8"); 
setlocale(LC_ALL, "en_DK.utf8"); 
bindtextdomain($lang, realpath("./locale")); 
bind_textdomain_codeset($lang, "utf-8"); 
textdomain($lang); 

中的.mo文件的文件位置是這樣的:

./locale/en_DK.utf-8/LC_MESSAGES/en.mo