2012-08-22 61 views
1

我似乎無法得到這個權利,也沒有理解它。gettext和locale

我有這樣的代碼:

putenv('LC_ALL=eng_US.UTF-8'); 
var_dump(setlocale(LC_ALL, 'eng_US.UTF-8', 'eng_US')); 

輸出在Windows

string 'English_United States.1252' (length=26) 

輸出在Linux上

bool(false) 

Linux下正常工作與EN_US,而不是Windows。 Windows查看文件夾eng_US和Linux en_US。

有沒有人找到解決方案?或者有沒有辦法將一個自定義的字符串,不管操作系統,將被考慮到?

(我必須補充,我使用WAMP在Windows-7和Linux機器是nginx的+ PHP-FPM一個CentOS)

回答

2

語言環境的名稱依賴於平臺。

在大多數unix系統上,你想要<two letter language code>_<two letter country code>[.<optional encoding>]。您可以使用命令行locale -a列出有效的區域設置名稱。

正確的Windows語言環境使用相同的X_X [.X]方案,只是它們使用語言和國家的全名,並且使用代碼頁碼而不是編碼名稱:English_United States.1252。對於找出其他字符串,Windows似乎也有一些啓發式,儘管它似乎沒有像Unix風格的區域名稱一樣工作。此外,Windows不支持UTF-8作爲區域設置編碼,無論您是使用名稱'UTF-8'還是使用代碼頁編號'65001'來指定它。

正如您已經發現Windows和其他平臺的語言環境名稱不同。您不能在所有平臺上使用相同的字符串。相反,您必須編寫使用當前平臺的正確字符串的代碼。

if Linux 
    return "en_US.UTF-8" 
if Windows 
    return "English_United States.1252" 
+0

什麼是檢測平臺的最佳方法?我能否使用相同的文件夾語言名稱? – Manhim

+0

我並不熟悉PHP,所以我不知道。我只知道地區和東西。 – bames53

+0

好吧,我發現了PHP_OS常量,並將使用此方法。 – Manhim