Zend Framework国际化用到的是Zend_Translate组建
一、用数据的形式来国际化
建立一个ZF的项目中application中建立languages的文件夹,在文件夹中添加en.php和zh_cn.php文件
en.php中的文件内容如下:
- return array('hello_world'=>'Hello world!');
zh_cn.php中文件的内容如下:
- return array('hello_world'=>'你好!');
在pulibc下的index.php文件中添加代码:
- //设置自动加载
- require_once 'Zend/Loader/Autoloader.php';
- $loader = Zend_Loader_Autoloader::getInstance();
- $loader->setFallbackAutoloader(true);
- //国家化
- $translate = new Zend_Translate('array',APPLICATION_PATH.'/languages/zh_cn.php','zh_ch');
- print '中文的:';
- print $translate->_('hello_world');
- print_r('<br/>');
- $translate->addTranslation(APPLICATION_PATH.'/languages/en.php','en');
- $translate->setLocale('en');
- print '英文的国际化:';
- print $translate->_('hello_world');
- print_r('<br/>');
- $application->bootstrap()
- ->run();
就可以看到国际的实例了
二、gettext来实现国际化
你可以在zf的项目中的index.php文件中添加如下代码
- //设置自动加载
- require_once 'Zend/Loader/Autoloader.php';
- $loader = Zend_Loader_Autoloader::getInstance();
- $loader->setFallbackAutoloader(true);
- $translate = new Zend_Translate('gettext',APPLICATION_PATH.'/languages/gettext','zh_CN',
- array('scan'=>Zend_Translate::LOCALE_DIRECTORY));
- $translate->setLocale('auto');
- print $translate->_('hello_world');
- Zend_Registry::set('zendTranslate',$translate);
在IndexController.php控制器重的indexAction中添加如下代码:
- $zendTranslate = Zend_Registry::get('zendTranslate');
- echo $zendTranslate->_('hello_world').'<br/>';
- echo $zendTranslate->_('myName').'<br/>';
- echo $zendTranslate->_('php').'<br/>';
在项目中的添加文件路劲与index.php中的路径对应如下:
languages
gettext
zh_CN.mo
这个zh_CN.mo的文件生成可以看哈子我写的这篇文章:
http://blog.csdn.net/ms_X0828/archive/2010/11/16/6012122.aspx
随便生成一个po的文件之后,将名字修改为zh_CN即可.
然后就可以到po文件中添加对应的
- msgid "hello_world"
- msgstr "你好我的世界"
- msgid "myName"
- msgstr "我的名字"
- msgid "php"
- msgstr "我在学习php"
再用gettext来生成对应的mo文件即可