使用Gettext()进行PHP Web应用程序国际化;

时间:2012-08-15 17:30:59

标签: php ubuntu-server php-gettext

我目前正在开发一个需要提供法语和英语的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服务器

2 个答案:

答案 0 :(得分:7)

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

如本教程中所述: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文件。

希望有所帮助

答案 1 :(得分:0)

除了Bruno所说的,不要忘记重新加载Apache配置(例如,服务apache2重新加载)。我浪费了一些时间来搞清楚为什么它不起作用,只是发现一旦安装了新的语言/语言环境就必须重新加载Apache配置。