Laravel 5.8 验证本地化 - 不翻译错误消息

Laravel 5.8 Validation Localization - not translating error messages

我有一个问题,应该比较简单,但是我已经阅读了文档和这里的多个帖子,仍然无法弄清楚。 :(

我正在创建一个 Laravel 具有本地化(英语和法语)的应用程序。就本地化而言,页面上一切正常。但是,在验证方面,我似乎无法翻译错误。

下面是一些示例代码:

请注意,我删除了大部分不相关的代码以使此示例更清晰。

控制器中的验证器

 $validator = Validator::make($request->all(), [
      'email' => 'required|email|max:120',
 ]);

Blade

<div class="form-group">
    <label for="input-email">@error('email') {{ $errors->first('email') }} @else @lang('index.email') @enderror</label>
    <input type="email" name="email" placeholder="@lang('index.email')" value="{{ old('email') }}">
</div>

验证结构

resources/lang

zh

validation.php

fr

validation.php

fr/validation.php

<?php

return [
    'email' => 'Veuillez insérer une adresse email valide.',
];

en/validation.php

php

return [
    'email' => 'Please insert a valid email address.',
];

我试过: - 清理缓存:

php artisan cache:clear

我注意到的一件事是它似乎总是 return 带有英文验证。它似乎忽略了 fr/validation.php 文件。

有人知道为什么吗?有没有办法在验证器中强制使用语言环境?或者,我在这里遗漏了什么吗?非常感谢您的评论、建议和想法!

感谢@nakov 的建议。我能够在 config/app.php 文件中强制使用该语言。

'locale' => 'fr',

在这里,它会更改验证的语言环境,这太棒了。现在,问题是,为什么 "link" 在控制器中丢失/损坏?即,明知applocale已设置为FR,为什么要带回validation.php的EN版本?我可以在控制器中强制执行此操作吗?

以下是我如何使用路由设置来设置语言环境:

Route::get('/{lang?}', function($lang = 'en') {
    App::setLocale($lang);
    return view('welcome');
});

#答案

感谢@nakov 提供的所有帮助和建议!

因此,问题在于区域设置 不会持续存在 ,因此在验证失败时刷新时会丢失。

我是怎么解决的?

控制器内:

"use" 申请

use Illuminate\Foundation\Application;

将它带入你的函数中,在我的例子中它是商店:

public function store(Application $app, Request $request)

在 Blade 中,在隐藏输入中设置语言环境。我将我的命名为 "language",但您可以随意命名。然后,再次在控制器中,将区域设置为此语言

$app->setLocale($request->language);

还有宾果游戏!你的问题解决了。 :) 再次感谢@nakov!

谢谢!

布拉德

因此,根据问题下方评论中的讨论,问题是语言环境未在其他路由中保留。为此,您需要中间件。 是一个很好的答案。

编码愉快! :)