我目前正在开发一个需要法语和英语版本的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服务器
要在 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 文件的计算机上安装区域设置。
希望有帮助
除了 Bruno 所说的之外,不要忘记重新加载 Apache 配置(例如,service apache2 reload)。我浪费了一些时间来寻找它不起作用的原因,只是为了发现一旦安装了新语言/语言环境,就必须重新加载 Apache 配置。