PHP gettext停止工作

时间:2012-02-07 12:16:33

标签: php gettext

我在运行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

所以它找到了文件,但它仍然没有翻译“癌症”。

那可能是什么?


更新

它适用于我的生产服务器,但不适用于我的测试服务器。很奇怪......

2 个答案:

答案 0 :(得分:2)

缓存Gettext转换,您需要重新启动服务器才能将更改提取到.mo文件。

答案 1 :(得分:0)

看起来好像setlocale返回false,如果它正常工作,它应该返回新的语言环境名称。

$lang的输出中是否存在locale -a的值?常见的错误是使用例如你的情况下是de_DE而不是de_DE.utf8或de_DE.iso88591。