PHP gettext函数只返回原始的未翻译字符串

时间:2010-03-11 14:12:38

标签: php apache localization gettext

我正在尝试使用gettext添加本地化支持到我的网站。我已经按照各种指南介绍了如何设置gettext并完成了以下工作:

我在项目目录的根目录中创建了以下文件和目录:

test.php

locale/
  de_DE
    LC_MESSAGES
       messages.mo
       messages.po

  en_GB
    LC_MESSAGES
       messages.mo
       messages.po

我使用Poedit创建了上面的.po和mo文件。我已经开始使用Unix行结尾,UTF-8并相应地设置语言和国家。

然后我创建了一个名为test.php的PHP脚本,其中包含以下代码:

<?php

  define('LOCALE', 'de_DE');

  // Set up environmental variables
  putenv("LC_ALL=" . LOCALE);
  setlocale(LC_ALL, LOCALE);
  bindtextdomain("messages", "./locale");
  bind_textdomain_codeset("messages", LOCALE .".utf8");
  textdomain("messages");

  die(gettext('This is a test.'));

?>

我导入了“这是一个测试”的文字。到Poedit并提供翻译并保存。

但由于某种原因,test.php脚本只会输出未翻译的原始文本。它拒绝加载翻译文件的版本。

值得注意的是服务器正在运行Linux(Ubuntu), Apache 2.2.11和PHP 5.2.6-3ubuntu4.5。我已经检查了phpinfo()并启用了gettext。

3 个答案:

答案 0 :(得分:14)

您的问题可能与您系统上缺少的区域设置有关。请安装德语区域设置,一切都应该有效:

sudo apt-get install language-pack-de-base

然后,发出以下命令,您应该看到德语区域设置:

locale -a

之后,假设您在所描述的目录结构中仍然有.po和.mo文件,则以下代码应该可以正常工作:

  <?php

  setlocale(LC_ALL, 'de_DE.UTF-8');
  bindtextdomain('messages', './locale');
  textdomain('messages');

  echo gettext('This is a test.');

  ?>

答案 1 :(得分:1)

是的,是的,PHP的gettext支持再次。只是一个提示,可能会或可能不会对您有所帮助:

由于PHP糟糕的gettext实现,许多像WordPress这样的开源项目切换到了这个:http://savannah.nongnu.org/projects/php-gettext/并完全绕过原始版本。

我也是在我的一个项目中做过的,我不能说我错过了什么。

商业项目的缺点:它属于GPL。

答案 2 :(得分:0)

尝试以下

<?php

  define(LC_MESSAGES, 'de_DE');

  // Set up environmental variables
  putenv("LANGUAGE=de_DE");
  bindtextdomain("*", dirname(__FILE__).'/locale');
  bind_textdomain_codeset("messages", 'UTF-8');      

  die(gettext('This is a test.'));

?>