【问题标题】:Specify Laravel validation language指定 Laravel 验证语言
【发布时间】:2016-03-31 05:35:27
【问题描述】:

是否有可能告诉 Laravel 验证器使用哪种语言进行验证?

我有一个应用程序,它的文本是英文,但对于某些表单,我需要验证错误才能以不同的语言返回字段。

我研究了一下,发现我可以使用\App::setLocale('ro')来设置应用程序的语言,因此resources/lang/ro/validation.php下的文件将用于验证,但我不想与@调和987654323@。在最坏的情况下,我可以调整它并在验证之前更改语言并在验证后再次将其更改回来,但这似乎不是一个好的解决方案。

我正在寻找更像这样的东西:

$this->validate($request, [
    'title' => 'required',
    'short' => 'required',
], 'lang_that_I_set_in_DB');

【问题讨论】:

    标签: validation laravel localization laravel-5.1


    【解决方案1】:

    如果您可以选择自定义验证器,您可以设置验证器翻译器的语言环境:

    $validator = Validator::make($request->all(), [
        'title' => 'required',
        'short' => 'required',
    ]);
    
    $validator->getTranslator()->setLocale('ro');
    
    $this->validateWith($validator);
    

    【讨论】:

    • 您能详细说明一下吗? getTranslator() 会是我的自定义验证器中的自定义方法吗?
    • "自定义验证器" 只是意味着您不能直接使用 trait ValidatesRequests 提供的 validate() 方法。 Validator::make() 只返回一个\Illuminate\Validation\Validator 的实例,因此您可以手动设置翻译器区域设置。然后,您可以使用 ValidatesRequest::validateWith() 通过您的“自定义”验证器实例验证请求。我已经编辑了我的答案以提供那部分。
    • 我还想提一下,这在使用表单请求类时会有所不同。
    • 我刚试过用这个,但是好像这个是 Laravel 5.2 才引入的,我现在用的是 5.1,你知道它在 5.1 的样子吗?
    • 很高兴您找到了解决方案!
    【解决方案2】:

    我确实想通了,谢谢指点!

    这是它在 Laravel 5.1 中的样子:

    $validator = \Validator::make($request->all(), [
        'title' => 'required',
        'short' => 'required',
    ]);
    
    $validator->getTranslator()->setLocale('ro');
    
    if ($validator->fails()) {
        return redirect()
            ->back()
            ->withErrors($validator)
            ->withInput();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 2017-06-13
      • 2020-09-06
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多