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
php生成文件
Jan 15 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
ThinkPHP3.1新特性之G方法的使用
Jun 19 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
php基础教程
Aug 26 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
php中上传文件的的解决方案
Sep 25 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
PHP判断一个变量是否为整数、正整数的方法示例
Sep 11 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
php返回json数据函数实例
2014/10/09 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
php实现评论回复删除功能
2017/05/23 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
Nuxt.js实战和配置详解
2019/08/05 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
用Python编写一个国际象棋AI程序
2014/11/28 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
拉拉队口号
2014/06/16 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
瘦西湖导游词
2015/02/03 职场文书
董事长岗位职责
2015/02/13 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android