Yii2语言国际化自动配置

简介: 转转发Yii2语言国际化自动配置如何实现语言国际自动化,大家可能觉得自动化,是不是不需要配置就自动切换,这个思路我之前也想过,能不能根据IP来判断地理位置然后确定其语言,网上找过一个"IpToCountry"相关的...

转转发

Yii2语言国际化自动配置

如何实现语言国际自动化,大家可能觉得自动化,是不是不需要配置就自动切换,这个思路我之前也想过,能不能根据IP来判断地理位置然后确定其语言,网上找过一个"IpToCountry"相关的,有兴趣的可以搜索出来看看,他会提供一个ip对照的表,每隔一段时间会更新一次,不过这个暂时没做,后面考虑尝试下

这里我们说下Yii2如何实现,因为我们上面的一篇文章分享做了语言国际化的配置,也将对应的语言翻译了出来,下面就是需要根据条件来做切换
从配置文件我们知道只需要更改language这个配置值就可以了,但是要在哪里更改呢。这里我的操作步骤如下

我想整体对项目的所有内容进行语言国际化,唯一我能想到的是修改控制器,有的说是修改 入口文件,我觉得修改入口文件有点破坏框架结构了。

第一步 创建一个AppController

继承yii/web/Controller,实现如下

<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;

class AppController extends Controller
{
    public function init()
    {
        if (isset(Yii::$app->session['_lang'])) {
            Yii::$app->language = Yii::$app->session['_lang'];
        }

        parent::init();
    }
}


第二步 将所有自己的控制器都继承AppController

做类似如下操作,我这里只是举了一个BlogController的例子

class BlogController extends AppController

第三步 实现设置多语言的处理

我这里在我的控制器SiteController加了如下Action

public function actionLanguage($language)
{
    Yii::$app->session['_lang'] = $language;
    $redirectUrl = Yii::$app->request->headers['Referer'];
    if (!$redirectUrl) {
        $redirectUrl = Yii::$app->homeUrl;
    }
    return $this->redirect($redirectUrl);
}


每次需要修改语言的话,只要将语言传入actionLanguage,就会更改session中_lang的值,然后每个控制器在调用的时候都会先去更改项目的language

第四步 前端UI修改

通过在前端加个修改的逻辑,方便前端访问者进行更改语言设置

<ul class="nav navbar-nav navbar-right">
  <li class="dropdown">
    <a href="j#" data-target="#" class="dropdown-toggle" data-toggle="dropdown">
      {{ Yii.t('app', 'Language') }}
      <b class="caret"></b>  
    </a>
    <ul class="dropdown-menu">
      <li
        class="{% if app.session['_lang'] == 'zh-CN' %}active{% endif %}"
      >
        <a
          href="{{ url(['site/language'], { 'language': 'zh-CN' })}}"
        >{{ Yii.t('app', 'Chinese') }}</a>
      </li>
      <li
        class="{% if app.session['_lang'] == 'en-US' %}active{% endif %}"
      >
        <a 
          href="{{ url(['site/language'], { 'language': 'en-US' })}}"
        >{{ Yii.t('app', 'English') }}</a>
      </li>
    </ul>
  </li>
</ul>

我这里使用的Twig模板。

到这里就都设置完了,可以正常切换语言了。后面如果又加了新的内容进去的话,可以直接执行上文中提到的命令

./yii message/extract @app/config/i18n.php

如有不理解的地方可以加群详细了解

目录
相关文章
Cannot access ‘androidx.lifecycle.HasDefaultViewModelProviderFactory‘ which is a supertype of ‘com.e
今天创建了个项目,突然出现了这样的问题,怎么处理都没用,网上找了一堆没发现答案,故此记录。
445 0
Cannot access ‘androidx.lifecycle.HasDefaultViewModelProviderFactory‘ which is a supertype of ‘com.e
|
安全 Java
java中BigDecimal详解
java中BigDecimal详解
|
存储 Apache 对象存储
MinIO是什么?
MinIO是什么?
629 0
Fail to create wsdl definition
Fail to create wsdl definition
96 0
|
运维 Java 程序员
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
本文介绍Elasticsearch Jest 批量操作bug 根因定位排查的方法。
1691 0
|
JavaScript 应用服务中间件 Shell
转码服务器
ffmpeg
2091 0
|
传感器 数据采集 算法
利用热红外遥感影像提取地表温度的草垛
地表温度作为地球环境分析的重要指标,而遥感技术作为现代重要的观测手段,使得基于遥感图像的地表温度反演的研究越来越多。主要的地表温度反演方法有:大气校正法,单窗算法,单通道法等等。本文以2013年花溪区的遥感影像为基础,介绍用辐射传输方程法对地表温度进行反演。 以Landsat8 LOI_TIRS卫星数字产品,下载花溪大致在图像中的遥感影像为基础数据,用“花溪区行政边界裁剪”得到预处理的图像。
468 0
利用热红外遥感影像提取地表温度的草垛
|
存储 监控 Kubernetes
DevOps 技术产品链
DevOps 技术产品链
341 0
DevOps 技术产品链
|
Java 应用服务中间件
IDEA创建Web项目详细说明
IDEA创建Web项目详细说明
187 0
IDEA创建Web项目详细说明
|
前端开发 开发工具 Android开发
iOS监听物理截图自动生成截图并跳转到反馈页面进行显示(截图内容包括系统的弹框视图UIAlertView/Controller)
iOS监听物理截图自动生成截图并跳转到反馈页面进行显示(截图内容包括系统的弹框视图UIAlertView/Controller)
477 0
iOS监听物理截图自动生成截图并跳转到反馈页面进行显示(截图内容包括系统的弹框视图UIAlertView/Controller)

热门文章

最新文章