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不用递归遍历目录下所有文件的代码
Jul 04 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
CodeIgniter 完美解决URL含有中文字符串
May 13 PHP
Yii2如何批量添加数据
May 17 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
PHP实现的CURL非阻塞调用类
Jul 26 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 PHP
Yii2框架自定义类统一处理url操作示例
May 25 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 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编码转换
2012/11/05 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
python删除文件示例分享
2014/01/28 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
python实现LRU热点缓存及原理
2019/10/29 Python
python迭代器常见用法实例分析
2019/11/22 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
自荐信格式
2013/12/01 职场文书
商场活动策划方案
2014/01/24 职场文书
机关办公室岗位职责
2014/04/16 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP