制作CakePHP语言包(Poedit使用方法)

CakePHP和许多其它开源程序一样,使用.mo格式的语言包,
先下载并安装poedit:http://www.poedit.net/download.php

先要让poedit用PHP的方式来支持.ctp扩展(CakePHP的View文件):

  1. 打开poedit,工具栏>>文件>>首选;
  2. 到“解析器”tab,选中PHP,点“编辑”;
  3. 将“列示扩展名……”里设成 *.ctp;*.php ;(注意是分号,不是逗号)
  4. 将“解析器命令”里改成 xgettext --language=PHP --force-po -o %o %C %K %F ;(我之前因为采用默认的设置,导致后来无法获取表(报错:warning: file ‘.ctp’ extension ‘ctp’ is unknown; will try C.),在浪费了半个小时后终于找到这篇文章

可以动工了,假定CakePHP程序在E:\cakephp\,新建目录:
E:\cakephp\app\Locale\zh_cn
E:\cakephp\app\Locale\zh_cn\LC_MESSAGES

用poedit新建一个项目,地址为上述LC_MESSAGES目录,文件名为default.po,

  1. 项目目录设置里,基本路径为此LC_MESSAGES目录,记得在路径里设为“.”,这代表将搜寻所有子目录,见截图:
    poedit类目设置(路径)
  2. “关键字”tab里,增加函数__,见截图(可以增加多个函数关键字):
    poedit:__()
  3. 工具栏>>类目>>从源更新,poedit会查询项目目录里所有php、ctp文件里用到的“__()”函数,将待翻译项罗列出来(如果po文件里某字符串已经翻译好了,该翻译不会被覆盖,如果po文件里某字符串不再存在于项目目录里,则会被删掉);
  4. 恭喜你,可以开始翻译了!(每次保存po文件时,将在相同目录下产生mo语言文件)

关于函数__d及其它

CakePHP里还用到的字符输出函数__d(‘cake’,’translate me’,’param’),表示按“cake”域的语言包来进行翻译,用不同的域有利于我们拆解且方便管理语言包文件,也能让一个字符串在不同情况下可以有不同的翻译,请如上述default一样,在LC_MESSAGES下创建cake.po项目,但因为它采用的函数有别于“__()”,“__d(‘domain’,’translate me‘,’param’)”的待翻译变量是第二个变量,需要在项目设置里,把关键字设成“__d:2”,见下图:

poedit:__d()