PHP函数参考10-GetText国际化解决方案
目录
待国际化源码文件i18n.php
文件中有两行gettext / _ 文本输出:
//设置language为zh_CH
$lang = "zh_CN";//linux不支持zh-Hans,所以gettext、php都不支持。使用locale -a可以看到os支持的语言文字国家地区码
putenv("LANG=".$lang);//ubuntu 需要,centos不需要此行
setlocale(LC_ALL, $lang.'.utf8');//ubuntu 需要.utf8,centos可有可无
// Specify location of translation tables
bindtextdomain("test", dirname(__DIR__)."/locale");
// Choose domain
textdomain("test");
// Translation is looking for in locale/zh_CN/LC_MESSAGES/test.mo
// Print a test message
echo gettext("Welcome to New World!");
// Or use the alias _() for gettext()
echo _("Have a nice day!");
po文件制作
我们采用简单便捷的poedit工具。
- 1、文件-新建,选择目标语言,比如zh_CN
- 2、从源代码中提取。配置翻译属性,比如项目名称版本、复数形式、字符集、源代码字符集等,字符集比如UTF-8
- 3、如果是目标翻译是中文,复数形式填写:nplurals=2; plural=(n!=1);
- 4、源路径,也就是要从哪个文件或目录自动提取需要翻译的文本内容,工具会自动提取形成列表
- 5、逐行翻译,翻译结束
- 6、文件-编译为MO文件
- 7、得到test.po与对应的test.mo文件
- 8、将po与mo两个文件放入对应的目录,比如:locale/zh_CN/LC_MESSAGES/test.mo
locale目录结构如下:
I:\SRC\PHP-SHIYANCHANG\LOCALE
\---zh_CN
\---LC_MESSAGES
test.mo
test.po