首页 > PHP编程 > CakePHP多语言版本的实现方法

CakePHP多语言版本的实现方法

2010年1月5日

看过CakePHP的程序例子就会发现,在Controller或者View中,大多数输出都是用一个函数 __(”xxxx”) 来执行
这个函数是CakePHP遵循标准的gettext方案.
但是CakePHP不用加载php-gettext模块就可以使用,因为它已经用php代码在CakePHP内核中解决它了.这种方法在用来处理多国语言的时候,非常方便

什么是 i18n,l10n
首 先要先明白Localization & Internationalization两个单词,分别叫本地化和国际化. Localization 表示将 Web 应用转化以适应某种语言(或文化)的需求,而 Internationalization 表示 Web 应用可以被本地化的能力。Internationalization 和 localization 常被缩写为 i18n 和 l10n; 数字 18 和 10 是该单词的第一个字母到最后一个字母之间的字母数量

CakePHP的语言文件存放何处
在CakePHP中,存放语言文件的地方在(下面不同语言的命名必须符合ISO 639-2 标准)

/app/locale/eng/LC_MESSAGES/default.po (English)
/app/locale/fre/LC_MESSAGES/default.po (French)
/app/locale/por/LC_MESSAGES/default.po (Portuguese)
/app/locale/chi/LC_MESSAGES/default.po (Chinese)

po文件如何编辑
这些po文件可以用一个叫poedit的免费软件来编辑,存储后即可生成mo文件

如何自动生成po文件
CakePHP的目的就是减少我们的工作量,我们写代码的时候,只管用英文 __(’xxx’)去输出东西,CakePHP会帮你从app文件中找出这些英文放到 po文件中,步骤如下(windows下)

  1. 打开命令行,进入需要应用的app目录路径
  2. 输入 cake i18n ,即会出现提示,全部默认后,cake会帮你生成一个 app/locale/default.pot 文件.这个就是你需要翻译的文件了
  3. 将该文件移动到相应的目录下,如 “/app/locale/chi/LC_MESSAGES/default.po”,用poedit编辑它,完毕后存储,看到该目录下生成default.mo文件,即成功

CakePHP中如何输出多语言信息
使 用位于 cake/basics.php 下的这个函数,例 __(’po mo’);输入函数的字符串将会在扫描后出现在/app/locale/xxx/LC_MESSAGES/default.po中,在用poedit去翻 译它,存储后,程序被调用时将会输出翻译后的信息

/**
* Returns a translated string if one is found, or the submitted message if not found.
*
* @param string $singular Text to translate
* @param boolean $return Set to true to return translated string, or false to echo
* @return mixed translated string if $return is false string will be echoed
*/
function __($singular, $return = false) {…}

如何让程序调用不同的语言文件
CakePHP会根据浏览器的HTTP_ACCEPT_LANGUAGE来读不同的文件,但是如果没有这些文件,便会输出默认的英文
若你需要切换语言,在程序开始前调用一下以下代码即可

$this->Session->write (”Config.language”,”chi”);

总结自:

http://book.cakephp.org/view/161/Localization-Internationalization

http://blog.darkhero.net/?p=300

Joe PHP编程 ,

  1. 目前还没有任何评论.
  1. 目前还没有任何 trackbacks 和 pingbacks.