【发布时间】:2020-04-22 08:45:23
【问题描述】:
我正在尝试使用 ajax 更改系统的语言,但我不知道如何更改语言环境并使其永久化,直到用户决定再次更改。目前,app.php 中的语言环境设置为'en',我想使用选择菜单将其更改为'nl'。我尝试使用App::setLocale($value),但不幸的是,这并没有做任何事情。我怎样才能做到这一点?
表格
<form method="POST" action="{{ route('change_language',['id' => Auth::user()->id]) }}" class="form-row my-3">
{{ csrf_field() }}
{{ method_field('PATCH') }}
<div class="form-group col-9">
<h4 class="mb-0">{{ __('Language') }}</h4>
<p class="m-0 sub-text">{{ __('Change the language of the dashboard') }}</p>
</div>
<div class="form-group col-3 d-flex justify-content-end align-items-center">
<select name="language" id="language" class="form-control">
<option value="nl" {{ ( Auth::user()->language == 'nl') ? 'selected' : '' }}>{{ __('Dutch') }}</option>
<option value="en" {{ ( Auth::user()->language == 'en') ? 'selected' : '' }}>{{ __('English') }}</option>
</select>
</div>
<div class="col-md-12 text-right">
<p class="text-success saved-message" style="display: none">{{ __('The language has changed!') }}</p>
</div>
</form>
AJAX
$('#language').change(function() {
$.ajax({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
url: '{{ route('change_language', ['id' => Auth::user()->id]) }}',
type: 'PATCH',
data: {"language": $(this).children("option:selected").val()},
success: function(data) {
$('.saved-message').fadeIn();
setTimeout(function() {
$('.saved-message').fadeOut();
}, 1000);
}
})
});
路线
Route::patch('/dashboard/user/{id}/language', 'PreferencesController@changeLanguage')->name('change_language');
控制器方法
public function changeLanguage(Request $request, $id)
{
$user = User::findOrFail($id);
$user->language = $request->get('language');
$user->save();
App::setLocale($request->language);
}
【问题讨论】:
标签: php jquery ajax laravel laravel-6