Yii2 - 改变语言

时间:2016-11-08 16:15:29

标签: php yii2 yii2-advanced-app

当我尝试使用国际化更改页面时,我的高级模板出现问题。 我试着解释一下。要在我的网站上使用国际化,我已按照以下步骤操作:

在params.php中,我添加了这个:

<?php
   return [
     'adminEmail' => 'admin@example.com',
     'languages' => [
     'en' => 'English',
     'it' => 'Italian',
    ],
  ];

我已在我的前端\ views \ layouts \ main.php中添加此内容,以便在我的网站上调用上面插入的语言:

<?php 
   foreach(Yii::$app->params['languages'] as $key => $language){
   echo '<span class="language" id ="'.$key.'">'.$language.' | </span>';
   }
?> 
在我创建了一个名为main.js的新文件后

。为了允许yii2查看main.js文件,我在AppAsset.php中添加了它(它是否正确?)。在这个文件中我插入:

$(function(){
  $(document).on('click','.language', function(){
     var lang = $(this).attr('id');
     $.post('index.php?r=site/language', {'lang':lang},function(data){
    location.reload();  
  });
}); 
$(document).on('click','.fc-day', function(){
    var date = $(this).attr('data-date');       
        $get('index.php?r=event/create',{'date':date},function(data){
            $('#modal').modal(show)
            .find('#modalContent')
            .html(data);            
        });
}); 

$('#modalButton').click(function(){
        $('#modal').modal(show)
        .find('#modalContent')
        .load($(this).attr('value'));
});
}); 

之后在sitecontroller.php中我添加了这个:

public function actionLanguage()
{
    if(isset($_POST['lang'])){
        Yii::$app->language = $_POST['lang'];
        $cookie = new Yii\web\cookie([
        'name'=>'lang',
        'value'=>$_POST['lang']
    ]);
    Yii::$app->getResponse()->getCookies()->add($cookie);
    }
}

在config \ main.php之后我在组件中添加了这个:

'components' => [
    'i18n' => [
        'translations' => [
            'app' => [
                'class' => 'yii\i18n\PhpMessageSource',
                //'basepath' => @app/messages,
                'sourceLanguage' => 'it',
                'fileMap' => [
                    'app' => 'app.php', 
                    'app/error' => 'error.php',
                ],
            ],
        ],
    ],

最后我在根上创建了一个名为messages \ it和messages \ en的文件夹,并在两个文件(每个文件夹一个)内部调用app.php我已经插入了这个文本:

<?php
   return [
      'Benvenuto' => 'Welcome'
   ];

这一切......但是当我点击其中一种语言(意大利语或英语)后加载我的主页(正确)后,我看到以下消息:

jquery.js?ver = 1.11.3:4 POST http://localhost/mdf/frontend/web/index.php?r=site/language 400(错误请求)

如果我尝试直接粘贴此网址,我只会获得一个空白页: http://localhost/mdf/frontend/web/index.php?r=site/language

1 个答案:

答案 0 :(得分:1)

这只是对您的问题的部分回复

使用浏览器调用时的空白页面可能与您在这种情况下不会渲染nothings的事实有关。

尝试以这种方式管理ajax

public function actionLanguage()
{
    if (Yii::$app->request->isAjax) {
        $data = Yii::$app->request->post();
        if(isset($data['lang'])) {
            Yii::$app->language = $data['lang'];
            $cookie = new Yii\web\cookie([
              'name'=>'lang',
              'value'=>$_POST['lang']
            ]);
          Yii::$app->getResponse()->getCookies()->add($cookie);
          return;
        }
    } else {
        return $this->render('index', []);
    }
}