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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
isset和empty的区别
Jan 15 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
php读取文件内容的方法汇总
Jan 24 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
微信API接口大全
Apr 15 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
php获取手机端的号码以及ip地址实例代码
Sep 12 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
如何利用PHP实现上传图片功能详解
Sep 24 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实现QQ登录实例代码
2016/01/14 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
jQuery 动画基础教程
2008/12/25 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
Python中的迭代器漫谈
2015/02/03 Python
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
全面分析Python的优点和缺点
2018/02/07 Python
python pycharm的安装及其使用
2019/10/11 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
运动会稿件100字
2014/02/21 职场文书
学习决心书
2014/03/11 职场文书
四十年同学聚会致辞
2015/07/28 职场文书