使用 ajax 更改语言 Laravel4


Change language Laravel4 using ajax

我正在尝试使用 Laravel4 将语言从英语更改为法语而不刷新页面 (ajax),为了记住用户的选择,我将其存储在当前会话中,ajax 请求工作正常,但语言不会仅在我刷新整个页面 (F5) 后才更改,这是我正在尝试做的一个例子, 以下是我的观点:

<!DOCTYPE html>
<html>
<head>
    <meta name="_token" content="{{ csrf_token() }}" />
    <title>Test Ajax</title>
</head>
<body>
<div id="div">{{ trans('test.welcome') }}</div>  <br />
{{ trans('test.test') }}
<a id="change_language" href="javascript:void(0);">Change language</a>
<form method="post" action="javascript:void(0);">
    <input id="name" type="text" />
    <input id="go" type="submit" value="Go" />
    <div id="feedback"></div>
</form>
{{ HTML::script('js/jquery.js') }}
{{ HTML::script('js/ajax.js') }}
</body>
</html>

这是我的 Ajax 请求:

$("#change_language").click(function(){
        $('#feedback').html('<img src="./img/loading.gif" alt="Loading ..."/>');
        $.ajax({
            url:'change-language',
            type: "POST",
            headers: {
                'X-CSRF-Token': $('meta').attr('content')
            },
            success:function(result){
                $('#feedback').html(result);    
          }});
        }); 

这是我的路线.php文件:

Route::group(array('before' => 'auth'), function() {
    Route::group(array('before' => 'csrf'), function() {
    Route::post('change-language', array(
        'as'    => 'change-language',
        'uses'  => 'AjaxController@changeLanguage'
        ));
    });
));

这是我在控制器中的函数:

public function changeLanguage()
{
    Session::put('lang', 'fr');
    return 'success';
}

这就是我将用户的语言存储在应用程序/开始/全局中的方式.php

App::setLocale(Session::get('lang', Config::get('App.locale')));

所以我要问的是:有没有办法只刷新我页面中的特定部分,例如在不刷新整个页面的情况下id="div" div

需要重新加载整个页面,因为在分析刀片文件期间会呈现字符串。Ajax 请求将使用的语言环境保存在会话中,但不会再次呈现您的页面。

如果你想在不重新加载的情况下更改页面内容,你必须使用 JavaScript:

  • 使用 Ajax 发送"区域设置更改"请求
  • 返回要更改的字符串(例如作为 JSON 对象)
  • 使用 JS 将所需的 DOM 元素更改为接收的区域设置

这可以(取决于要更改的元素数量)安静很多工作。我仍然建议重新加载页面,我认为它不会改变您网页的可用性。