在Ubuntu上实现PHP的多语言支持,可以按照以下步骤进行:
首先,确保你的系统已经安装了PHP和相关的多语言支持库。
sudo apt update
sudo apt install php php-cli php-fpm php-mysql php-bcmath php-gd php-mbstring php-xml php-zip
gettext
是一个用于多语言支持的库。
sudo apt install gettext
编辑PHP配置文件(通常是 /etc/php/7.x/cli/php.ini
或 /etc/php/7.x/fpm/php.ini
),确保以下行没有被注释掉:
zend.enable_gc = 1
zend_extension=/usr/lib/php/20190902/xdebug.so
在你的项目目录中创建一个 locale
目录,并在其中创建不同语言的 .po
和 .mo
文件。
mkdir -p locale/en/LC_MESSAGES
mkdir -p locale/zh_CN/LC_MESSAGES
使用 xgettext
工具从PHP代码中提取字符串:
xgettext --language=PHP --keyword=_ --output=locale/messages.pot .
然后,使用 msginit
工具为每种语言创建 .po
文件:
msginit --input=locale/messages.pot --locale=en --output-file=locale/en/LC_MESSAGES/messages.po
msginit --input=locale/messages.pot --locale=zh_CN --output-file=locale/zh_CN/LC_MESSAGES/messages.po
编辑 .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代码中使用 _()
函数来标记需要翻译的字符串。
<?php
putenv('LANG=en_US.UTF-8');
setlocale(LC_ALL, 'en_US.UTF-8');
echo _('Hello, World!');
?>
如果你使用的是Apache,确保启用了 mod_rewrite
和 mod_deflate
模块。
sudo a2enmod rewrite deflate
sudo systemctl restart apache2
如果你使用的是Nginx,确保配置了正确的重写规则。
访问你的PHP应用,检查是否正确显示了不同语言的文本。
通过以上步骤,你应该能够在Ubuntu上成功实现PHP的多语言支持。