首页 > 解决方案 > Laravel 5.5 多语言验证

问题描述

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

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

路透社/web.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>

标签: ajaxlaravel

解决方案


使用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);
            }
        }
    });

推荐阅读