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 相关文章推荐
将数字格式的计算结果转为汉字格式
Oct 09 PHP
PHP+javascript液晶时钟
Oct 09 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 PHP
php 需要掌握的东西 不做浮躁的人
Dec 28 PHP
php旋转图片90度的方法
Nov 07 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
PHP图片处理之图片背景、画布操作
Nov 19 PHP
php验证码生成代码
Nov 11 PHP
PHP三种方式实现链式操作详解
Jan 21 PHP
Laravel学习教程之路由模块
Aug 18 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
Apr 02 PHP
关于laravel模板中生成URL的几种模式总结
Oct 18 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面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
python数据分析:关键字提取方式
2020/02/24 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
宿舍使用违章电器检讨书
2014/01/12 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
原生JS实现分页
2022/04/19 Javascript
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS