gettext扩展实现多语言支持
- gettext的用法简介,例如: 我们希望输出到页面的一个字符串"message"在英语用户的页面显示为"message"而在中文用户的页面显示为"消息"
- 在代码中可以这样写
gettext("message")
或者_("message")
_()
是gettext()
的简略写法- 程序运行时,到底显示什么字符串就是 由gettext 函数来决定的了; 主要由两个因素决定:
- 一个是系统的locale及相关环境变量(LANGUAGE,LC_ALL,LC_MESSAGES和LANG)
- 一个是相关的mo文件。与mo对应的还有一个po文件 。
- 关于mo、po文件:
- po文件是翻译人员翻译的文件,是给人阅读翻译用的;
- mo文件是由po文件生成的机器码文件是由程序使用;
_("string")
函数传入的字符串相当于Key-Value数据库中的Key(msgid),Value则相当于翻译后的字符串(msgstr);- 如果mo文中,没有找到msgid,则返回传入的字符串"string",如果存在翻译则返回翻译后的字符串(msgstr)
- po文件代码片段:
关于环境变量
// 设置语言环境
define('LANGUAGE', $language['code']);
$locale = $language['charset'];
putenv('LANG=' . $locale);
setlocale(LC_ALL, $locale);
setlocale(LC_NUMERIC, 'en_US.utf8');
// 设置翻译文件的存放目录
bindtextdomain('api', LANG_PATH);
textdomain('api');
关于po文件的更新与编辑
下载安装Poedit
打开需要更新的po文件
翻译完成后,点击保存,编译为mo即可。