首页 > 代码库 > 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学习笔记 国际化、多语言