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 相关文章推荐
php str_replace的替换漏洞
Mar 15 PHP
php5 mysql分页实例代码
Apr 10 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
Laravel日志用法详解
Oct 09 PHP
浅谈php fopen下载远程文件的函数
Nov 18 PHP
PHP静态成员变量
Feb 14 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
Feb 20 PHP
php+websocket 实现的聊天室功能详解
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实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python字符串连接的N种方式总结
2014/09/17 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
详解Python的三种可变参数
2019/05/08 Python
opencv+python实现均值滤波
2020/02/19 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
django ORM之values和annotate使用详解
2020/05/19 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
2014年元旦感言
2014/03/06 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
学生会任命书范本
2015/09/21 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL
keepalived + nginx 实现高可用方案
2022/12/24 Servers