Yii2 多语言配置
来源:互联网 发布:淘宝网伟邦碎砖伸缩棍 编辑:程序博客网 时间:2024/06/06 03:17
原理
国际化 i18n
是 Yii2
的核心组件,应用 bootstrap
时 i18n
就会被实例化。
// yii2/base/Application.phppublic function coreComponents(){ return [ 'log' => ['class' => 'yii\log\Dispatcher'], 'view' => ['class' => 'yii\web\View'], 'formatter' => ['class' => 'yii\i18n\Formatter'], 'i18n' => ['class' => 'yii\i18n\I18N'], 'mailer' => ['class' => 'yii\swiftmailer\Mailer'], 'urlManager' => ['class' => 'yii\web\UrlManager'], 'assetManager' => ['class' => 'yii\web\AssetManager'], 'security' => ['class' => 'yii\base\Security'], ];}
默认情况 i18n
会把实现交给 yii\i18n\PhpMessageSource
类,这也是项目中最常用的方式。在不修改应用配置的情况下,只需要将多语言的 php 文件放到 @app/messages
目录下即可。如 zh-CN
中文配置 @app/messages/zh-CN/app.php
,文件名必须为 app.php
。
除此外还有 yii\i18n\GettextMessageSource
和 yii\i18n\DbMessageSource
可用。
// yii2/i18n/I18N.phppublic function init(){ parent::init(); if (!isset($this->translations['yii']) && !isset($this->translations['yii*'])) { $this->translations['yii'] = [ 'class' => 'yii\i18n\PhpMessageSource', 'sourceLanguage' => 'en-US', 'basePath' => '@yii/messages', ]; } if (!isset($this->translations['app']) && !isset($this->translations['app*'])) { $this->translations['app'] = [ 'class' => 'yii\i18n\PhpMessageSource', 'sourceLanguage' => Yii::$app->sourceLanguage, 'basePath' => '@app/messages', ]; }}
如何配置,如何使用?关键要理解 i18n
是如何根据配置文件加载多语言文件的。
// yii2/i18n/I18N.phppublic function getMessageSource($category){ // 判断 $category 在配置中是否存在 // 1. 先进行完全匹配 // 2. 再匹配结尾带 * 的配置 // 3. 最后直接引用 * 配置 // 如果某步成功,就把任务交给 PhpMessageSource, // 并将 $category 传递给 PhpMessageSource}// yii2/i18n/PhpMessageSource.phpprotected function getMessageFilePath($category, $language){ // PhpMessageSource 关键任务是找到多语言文件的路径 // 根据 $category 获取多语言文件的路径 // 1. 先从 fileMap 配置中获取路径 // 2. 再用 $category 拼接路径 // loadMessages() 方法根据路径加载多语言数据返回 I18N}
使用
简单配置
配置文件如下:
'i18n' => [ 'translations' => [ 'demo' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@app/messages', ], ],],
文件存放位置:
@app/messages/zh-CN/demo.php
引用:
Yii::t('demo', 'key');
分层级,通过文件目录实现
配置文件如下:
'i18n' => [ 'translations' => [ 'demo*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@app/messages', ], ],],
文件存放位置:
@app/messages/zh-CN/demo/common.php
引用:
Yii::t('demo/common', 'key');
分层级,通过配置实现
配置文件如下:
'i18n' => [ 'translations' => [ 'demo*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@app/messages', 'fileMap' => [ // 文件名应该与键名对应,即 common.php // 此处只是为了说明问题 'demo/common' => 'main.php' ] ], ],],
文件存放位置:
@app/messages/zh-CN/main.php
引用:
Yii::t('demo/common', 'key');
模块中独立配置
在模块入口文件 Module.php 中,增加如下代码
public 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/
目录下。引用:
Yii::t('demo/common', 'key');
阅读全文
0 0
- Yii2 多语言配置
- Yii2.0 多语言设置(高级版配置方法)
- yii2 多语言实现
- yii2 多语言设置
- YII2.0多模块配置
- yii2框架-多语言版本切换(十三)
- Yii2.0 实现多语言切换
- Yii2 配置yii2-redis扩展
- yii2 - 2-2: yii2配置 - 配置数据库
- Yii2中把"Home"改成"首页"的方法 【Yii2支持多语言】
- Yii2-常用应用配置
- Yii2.0 邮件配置
- Lunix php 配置Yii2
- yii2的gii配置
- Yii2 获取配置信息!
- Yii2 使用基本配置
- yii2-环境配置说明
- Yii2配置url重写
- Apache mina 入门(三) —— 客户端同步通讯
- Linux 常用命令
- 一个完整的xhr请求
- Java
- L1-Ansible安装
- Yii2 多语言配置
- DB缓存
- java自定义注解
- 003
- 浅谈代码提高运行效率的问题
- springcloud Unable to start embedded Tomcat 问题
- 谷歌像素递归超分辨率研究:怎么消灭低分辨率图像马赛克?
- SQL TOP(子句)
- Cmake 错误合集