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