Yii2语言国际化自动配置

转载

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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,909评论 25 709
  • 我是在公交车上偶遇到阿玉的,彼此微怔了一下,便拥抱在了一起,毕竟我俩有八年没见了。 我俩初中时是最好的朋友,同吃同...
    渡心树洞阅读 5,186评论 3 3
  • 在小学英语的教学中,因为课文的简单易懂,所含的信息量少的缘故,很多小学英语教师忽视了文化对语言的影响,而导...
    远方那朵格桑花阅读 3,541评论 0 0
  • 嗨,亲爱的,听说你最近有心事。 我看到你手里拽着一封辞职信不知如何是好。 我知道你不想失去这份工作,因为这已经是你...
    阿池姑凉阅读 4,613评论 0 0
  • 候鸟 到了分别的季节 万木凋零的景色 总是让记忆变得感伤 怎奈心中千般不舍 又到了分别的季节 和心爱的地和心爱的那...
    贫僧化妞不化缘阅读 1,301评论 0 0

友情链接更多精彩内容