PHP在服务器上没有语言环境的GetText?

PHP在服务器上没有语言环境的GetText?

问题描述:

我对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”并且该文件可用,它可以完美地工作。但它不适用于不在上面列表中的区域设置。但是必须有一种方法可以在不安装所有语言的情况下做到这一点。

也许你知道一个很好的建议。预先感谢您;)

我不认为这是可能的,如果您使用本机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

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