Laravel 5.5 多语言验证



请告诉我,我遇到了一个问题。有一个基于Laravel5.5的网站。该网站具有多语言(两种语言en/ru(。对于多语言,我正在使用:

  • 迪姆萨夫/拉拉维尔-可翻译
  • 麦卡马拉/拉拉维尔本地化

将语言文件添加到目录 resources/lang/ru。问题是表单的验证。该站点在模态窗口中有一个反馈表单,使用 ajax(发送和验证(,错误消息仅以默认语言显示,默认语言为 en。我尝试在没有 ajax 帮助的情况下从表单发送数据,一切正常,消息以俄语和英语显示。

转播/网络.php

Route::group(['prefix' => LaravelLocalization::setLocale()], function(){
Route::get('/', 'PagesController@getProfile')->name('profile');
Route::get('/skills', 'PagesController@getSkills')->name('skills');
Route::get('/portfolio', 'PagesController@getPortfolio')->name('portfolio');
Route::get('/resume', 'PagesController@getResume')->name('resume');
Route::post('/contact', 'PagesController@contact');
});

控制器

public function contact(Request $request){
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'message' => 'required'
]);
if ($validator->passes()) {
Mail::to('mycontactform@mail.ru')->send(new Contact($request));
return response()->json(['success'=>'Message sent successfully!']);
}
return response()->json(['error'=>$validator->errors()->all()]);
}

.js

$(document).ready(function() {
$(".btn-send-message").click(function(e){
e.preventDefault();
$.ajax({
url: "/contact",
type:'POST',
data: $('#contact-form').serialize(),
beforeSend: function() {
$("#loading").show();
$(".fa-paper-plane").hide();
},
complete: function() {
$("#loading").hide();
$(".fa-paper-plane").show();
},
success: function(data) {
if($.isEmptyObject(data.error)){
printSuccessMsg();
}else{
printErrorMsg(data.error);
}
}
});
});
var $success_msg = $(".print-success-msg");
var $error_msg = $(".print-error-msg");
function printSuccessMsg() {
$success_msg.html('Message sent successfully!');
$success_msg.css('display','block');
$success_msg.delay(5000).fadeOut(350);
$('#contact-form')[0].reset();
}
function printErrorMsg (msg) {
$error_msg.find("ul").html('');
$error_msg.css('display','block');
$.each( msg, function( key, value ) {
$error_msg.find("ul").append('<li>'+value+'</li>');
});
$error_msg.delay(5000).fadeOut(350);
}
});

形式

<div class="modal-body col-md-8 offset-md-2">
<div class="alert alert-danger print-error-msg" style="display:none">
<strong>Errors:</strong>
<ul></ul>
</div>
<div class="alert alert-success print-success-msg" style="display:none"></div>
{!! Form::open(['id'=>'contact-form']) !!}
<div class="form-group">
<input class="form-control" type="text" name="name" id="name" placeholder="Your Name">
</div>
<div class="form-group">
<input class="form-control" type="email" name="email" id="email" placeholder="Your Email">
</div>
<div class="form-group">
<textarea class="form-control" name="message" id="message" rows="3"></textarea>
</div>
<button type="button" class="btn btn-success btn-send-message"><i class="fas fa-paper-plane"></i>
Send Message <span id="loading" style="display: none;"><img class="loader"
          src="{{ asset('images/loading.gif') }}"></span>
</button>
{!! Form::close() !!}
</div>

使用 LaravelLocalization::getLocalizedURL(( 返回一个适合$locale的 URL。

所以你的ajax代码将是。

$.ajax({
url: "{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(),'/contact') }}",
type:'POST',
data: $('#contact-form').serialize(),
beforeSend: function() {
$("#loading").show();
$(".fa-paper-plane").hide();
},
complete: function() {
$("#loading").hide();
$(".fa-paper-plane").show();
},
success: function(data) {
if($.isEmptyObject(data.error)){
printSuccessMsg();
}else{
printErrorMsg(data.error);
}
}
});

当您返回响应时,请尝试使用此帮助程序__('translated_string')

若要使用此帮助程序,必须在这些文件夹中创建一些translate.php文件resources/lang/enresources/lang/en

例如:

文件resources/lang/en/translate.php应包含此数组

return [
'success_message' => 'Message sent successfully!',
];

文件:resources/lang/ru/translate.php应包含此数组

return [
'success_message' => 'Сообщение успешно отправлено!',
];

例如:

return response()->json(['success'=> __('translate.success_message') ]);

要获取一些翻译的字符串,请对此帮助程序使用点表示法;

拉拉维尔本地化助手

最新更新