• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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#" rel="external nofollow" 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' })}}" rel="external nofollow" 
        >{{ Yii.t('app', 'Chinese') }}/a>
       /li>
       li
        class="{% if app.session['_lang'] == 'en-US' %}active{% endif %}"
       >
        a 
         href="{{ url(['site/language'], { 'language': 'en-US' })}}" rel="external nofollow" 
        >{{ Yii.t('app', 'English') }}/a>
       /li>
      /ul>
     /li>
    /ul>
    

    我这里使用的Twig模板。

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

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

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

    ps:使用yii生成映射目录

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

    使用以上命令,实际上就是按照i18n.php中给定的参数,执行扫描操作,将所有形如Yii::t('app', 'xxx')这样语句中的xxx取出,放入映射文件中。

    这时,在common/messages中会有zh-CN文件夹生成,里面的app.php即为映射文件。

    app.php

    return [
      'OpenId' => 'OpenId',
      'UserId' => '用户id',
      'UserName' => '用户名',
      'UserPortrait' => '用户头像',
      'About' => '关于我们',
      'Are you sure you want to delete this item?' => '确定要删除?',
      'Contact' => '联系方式',
      'Create' => '创建',
      'Create Myuser' => '创建用户',
      'Delete' => '删除',
      'Home' => '首页',
      'Login' => '登录',
      'My Company' => '我的网站',
      'Myusers' => '用户',
      'Reset' => '重置',
      'Search' => '搜索',
      'Update' => '更新',
      'Update {modelClass}: ' => '更新用户-',
    ];

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • YII2 实现多语言配置的方法分享
    • Yii2简单实现多语言配置的方法
    • Yii2语言国际化的配置教程
    • Yii配置文件用法详解
    • Yii学习总结之安装配置
    • yii2.0实现pathinfo的形式访问的配置方法
    • Yii2配置Nginx伪静态的方法
    • YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
    • Nginx配置PHP的Yii与CakePHP框架的rewrite规则示例
    • yii2 数据库读写分离配置示例
    • Yii框架多语言站点配置方法分析【中文/英文切换站点】
    上一篇:PHP实现负载均衡的加权轮询方法分析
    下一篇:PHP封装的验证码工具类定义与用法示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Yii2语言国际化自动配置详解 Yii2,语言,国际化,自动,配置,