簡體   English   中英

gettext在本地運行,但不在主機服務器上

[英]gettext working locally, but not on the host server

我在PHP應用程序中遇到了gettext的奇怪問題。 它適用於我的開發機器(Ubuntu 10.10 32位,2 x Windows 7 64位,Windows 7 32位,均運行XAMPP)

生產服務器是運行某些64位Linux版本的付費主機。 我不知道到底是哪個。 我可以嘗試找出是否重要。

這是我初始化gettext的方法:

//just FYI:
//$this->data['language'] == 'pl'
//dirname(__FILE__).'/../language/locale' ==
//'/home/mingos/public_html/example.com/application/controllers/../language/locale'

putenv('LANGUAGE='.$this->data['language']);
putenv('LANG='.$this->data['language']);
putenv('LC_ALL='.$this->data['language']);
setlocale(LC_ALL,$this->data['language']);

bindtextdomain($this->data['language'], dirname(__FILE__).'/../language/locale');
bind_textdomain_codeset($this->data['language'],'UTF-8');
textdomain($this->data['language']);

我在服務器上運行phpinfo() ,發現啟用了gettext並且關閉了safe_mode ,排除了LC_ALL不可修改的可能性(我認為)。

編譯的gettext目錄為:

/home/mingos/public_html/example.com/application/language/locale/pl/LC_MESSAGES/pl.mo

因此, bindtextdomain設置的路徑是正確的。

我沒有收到任何通知或警告,但是gettext不會從目錄中提取翻譯,只是返回它所提供的字符串,例如gettext('About us')返回About us而不是O nas

該目錄本身已使用poEdit正確編譯,並確認可以在我的4台dev機器上使用。

造成這種情況的其他可能原因是什么?

gettext僅支持安裝的語言環境。 如果托管提供程序上有外殼程序,則應運行“ locale -a”以查看已安裝語言環境的列表。 您可能需要聯系您的托管服務提供商,以使他們為pl安裝必要的語言包。

一個古老的問題,但是我想解釋一下為什么它在Windows而不是Linux上可以工作。 Windows服務器與Linux服務器使用的語言環境名稱不同。 例如,在Windows中,您將具有“ en”,但是在Linux上,您將具有“ en_EN”。 與波蘭語相同,在Windows上為“ pl”,在Linux上為“ pl_PL”。 您需要對本地或實時服務器進行某種類型的測試,並相應地更改語言環境字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM