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 discuz 主题表和回帖表的设计
Mar 13 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
php+ajax 实现输入读取数据库显示匹配信息
Oct 08 PHP
使用PHP实现生成HTML静态页面
Nov 18 PHP
浅析Yii2缓存的使用
May 10 PHP
详解php中空字符串和0之间的关系
Oct 23 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
Yii2框架中日志的使用方法分析
May 22 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
Laravel 实现添加多语言提示信息
Oct 25 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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中date与gmdate的区别及默认时区设置
2014/05/12 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
Javascript算符的优先级介绍
2013/03/20 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
Vue 进入/离开动画效果
2017/12/26 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python Socket编程入门教程
2014/07/11 Python
python错误处理详解
2014/09/28 Python
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
GC是什么?为什么要有GC?
2013/12/08 面试题
大学生求职信范文应怎么写
2014/01/01 职场文书
教师评优事迹材料
2014/01/10 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
处级干部考察材料
2014/12/24 职场文书
个人优缺点总结
2015/02/28 职场文书
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python