CakePHP 1.2 中新增了对 i18n 和 L10n 的支持。实现的方式是采用了php的 gettext。目前还没有文档说明如何来使用 i18n 和 L10n,恰好我最新的一个项目要用到,所以就说一下最基本的用法。
用户定义的本地化语言文件位于 app/locale 目录下。默认只有一个 eng 目录,也就是英语。
1). 新建语言文件。在 app/locale 下依次新建 /zh_cn/LC_MESSAGES/ 目录,在其下新建 default.po 文件。最终的路径为:app/locale/zh_cn/LC_MESSAGES/default.po 。再在 /eng/LC_MESSAGES 目录下也新建一个 default.po 文件。特别注意,这2个 .po 文件都应该是 utf-8 编码。
2). 打开 app/locale/eng/LC_MESSAGES/default.po ,写入以下代码:
msgid "Hello China"
msgstr "Hello China"
打开 app/locale/zh_cn/LC_MESSAGES/default.po ,写入以下代码:
msgid "Hello China"
msgstr "你好,中国"
3). 打开任意一个 view 文件,加入以下PHP代码:
__('Hello China');
// 如果系统语言为中文,则输出“你好中国”;系统语言为英文或其他语言,则默认输出“Hello China”
__('Hello China'); // 如果系统语言为中文,则输出“你好中国”;系统语言为英文或其他语言,则默认输出“Hello China”
"__()"函数是 L10n 输出函数(具体可以查看 cakep/basics.php)。如果写作
__('Hello China',true)
__('Hello China',true)则函数只返回翻译后的字符,不会有任何输出。
4). 完成。现在打开页面,即可看见页面输出“你好中国”。如果系统在eng和zh_cn的语言包里都找不到名为 “Hello China” 的msgid,则会将 __(’string’) 函数中的 string 直接输出。
其他提示:
1. 系统是根据 HTTP_ACCEPT_LANGUAGE 自动判别该翻译为何种语言。如果要手动指定语言,比如要指定翻译为德语,可以在 controller 中加入如下代码:
view plainprint?
$language = 'deu'; // 要翻译为何种语言
Configure::write('Config.language', $language);
// $this->Session->write('Config.language', $language); // 或者是这句
2. cake/basics.php 中包含了多个L10n输出函数,可以详细查阅按需运用。