2013-12-09 131 views
0

在過去的幾天裏,我一直在努力使用php,gettext,並且很快將我的新網站從丹麥語翻譯成英語。Gettext不翻譯

我有我的目錄與我的.po和的.mo設置爲下列文件:

/locale/en_US/LC_MESSAGES/ 

按照本教程:Localizing PHP web sites using gettext我添加了這個:

$locale = "en_US"; 
if (isSet($_GET["locale"])) $locale = $_GET["locale"]; 
putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
bindtextdomain("messages", "./locale"); 
textdomain("messages"); 

我加了五個entires在我的頁面上:

echo _('Overskrift 1') 

但是,當我查看我的服務器上的頁面,PHP的Debian框5.4和gettext支持啓用,沒有任何翻譯。

我不知道我做錯了什麼。我相信這是一件小事,但我看不到它。也許你們有一些指針?

我的.po文件:

msgid "" 
msgstr "" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"X-Generator: POEditor.com\n" 
"Project-Id-Version: Portfolio\n" 
"Language: en\n" 

#: 
msgid "Overskrift 1" 
msgstr "Headline 1" 

#: 
msgid "Overskrift 2" 
msgstr "Headline 2" 

#: 
msgid "Overskrift 3" 
msgstr "Headline 3" 

#: 
msgid "Overskrift 4" 
msgstr "Headline 4" 

#: 
msgid "Overskrift 5" 
msgstr "Headline 5" 
+0

嘗試在echo中使用雙引號,按照您的教程? – Jeppe

+0

不幸的是,沒有改變任何東西。 –

+0

你得到了什麼輸出var_dump(setlocale(LC_ALL,'en_US'));'? – bitWorking

回答

7

最典型的問題是,你的系統沒有安裝區域要設置。 gettext深深融入系統的語言環境系統。您使用setlocale設置的區域設置實際上需要根據您提供的名稱進行安裝和/或別名。在大多數系統中,例如,沒有區域ja_JP,但區域設置ja_JP.UTF8和/或ja_JP.eucJP。在這種情況下你需要setlocale(LC_ALL, 'ja_JP.UTF8'),只是jaja_JP不會。

要檢查安裝了哪些語言環境,請在命令行上運行locale -a。如果您正在尋找的語言環境不存在,則需要安裝它。在Ubuntu和類似系統上,這與運行sudo locale-gen ja_JP.UTF8一樣簡單。

替代解決方案

一些稀有的語言環境可能不容易找到,因此你可能無法安裝你想要什麼。在這種情況下,您可以找到最接近的語言環境。例如,如果沒有ku_IQ,但​​存在於您託管應用的服務器上,則可以使用後者。確保您將目錄重命名爲您實際設置的區域設置。您的文字仍然會正常翻譯,但您的區域格式(如日期,時間和數字)將無法正確顯示。你將不得不忍受這一點。

+0

那怎麼樣。我可以讓SWORN知道我昨天做了那件事,並找到了我需要的。 今天又做了 - en_US.UTF-8修復了它。我很困惑,但感謝提醒。 –

+2

發生在最好的情況下,尤其是因爲這種依賴關係不是很明顯,gettext對於抱怨什麼是錯誤感到很害羞。 ;) – deceze

+0

您也可以在您的系統上添加不存在的語言環境:https://askubuntu.com/questions/76013/how-do-i-add-locale-to-ubuntu-server –