YII Framework框架教程之国际化实现方法


Posted in PHP onMarch 14, 2016

本文讲述了YII Framework框架教程之国际化实现方法。分享给大家供大家参考,具体如下:

一个web应用,发布到互联网,就是面向全球用户。用户在世界的各个角落都可以访问到你的web应用,当然要看你的网站和不和谐,不和谐的web应用在和谐社会是不让你访问的。

YII提供了国际化的支持,可以让我们创建的应用适合不同语言的人群。

国际化是一个很花哨的东西,没有哪个大型的网站真正能做到国际化。大多都是针对不懂的语言,不同地区设计不同的网站。如果你的应用相对较小,处理的东西不多,那么国际化起来的东西还是蛮可以的。

国际化从以下几个方面入手:

区域设置

信息文本和文件资源的翻译

日期/时间、货币符号和数字格式

YII中国际化涉及到的类在/yii_dev/yii/framework/i18n目录下面:

/yii_dev/yii/framework/i18n# tree
.
├── CChoiceFormat.php
├── CDateFormatter.php
├── CDbMessageSource.php
├── CGettextMessageSource.php
├── CLocale.php
├── CMessageSource.php
├── CNumberFormatter.php
├── CPhpMessageSource.php
├── data
│   ├── en_us.php
│   ├── ....................
│   ├── zh_hk.php
│   ├── zh_mo.php
│   ├── zh.php
│   ├── zh_sg.php
│   ├── zh_tw.php
│   ├── zu.php
│   └── zu_za.php
└── gettext
    ├── CGettextFile.php
    ├── CGettextMoFile.php
    └── CGettextPoFile.php

2 directories, 616 files

区域设置

通过对区域的设置,来判断用户所在的国际和使用的语言。

YII定义了常见的区域标识,可以认为是表示区域的唯一ID。

YII中通过CLocale类存放区域数据(包括货币,日期,数字格式等等)。

通过一个区域唯一ID,然后就可以通过 CLocale::getInstance($localeID) 或者CApplication::getLocale($localeID) 获取相应的 CLocale 实例。通过CLocale实例,就能够判断用户所在的国家,使用的语言。然后可以根据CLocale的数据进行相应的翻译,让web应用更适于当前用户使用和阅读。最根本的就是为了用户进行特定的翻译。

信息文本和文件资源的翻译

翻译很简单就是把一种语言变成另一种语言。在计算机中用的是26字母,就是e文。所以可以把e文当成是原始语言,万语之源,所有其他的语言都是通过e文翻译而成的,暂且e文叫做源语言。翻译成的语言叫做目标语言。

具体的类说明

/**
* Translates a message to the specified language.
* Starting from version 1.0.2, this method supports choice format (see {@link CChoiceFormat}),
* i.e., the message returned will be chosen from a few candidates according to the given
* number value. This feature is mainly used to solve plural format issue in case
* a message has different plural forms in some languages.
* @param string $category message category. Please use only word letters. Note, category 'yii' is
* reserved for Yii framework core code use. See {@link CPhpMessageSource} for
* more interpretation about message category.
* @param string $message the original message
* @param array $params parameters to be applied to the message using <code>strtr</code>.
* Starting from version 1.0.2, the first parameter can be a number without key.
* And in this case, the method will call {@link CChoiceFormat::format} to choose
* an appropriate message translation.
* Starting from version 1.1.6 you can pass parameter for {@link CChoiceFormat::format}
* or plural forms format without wrapping it with array.
* @param string $source which message source application component to use.
* Defaults to null, meaning using 'coreMessages' for messages belonging to
* the 'yii' category and using 'messages' for the rest messages.
* @param string $language the target language. If null (default), the {@link CApplication::getLanguage application language} will be used.
* This parameter has been available since version 1.0.3.
* @return string the translated message
* @see CMessageSource
*/
public static function t($category,$message,$params=array(),$source=null,$language=null)
{

$category源语言
$mesage目标语言
$params是$mesage中要匹配翻译的数组。

具体使用方法如:

Yii::t('app', 'Path alias "{alias}" is redefined.',
  array('{alias}'=>$alias))

当然可以通过yiic提供的命令行命令message进行翻译,具体的参考yiic命令的使用说明

日期/时间、金钱和数字格式

日期/时间处理CDateFormatter类
具体参考(/yii_dev/yii/framework/i18n/CDateFormatter.php)类文件

数字处理
具体参考(/yii_dev/yii/framework/i18n/CNumberFormatter.php)类文件

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
php一个找二层目录的小东东
Aug 02 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
用PHP代码给图片加水印
Jul 01 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
详解PHP Swoole与TCP三次握手
May 27 PHP
YII Framework框架教程之缓存用法详解
Mar 14 #PHP
YII Framework框架教程之安全方案详解
Mar 14 #PHP
YII Framework框架教程之日志用法详解
Mar 14 #PHP
YII Framework教程之异常处理详解
Mar 14 #PHP
Zend Framework教程之Application用法实例详解
Mar 14 #PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 #PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 #PHP
You might like
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
jQuery.each使用详解
2015/07/07 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
React Native预设占位placeholder的使用
2017/09/28 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
浅析NumPy 切片和索引
2020/09/02 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
您的网上新华书店:文轩网
2016/08/24 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
教育学专业毕业生的自我评价
2013/11/21 职场文书
银行领导证婚词
2014/01/11 职场文书
村级四风对照检查材料
2014/08/24 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
运动会3000米加油稿
2015/07/21 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL