【问题标题】:PHP gettext stopped workingPHP gettext 停止工作
【发布时间】:2012-02-07 12:16:33
【问题描述】:

我在 Ubuntu 上运行 Apache。这个问题(不工作)出现在我的生产 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

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

那会是什么?


更新

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

【问题讨论】:

    标签: php gettext


    【解决方案1】:

    Gettext 翻译被缓存,您需要重新启动服务器才能获取对 .mo 文件的更改。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我使用de_DE。它显然没有改变:Lang: de_DE.iso88591 Setlocale: 。重新启动 Apache 并没有改变。其他浏览器也不行。
      猜你喜欢
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2015-10-08
      相关资源
      最近更新 更多