我在运行Apache的Ubuntu上。问题(不工作)发生在我的生产Strato网络服务器上。
我的PHP有gettext支持,但它不会翻译任何内容,尽管字符串是在.mo
文件中翻译的。
这是我的代码:
if (function_exists('bindtextdomain')) {
$domain = 'address_db';
echo putenv('LC_MESSAGES='.$lang);
echo '<br />';
echo setlocale(LC_MESSAGES, $lang);
echo '<br />';
$path = bindtextdomain($domain, "../locale/");
echo $path;
echo '<br />';
echo file_exists($path.'/'.$lang.'/LC_MESSAGES/'.$domain.'.mo') ? 'yes' : 'no';
echo '<br />';
echo bind_textdomain_codeset($domain, "iso-8859-1");
echo '<br />';
echo textdomain($domain);
echo '<br />';
$available_languages = array(
array('de_DE', _('German')),
array('en', _('English')),
array('nl', _('Dutch')),
array('tr', _('Turkish'))
);
echo _('Cancer');
}
输出很有希望:
1
/home/mu/Branches/address_db/locale
yes
iso-8859-1
address_db
Cancer
所以它找到了文件,但它仍然没有翻译“癌症”。
那可能是什么?
它适用于我的生产服务器,但不适用于我的测试服务器。很奇怪......
答案 0 :(得分:2)
缓存Gettext转换,您需要重新启动服务器才能将更改提取到.mo文件。
答案 1 :(得分:0)
看起来好像setlocale
返回false,如果它正常工作,它应该返回新的语言环境名称。
$lang
的输出中是否存在locale -a
的值?常见的错误是使用例如你的情况下是de_DE而不是de_DE.utf8或de_DE.iso88591。