2016-11-08 8 views
1

Ich habe ein Problem mit meiner erweiterten Vorlage, wenn ich versuche, Seite mit Internationalisierung zu ändern. Ich versuche es zu erklären. Um die Internationalisierung auf meiner Website zu verwenden Ich habe diese Schritte durchführen:Yii2 - Sprache ändern

In params.php, ich habe diese hinzugefügt:

<?php 
    return [ 
    'adminEmail' => '[email protected]', 
    'languages' => [ 
    'en' => 'English', 
    'it' => 'Italian', 
    ], 
    ]; 

Ich habe dies hinzugefügt in meinem Frontend \ Ansichten \ Layouts \ main.php zu Rufen Sie auf meiner Website die oben eingefügten Sprachen an:

<?php 
    foreach(Yii::$app->params['languages'] as $key => $language){ 
    echo '<span class="language" id ="'.$key.'">'.$language.' | </span>'; 
    } 
?> 

nachdem ich eine neue Datei mit dem Namen main.js erstellt habe. Damit yii2 die Datei main.js sehen kann, habe ich diese in der AppAsset.php hinzugefügt (ist das korrekt?). In dieser Datei das ich einfügen:

$(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')); 
}); 
}); 

danach in dem sitecontroller.php ich hinzugefügt habe dies:

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); 
    } 
} 

nach in config \ main.php Ich habe dies in Komponenten hinzugefügt:

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

schließlich habe ich auf der root einen Ordner namens Nachrichten \ it und Nachrichten \ en und in zwei Dateien (eine pro Ordner) namens app.php erstellen Ich habe diesen Text einfügen:

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

das ist alles ... aber nach meiner Homepage (richtig) laden, wenn ich auf einer der Sprachen klicken (Italienisch oder Englisch) Ich nehme die folgenden Meldungen:?

jquery.js ver = 1,11 0,3: 4 POST http://localhost/mdf/frontend/web/index.php?r=site/language 400 (Bad Request)

Und wenn ich versuche, direkt diese uRL einfügen, ich erhalte nur eine leere Seite: http://localhost/mdf/frontend/web/index.php?r=site/language

Antwort

1

Dies ist nur ein Teil der Antwort auf Ihre Frage

Die leere Seite, wenn Sie mit Browser aufrufen, könnte damit zusammenhängen, dass Sie in diesem Fall keine Zeichen darstellen.

versuchen das AJAX auf diese Weise verwalten

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', []); 
    } 
} 
+0

Danke ... ich das leere Seite Problem gelöst ... natürlich habe ich immer das andere Problem über Fehler 400 Bad Request ... – Carlo