Yii框架的多语言设置
2011-06-23 22:25
281 查看
Yii
框架的缺省语言是美国英语(en_us
)。但是身在在中国,又希望致力于中国企业的信息化建设,所以让Yii
支持多语言(至少简体中文和美国英语)那是必须的。
1.
全局语言
和其它application
级别的配置一样,系统的缺省语言可以在protected/config/main.php
中设置:
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
......
'language'=>'zh_cn', ***
不设置的话缺省为
en_us
2.
Controller
级别
由于Yii
框架中Controller
掌控几乎全部的Views
,所以我们可以通过在Controller
的初始化函数中指定该Controller
控制的所有Views
的缺省语言。
class foo extends Controller
{
public
function init()
{
Yii::app()->language = ‘zh_cn’;
}
……
需要动态切换语言的系统需要更多的逻辑。目前通行的做法是在页面的某个位置(多数是右上角)放置语言的链接,例如:中文
| English
。
echo
CHtml::
link
(
'
中文
'
,
array
(
''
,
'hl'
=>
'zh'
))
.
'| '
.
CHtml::
link
(
'English'
,
array
(
''
,
'hl'
=>
'en'
))
;
这样在点击相应的语言链接之后,利用Cache
将语言选择保存在服务器端。同样在Controller::init()
函数中根据Cache
中缓存的语言设置系统的缺省语言。
public function init()
{
If (isset
($_GET['hl']) && 'en'===$_GET['hl'])
{
setcookie
("hl",
'en_us');
$_COOKIE['hl']='en_us';
//cookie
不能立刻生效
}
else if (isset
($_GET['hl']) && 'zh'===$_GET['hl'])
{
unset
($_COOKIE['hl']);
setcookie
("hl", "");
}
If ('en_us'==$_COOKIE['hl'])
{
Yii::app()->language='en_us';
}
}
3.
文本翻译
为了解决文本的不同语言版本的动态选择,Yii
框架提供一个全局性的函数Yii::t(‘[text file]’, ‘[text]’)
用来封装所有需要多语言支持的文本。其中第一个参数’[text file]’
代表存储当前语言文本的文件,第二个参数‘[text]
’是文本编码。’[text]’
通常就是该文本在系统的缺省语言中的版本。例如:Yii
框架缺省的系统语言是美国英语,所以’[text]’
通常就是文本的英文语意。但是如果在protected/config/main.php
中设置系统的缺省语言是简体中文,那么’[text]’
应该是文本的简体中文语意。以文本“Name
(名称)”为例,如果系统语言是美国英语,我们可以将’[text]’
定义为’Name’
;而当系统语言是简体中文时,’[text]’
应该定义为’
名称’
。
和大多数多语言框架一样,Yii
框架也将不同语言的文本保存在该语言对应的目录下,作为一个资源。基于Yii
框架的系统在根目录下有一个messages
目录([webapp]/messages
)。简体中文资源放置在[webapp]/messages/zh_cn
下,美国英语资源放置在[webapp]/messages/en_us
下。所有语言资源都是以PHP
文件的形式存在,且都返回一个包含若干Key/Value
对的数组。其中Key
就是Yii::t()
的第二参数’[text]’
。仍以文本“Name
(名称)”为例,如果系统语言是美国英语,语言资源文件中对应的Key/Value
应该是’Name’=>’
名称’
; 而当系统语言是简体中文时,Key/Value
应该是’
名称’=>’Name’
。值得注意的是,因为Yii
框架是使用UTF-8
编码,所以语言资源文件也必须是UTF-8
编码。否则显示文本时会出现乱码。
Yii
框架在运行时,会首先根据Yii::app()->language
的值定位到对应语言目录下的[text
file].php
文件。然后再根据’[text]’
在Key/Value
对数组中定位该’[text]’
对应的语言文本,作为最终显示的文本。
框架的缺省语言是美国英语(en_us
)。但是身在在中国,又希望致力于中国企业的信息化建设,所以让Yii
支持多语言(至少简体中文和美国英语)那是必须的。
1.
全局语言
和其它application
级别的配置一样,系统的缺省语言可以在protected/config/main.php
中设置:
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
......
'language'=>'zh_cn', ***
不设置的话缺省为
en_us
2.
Controller
级别
由于Yii
框架中Controller
掌控几乎全部的Views
,所以我们可以通过在Controller
的初始化函数中指定该Controller
控制的所有Views
的缺省语言。
class foo extends Controller
{
public
function init()
{
Yii::app()->language = ‘zh_cn’;
}
……
需要动态切换语言的系统需要更多的逻辑。目前通行的做法是在页面的某个位置(多数是右上角)放置语言的链接,例如:中文
| English
。
echo
CHtml::
link
(
'
中文
'
,
array
(
''
,
'hl'
=>
'zh'
))
.
'| '
.
CHtml::
link
(
'English'
,
array
(
''
,
'hl'
=>
'en'
))
;
这样在点击相应的语言链接之后,利用Cache
将语言选择保存在服务器端。同样在Controller::init()
函数中根据Cache
中缓存的语言设置系统的缺省语言。
public function init()
{
If (isset
($_GET['hl']) && 'en'===$_GET['hl'])
{
setcookie
("hl",
'en_us');
$_COOKIE['hl']='en_us';
//cookie
不能立刻生效
}
else if (isset
($_GET['hl']) && 'zh'===$_GET['hl'])
{
unset
($_COOKIE['hl']);
setcookie
("hl", "");
}
If ('en_us'==$_COOKIE['hl'])
{
Yii::app()->language='en_us';
}
}
3.
文本翻译
为了解决文本的不同语言版本的动态选择,Yii
框架提供一个全局性的函数Yii::t(‘[text file]’, ‘[text]’)
用来封装所有需要多语言支持的文本。其中第一个参数’[text file]’
代表存储当前语言文本的文件,第二个参数‘[text]
’是文本编码。’[text]’
通常就是该文本在系统的缺省语言中的版本。例如:Yii
框架缺省的系统语言是美国英语,所以’[text]’
通常就是文本的英文语意。但是如果在protected/config/main.php
中设置系统的缺省语言是简体中文,那么’[text]’
应该是文本的简体中文语意。以文本“Name
(名称)”为例,如果系统语言是美国英语,我们可以将’[text]’
定义为’Name’
;而当系统语言是简体中文时,’[text]’
应该定义为’
名称’
。
和大多数多语言框架一样,Yii
框架也将不同语言的文本保存在该语言对应的目录下,作为一个资源。基于Yii
框架的系统在根目录下有一个messages
目录([webapp]/messages
)。简体中文资源放置在[webapp]/messages/zh_cn
下,美国英语资源放置在[webapp]/messages/en_us
下。所有语言资源都是以PHP
文件的形式存在,且都返回一个包含若干Key/Value
对的数组。其中Key
就是Yii::t()
的第二参数’[text]’
。仍以文本“Name
(名称)”为例,如果系统语言是美国英语,语言资源文件中对应的Key/Value
应该是’Name’=>’
名称’
; 而当系统语言是简体中文时,Key/Value
应该是’
名称’=>’Name’
。值得注意的是,因为Yii
框架是使用UTF-8
编码,所以语言资源文件也必须是UTF-8
编码。否则显示文本时会出现乱码。
Yii
框架在运行时,会首先根据Yii::app()->language
的值定位到对应语言目录下的[text
file].php
文件。然后再根据’[text]’
在Key/Value
对数组中定位该’[text]’
对应的语言文本,作为最终显示的文本。
相关文章推荐
- Yii框架学习-创建与设置默认控制器与载入模板
- 关于后盾网yii框架的学习小结(5)--验证码的使用与规则的设置,为后台模块设置独立的布局
- yii框架中的session和cookie设置、使用以及清空
- thinkphp框架之关于网站语言包的设置和使用(多语言支持)
- php设置报错级别,项目后台使用YII框架开发
- yii框架中的session和cookie设置、使用以及清空/改变默认访问的控制器
- 设置yii 基本语言为中文
- Yii2.0 多语言设置(高级版配置方法) - 新的方法
- Yii框架模型类的实现以及PHP5动态语言特性的应用
- 在Django框架中设置语言偏好的教程
- Yii框架无法设置Content-Type之谜
- 关于后盾网yii框架的学习小结(5)--验证码的使用与规则的设置,为后台模块设置独立的布局
- PHP项目统一设置404页面(包括yii框架下)
- yii框架下 i18nDemo 模式 网站多种语言切换
- CI框架中文语言包设置下载
- yii 语言的设置
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- yii2多语言设置
- Yii 语言设置 中文提示信息
- 在Django框架中设置语言偏好的教程