当我尝试使用国际化更改页面时,我的高级模板出现问题。 我试着解释一下。要在我的网站上使用国际化,我已按照以下步骤操作:
在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
答案 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', []);
}
}