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 相关文章推荐
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
PHP5 面向对象程序设计
Feb 13 PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
Jul 09 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
Yii控制器中操作视图js的方法
Jul 04 PHP
php进程间通讯实例分析
Jul 11 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
php简单压缩css样式示例
Sep 22 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
php单例模式实现方法分析
2015/03/14 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
Vuex模块化应用实践示例
2020/02/03 Javascript
python插入排序算法的实现代码
2013/11/21 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
django ajax json的实例代码
2018/05/29 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
python 如何快速复制序列
2020/09/07 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
zabbix监控mysql的实例方法
2021/06/02 MySQL
Python+Tkinter制作专属图形化界面
2022/04/01 Python
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS