2013-01-23 70 views
1

我對GetText有問題,我的問題實際上是:是否可以手動設置.mo-filepath?PHP在服務器上沒有語言環境的GetText?

如果我輸入「區域設置-a」的外殼,我得到了下面的列表

C 
de_DE.utf8 
en_US.utf8 
POSIX 

我的PHP代碼:喜歡這樣的:

$directory = './locale'; 
$domain = 'texts'; 

$locale = 'fr_FR.utf8'; 

bindtextdomain($domain, $directory); 
textdomain($domain); 
bind_textdomain_codeset($domain, 'UTF-8'); 

putenv('LC_MESSAGES='.$locale); 
setlocale(LC_MESSAGES, $locale); 

如果我改變變量$語言環境到「en_US」或「de_DE」並且該文件可用,它可以完美地工作。但它不適用於不在上面列表中的區域設置。但是必須有一種方法可以在不安裝所有語言的情況下做到這一點。

也許你知道一個很好的建議。預先感謝您;)

回答

0

我不認爲這是可能的,如果您使用本機gettext()擴展名。

您仍然可以通過在其中設置$directory = './locale/fr_FR' and putting a folder LC_MESSAGE/en_US'來解決骯髒的解決方法。

即使未安裝語言環境,也可以使用PHP編寫的PHP Gettext模擬:https://launchpad.net/php-gettext/

它也會阻止另一個gettext警告:如果你更新.mo文件(上傳一個新文件),本地gettext擴展將不會加載它,如果它已經在它的緩存中(每個進程都有它自己的緩存) 。沒有辦法手動重新加載它(除了更改字典名稱,當然......)。看到我前一段時間問的問題:Gettext caching annoyance

0

Zend Framework有自己的gettext實現,它實際上直接讀取.mo文件而不是使用gettext擴展名。

這可能是解決丟失的系統語言環境

的一個Zend_Translate Gettext適配器並不是使用PHP的gettext擴展實現的唯一途徑。即使您沒有安裝PHP gettext擴展,也可以使用Gettext適配器。此外,適配器是線程安全的,PHP gettext擴展目前不是線程安全的。

http://framework.zend.com/manual/1.12/en/zend.translate.adapter.html#zend.translate.adapter.gettext

來源 https://github.com/magento/magento2/blob/master/lib/Zend/Translate/Adapter/Gettext.php

相關問題