6

我目前正在开发一个需要提供法语和英语版本的 PHP Web 应用程序。我环顾四周,发现 Gettext() 功能提供了最佳性能。

我用命令生成了我的 .pot 文件

 xgettext PhpFileToTranslate.php -o NameOfTemplateFile.pot

并成功生成了一个 .pot 文件。我使用 PoEdit 生成 messages.po 文件并创建了 messages.mo

这是我的服务器文件:

/app
    /locale
        /en_US
              /LC_MESSAGES
              messages.po
              messages.mo
        /fr_FR
              /LC_MESSAGES
              messages.po
              messages.mo
        template.pot

我在 php 文件中设置语言环境,如下所示:

$language = $_SESSION['language'];  //session contains 'fr_FR.UTF-8' or 'en_US.UTF-8'
setlocale(LC_ALL, $language);
bindtextdomain('messages', './locale');  
textdomain('messages');

但我只看到标签而不是翻译......我尝试使用'fr_FR'而不是'fr_FR.UTF-8'和各种字符串,但它不起作用。

我错过了什么吗?我的服务器是带有 Apache 和 php5 的 Ubuntu 12.04 服务器

4

2 回答 2

7

要在 linux 上编译 .mo 文件,您需要在服务器和编译它的机器上安装语言环境。语言环境是您的操作系统支持的语言。

如本教程所述:http ://dev.jimdo.com/archive-old-blog/tutorial-for-the-easy-use-of-gettext-for-internationalization-of-php-apps/ 验证您是否拥有安装在你的 linux 上的语言环境

确保您要使用的语言环境已安装在您的 linux 中,并且您使用 .UTF-8(您需要 i18n,所以请使用 UTF!):

# Example for debian
dpkg-reconfigure locales

-- 在 linux 上安装新的语言环境

列出系统上实际安装的语言:

locale -a

安装 fr_FR 的示例:

#List the available i18n locales
less /usr/share/i18n/SUPPORTED

安装语言环境(此处为 fr_FR.utf8)

locale-gen fr_FR.utf8

重新配置系统上的语言环境

sudo  dpkg-reconfigure locales

使用 PoEdit 重新编译您的 .mo 文件,这应该可以解决问题。确保在服务器和编译 .mo 文件的机器上都安装了语言环境。

希望有帮助

于 2012-08-15T17:37:24.763 回答
0

除了Bruno 所说的,别忘了重新加载Apache 配置(例如,service apache2 reload)。我浪费了一些时间来寻找它为什么不起作用,只是为了发现安装新语言/区域设置后必须重新加载 Apache 配置。

于 2013-03-20T13:17:14.493 回答