首页 > 代码库 > ZendFramework2学习笔记 国际化、多语言
ZendFramework2学习笔记 国际化、多语言
ZF2的网站语言配置项是module.config.hp中的“translator”项:
<span style="font-size:18px;"> 'translator' => array( 'locale' => 'zh_CN',//中文简体是zf_CN,英文是en_US 'translation_file_patterns' => array( array( 'type' => 'gettext', 'base_dir' => __DIR__ . '/../language', 'pattern' => '%s.mo',//该语言文件是手动生成的骨架应用中一些使用的字符串的语言配置 ), ), ), </span>
其中,"locale"指定项目使用哪个国家的语言,之后在‘translation_file_patterns‘中的‘pattern‘ => ‘%s.mo‘,自动映射为的‘pattern‘ => ‘zh_CN.mo’。该文件保存/在module/Application/language/目录下。同时,可以看到,该目录下也包含有其他国家语言的文件,例如,"en_US.mo"、"zh_TW.mo"等。另外,还可以看到该目录下,每个*.mo文件都对应有一个*.po文件,打开可以看到*.po文件中包含实际我们看到的字符串。
*.po是GNU gettext项目的一套应用规范,GNU gettext项目是一个软件包,是为了使软件实现国际化支持而产生的。*.po文件是面向用户的,可编辑的文件,用户可以直接编辑,或者使用poedit.exe软件进行编辑。*.mo文件是gettext软件包通过*.po文件编译而成的面向计算机的二进制文件。
我们可以通过poedit.exe软件编辑zh_CN.po文件,添加、修改、删除zf2项目中使用的字符串。例如可以在zh_CN.po文件中添加一个字符串,字符串key为"My message!",字符串值为"我的消息",那么我们就可以在layout.phtml或者view中直接这样输出字符串:“$this->translate("My message!");”。
除了gettext,ZF2项目还支持php数组作为字符串输入。具体方法是,编写一个php文件,例如:my_zh_CN.php如下,
<?php //module/Test/language/my_zh_CN.php return array( "My message id" => "你好!", );
然后,在/module/Test/config/module.config.php中添加一个translator的配置项:
/module/Test/config/module.config.php 'translator' => array( 'translation_files' => array( array( 'type' => 'phparray', 'filename' => __DIR__ . '/../language/my_zh_CN.php', ), ), ),之后,就可以在layout或者view中直接输出这条中文字符串了:
echo $this->translate('My message id');
ZF2库的组件中,有很多表单检验组件Zend\Validator\xxxx或者Zend\I18n\Validator\xxx等等,这些表单检验组件在检验不通过的时候,我们会从这些组件获取一些提示字符串输出到页面,而这些字符串是validator通过其自身的translator成员获取的。默认情况下,validator的translator成员是null,因此提示字符串实际上输出的是字符串的key。
实际上,要让validator的提示字符串显示正常的文字,需要做2个工作,一是为validator设置默认的translaotr,二是将validator的语言配置文件引入zf2项目(默认情况下,只引入了zf2骨架应用的语言文件“zh_CN.mo”!!!)。
一)为validtor指定translator:我们需要在application模块的onBootstrap函数中添加代码如下,
//module/Application/module.php public function onBootstrap(MvcEvent $e) { //...... \Zend\Validator\AbstractValidator::setDefaultTranslator($e->getApplication()->getServiceManager()->get('translator'));//为validator组件添加translator组件 }
二)将validator的语言配置文件引入zf2项目:我们需要在application模块的module.config.php中添加translator配置项,
//module/Application/config/module.config.php 'translator' => array( 'translation_files' => array( array( 'type' => 'phparray', 'filename' => __DIR__ . '/../../../vendor/ZF2/resources/languages/zh/Zend_Validate.php', ), array( 'type' => 'phparray', 'filename' => __DIR__ . '/../../../vendor/ZF2/resources/languages/zh/Zend_Captcha.php', ), ), ),
做了以上一些修改后,就可以为zf2项目配置指定国家的语言了。
如果要网站能根据浏览器语言或者其他信息动态改变网站语言的话,就仅仅需要在项目启动阶段,加载不同配置文件即可。
ZendFramework2学习笔记 国际化、多语言