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 相关文章推荐
我常用的几个类
Oct 09 PHP
php5 图片验证码实现代码
Dec 11 PHP
PHP中error_log()函数的使用方法
Jan 20 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
ThinkPHP文件缓存类代码分享
Apr 22 PHP
php邮箱地址正则表达式验证
Nov 13 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 PHP
TP5多入口设置实例讲解
Dec 15 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
python调用java的Webservice示例
2014/03/10 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
详解python之简单主机批量管理工具
2017/01/27 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
Python3远程监控程序的实现方法
2019/07/15 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
python如何快速生成时间戳
2020/07/21 Python
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
Python中pass语句的作用是什么
2016/06/01 面试题
2014迎国庆演讲稿
2014/09/19 职场文书
天鹅湖观后感
2015/06/09 职场文书
大学生党课心得体会
2016/01/07 职场文书
2016党员发展对象培训心得体会
2016/01/08 职场文书
ubuntu下常用apt命令介绍
2022/06/05 Servers