使用 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);
}});
});
这是我的 route.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';
}
这就是我在 App/start/global.php
中存储用户语言的方式
App::setLocale(Session::get('lang', Config::get('App.locale')));
所以我要问的是:有什么方法可以只刷新我页面中的特定部分,例如 div
有 id="div"
而无需刷新整个页面?
您将需要重新加载整个页面,因为在解析 blade 文件期间会呈现字符串。 Ajax 请求为您将使用过的语言环境保存在 session 中,但不会再次呈现您的页面。
如果您想在不重新加载的情况下更改页面内容,您必须使用 JavaScript:
- 使用 Ajax
发送 'locale change' 请求
- Return 您要更改的字符串(例如 JSON object)
- 使用 JS
将所需的 DOM 元素更改为接收到的语言环境
这可能(取决于您要更改的元素的数量)安静很多工作。我仍然建议重新加载页面,我认为这不会改变您网页的可用性。
我正在尝试使用 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);
}});
});
这是我的 route.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';
}
这就是我在 App/start/global.php
中存储用户语言的方式App::setLocale(Session::get('lang', Config::get('App.locale')));
所以我要问的是:有什么方法可以只刷新我页面中的特定部分,例如 div
有 id="div"
而无需刷新整个页面?
您将需要重新加载整个页面,因为在解析 blade 文件期间会呈现字符串。 Ajax 请求为您将使用过的语言环境保存在 session 中,但不会再次呈现您的页面。
如果您想在不重新加载的情况下更改页面内容,您必须使用 JavaScript:
- 使用 Ajax 发送 'locale change' 请求
- Return 您要更改的字符串(例如 JSON object)
- 使用 JS 将所需的 DOM 元素更改为接收到的语言环境
这可能(取决于您要更改的元素的数量)安静很多工作。我仍然建议重新加载页面,我认为这不会改变您网页的可用性。