在 Ubuntu 下为 PHP 实现多语言支持,通常需要以下几个步骤:
首先,确保已经安装了 PHP 和相关模块。可以使用以下命令安装:
sudo apt-get update
sudo apt-get install php php-cli php-fpm php-mysql
gettext
是一个用于实现多语言支持的 GNU 库。在 Ubuntu 上,可以使用以下命令安装:
sudo apt-get install gettext
编辑 php.ini
文件(通常位于 /etc/php/{php_version}/cli/php.ini
或 /etc/php/{php_version}/fpm/php.ini
),确保以下行没有被注释(删除行首的分号):
zend_extension=gettext.so
然后重启 PHP-FPM 或 Apache 服务,使更改生效:
sudo systemctl restart php{php_version}-fpm
# 或者
sudo systemctl restart apache2
在项目中创建一个名为 locale
的目录,并为每种语言创建一个子目录(例如 en
和 zh_CN
)。在这些子目录中,使用 xgettext
命令提取需要翻译的字符串,并生成 .po
文件:
mkdir -p locale/{en,zh_CN}
xgettext --language=PHP --keyword=_(") --output=locale/en/LC_MESSAGES/messages.po your_script.php
xgettext --language=PHP --keyword=_(") --output=locale/zh_CN/LC_MESSAGES/messages.po your_script.php
使用文本编辑器打开生成的 .po
文件,并为每种语言提供翻译。保存文件后,使用 msgfmt
命令将 .po
文件编译为 .mo
文件:
msgfmt -o locale/en/LC_MESSAGES/messages.mo locale/en/LC_MESSAGES/messages.po
msgfmt -o locale/zh_CN/LC_MESSAGES/messages.mo locale/zh_CN/LC_MESSAGES/messages.po
在 PHP 代码中,使用 _()
函数(或其他 gettext
函数,如 _e()
、_n()
等)标记需要翻译的字符串。然后,在脚本开始时设置适当的语言环境:
<?php
// 设置语言环境
putenv('LANG=en_US.UTF-8');
setlocale(LC_ALL, 'en_US.UTF-8');
bindtextdomain('messages', './locale');
textdomain('messages');
echo _("Hello, world!");
?>
现在,根据设置的语言环境,页面将显示相应的翻译。
注意:这里的示例假设你已经熟悉 PHP 编程。如果你是初学者,可能需要先学习 PHP 的基本知识。