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上传、管理照片示例
Oct 09 PHP
php 禁止页面缓存输出
Jan 07 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
PHP语法自动检查的Vim插件
Aug 11 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
Oct 10 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
php 获取文件行数的方法总结
Oct 11 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
详解使用php调用微信接口上传永久素材
Apr 11 PHP
PHP实现链式操作的三种方法详解
Nov 16 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+xml编程之xpath的应用实例
2015/01/24 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
javascript 日期常用的方法
2009/11/11 Javascript
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
js表单登陆验证示例
2016/10/19 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
Python解析json文件相关知识学习
2016/03/01 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
通过python检测字符串的字母
2020/02/18 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
python实现与redis交互操作详解
2020/04/21 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
土木工程毕业生自荐信
2013/09/21 职场文书
《观舞记》教学反思
2014/04/16 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
初中学校对照检查材料
2014/08/19 职场文书
员工试用期自我评价
2014/09/18 职场文书
优秀教师申报材料
2014/12/16 职场文书
会计工作总结范文2014
2014/12/23 职场文书
九华山导游词
2015/02/03 职场文书
2016国培研修心得体会
2016/01/08 职场文书
执行力心得体会范文
2016/01/11 职场文书
Python基础 括号()[]{}的详解
2021/11/07 Python
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers