Yii2 多语言配置 - i18n 国际化
原理
国际化 i18n 是 Yii2 的核心组件,应用 bootstrap 时 i18n 就会被实例化。
1 | // yii2/base/Application.php |
默认情况 i18n 会把实现交给 yii\i18n\PhpMessageSource 类,这也是项目中最常用的方式。在不修改应用配置的情况下,只需要将多语言的 php 文件放到 @app/messages 目录下即可。如 zh-CN 中文配置 @app/messages/zh-CN/app.php,文件名必须为 app.php。
除此外还有 yii\i18n\GettextMessageSource 和 yii\i18n\DbMessageSource 可用。
1 | // yii2/i18n/I18N.php |
如何配置,如何使用?关键要理解 i18n 是如何根据配置文件加载多语言文件的。
1 | // yii2/i18n/I18N.php |
使用
简单配置
配置文件如下:
1
2
3
4
5
6
7
8'i18n' => [
'translations' => [
'demo' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@app/messages',
],
],
],文件存放位置:
1
@app/messages/zh-CN/demo.php
引用:
1
Yii::t('demo', 'key');
分层级,通过文件目录实现
配置文件如下:
1
2
3
4
5
6
7
8'i18n' => [
'translations' => [
'demo*' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@app/messages',
],
],
],文件存放位置:
1
@app/messages/zh-CN/demo/common.php
引用:
1
Yii::t('demo/common', 'key');
分层级,通过配置实现
配置文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13'i18n' => [
'translations' => [
'demo*' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@app/messages',
'fileMap' => [
// 文件名应该与键名对应,即 common.php
// 此处只是为了说明问题
'demo/common' => 'main.php'
]
],
],
],文件存放位置:
1
@app/messages/zh-CN/main.php
引用:
1
Yii::t('demo/common', 'key');
模块中独立配置
在模块入口文件 Module.php 中,增加如下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14public function init()
{
parent::init();
if ( !isset(Yii::$app->get('i18n')->translations['demo*']) ) {
Yii::$app->get('i18n')->translations['demo*'] = [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => __DIR__ . '/messages',
'fileMap' => [
'demo/common' => 'common.php',
],
];
}
}多语言文件放在模块的
./messages/目录下。引用:
1
Yii::t('demo/common', 'key');
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 思学!
评论
GiscusGitalk



