Yii2语言国际化的配置教程


Posted in PHP onAugust 19, 2018

前言

最近想将博客做成支持多语言的,还好Yii2支持这个功能,于是查看了下官方的文档,哎,看了半天不知道干嘛用的,于是各种百度,Google的搜索,最终才明白原来很简单,只是官方写的太复杂

下面介绍下具体的使用步骤,具体介绍我就不写了,官方写比我清楚,我就写怎么使用

第一步 创建i18n配置文件

./yii message/config @app/config/i18.php // yii 在项目目录下 Yii2创建的时候自动生成的

执行完命令之后会在项目根目录config下创建一个i18n.php文件

为什么要创建这个文件,因为我们为了多语言处理,需要生成一个对应的映射文件,只要生成就好了,稍后的配置程序会自动调用处理

第二步 修改配置规则

打开config/i18n.php,看下生成的配置文件的代码,如下:

return [
 'color' => null,
 'interactive' => true,
 'help' => null,
 'sourcePath' => '@yii',
 'messagePath' => '@yii/messages',
 'languages' => [],
 'translator' => 'Yii::t',
 'sort' => false,
 'overwrite' => true,
 'removeUnused' => false,
 'markUnused' => true,
 'except' => [
  '.svn',
  '.git',
  '.gitignore',
  '.gitkeep',
  '.hgignore',
  '.hgkeep',
  '/messages',
  '/BaseYii.php',
 ],
 'only' => [
  '*.php',
 ],
 'format' => 'php',
 'db' => 'db',
 'sourceMessageTable' => '{{%source_message}}',
 'messageTable' => '{{%message}}',
 'catalog' => 'messages',
 'ignoreCategories' => [],
 'phpFileHeader' => '',
 'phpDocBlock' => null,
];

修改后的代码,如下:

return [
 'color' => null,
 'interactive' => true,
 'help' => null,
 'sourcePath' => '@app',
 'messagePath' => '@app/messages',
 'languages' => ['zh-CN', 'ru-RU'],
 'translator' => 'Yii::t',
 'sort' => false,
 'overwrite' => true,
 'removeUnused' => false,
 'markUnused' => true,
 'except' => [
  '.svn',
  '.git',
  '.gitignore',
  '.gitkeep',
  '.hgignore',
  '.hgkeep',
  '/messages',
  '/BaseYii.php',
  'vendor',
 ],
 'only' => [
  '*.php',
 ],
 'format' => 'php',
 'db' => 'db',
 'sourceMessageTable' => '{{%source_message}}',
 'messageTable' => '{{%message}}',
 'catalog' => 'messages',
 'ignoreCategories' => [],
 'phpFileHeader' => '',
 'phpDocBlock' => null,
];

我这里只改了两个地方

'sourcePath' => '@app', // 将@yii改为@app 只处理我们自己应用中的代码
'messagePath' => '@app/messages', // 将@yii/messages改为@app/messages 将需要翻译的字段提取出来要放的目录
'languages' => ['zh-CN', 'ru-RU'], // 要翻译成目标的语言,我这里定义了一个"中文"和"俄语"

'except' => [
 '.svn',
 '.git',
 '.gitignore',
 '.gitkeep',
 '.hgignore',
 '.hgkeep',
 '/messages',
 '/BaseYii.php',
 'vendor', // 将vendor目录下的过滤掉,不然可能太多了
],

第三步 生成翻译配置文件

执行下面的命令

./yii message/extract @app/config/i18n.php

执行完之后会在messages目录下(如果没有messages目录的话需要手动创建下)得到如下的目录结构

├── ru-RU
│   └── app.php
└── zh-CN
    └── app.php

提示下再做这个操作之前,需要在自己的项目中有类似Yii:t()的调用,比如我这里在components/HeaderWidget.php这个文件中

Yii::t('app', 'Home')

这里的app的作用是用来进行文件分类的,我这里暂时没有计划生成的时候会将所有需要翻译的字段放在app开头命名的php文件app.php文件中

如果像下面这样调用的话

Yii::t('appp', 'Home')

会生成一个appp.php的文件

第四步 翻译配置文件

看下中文的翻译文件messages/zh-CN/app.php,我的是下面这个

return [
 'Archive' => '',
 'Autokid' => '',
 'Blog' => '',
 'Ctime' => '',
 'IP地址' => '',
 'UserAgent' => '',
 '主题' => '',
 '内容' => '',
 '姓名' => '',
 '日期' => '',
 '邮箱地址' => '',
 '页面路径' => '',
 'Home' => '首页', // 右边的键值对应 Yii::t('app', 'Home')中的Home,只需要在value中写入需要的汉字就可以了。
];

第五步 修改目标国际化语言

修改配置文件

'language' => 'zh-CN', // 指定为要翻译的语言

再打开网页,就可以看到已经翻译成了对应需要的语言,当然这样的配置很不灵活,如果是部署多态机器并通过域名或者其他方式来实现的话,也是可以的,这里的话我建议如下方式

创建自己的Controller,然后将语言配置放在Session中,通过获取Session中的语言来更换全站的语言。具体见后面分享

提示,网站很多地方提到要加个配置,官方也是

'i18n' => [
 'translations' => [
  'app*' => [
   'class' => 'yii\i18n\PhpMessageSource',
   'basePath' => '@app/messages',
   'sourceLanguage' => 'en-US',
   'fileMap' => [
    'app' => 'app.php',
   ],
  ],
 ],
],

我这边在配置的时候没有加,运行也都是正常的,如有遇到问题,可以一起沟通交流下。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php 静态变量与自定义常量的使用方法
Jan 26 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
Zend的MVC机制使用分析(二)
May 02 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
php防止站外远程提交表单的方法
Oct 20 PHP
php导入大量数据到mysql性能优化技巧
Dec 29 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
Sep 17 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 #PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 #PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 #PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 #PHP
PHP实现类似题库抽题效果
Aug 16 #PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 #PHP
Laravel框架实现定时发布任务的方法
Aug 16 #PHP
You might like
PHP 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
Python创建日历实例
2014/08/21 Python
python对数组进行反转的方法
2015/05/20 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
Python 多进程原理及实现
2020/12/21 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
《桂林山水》教学反思
2014/02/08 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
人事代理委托书
2014/09/27 职场文书
工作简报怎么写
2015/07/21 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python