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!
谢谢!
布拉德
因此,根据问题下方评论中的讨论,问题是语言环境未在其他路由中保留。为此,您需要中间件。 是一个很好的答案。
编码愉快! :)
我有一个问题,应该比较简单,但是我已经阅读了文档和这里的多个帖子,仍然无法弄清楚。 :(
我正在创建一个 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!
谢谢!
布拉德
因此,根据问题下方评论中的讨论,问题是语言环境未在其他路由中保留。为此,您需要中间件。
编码愉快! :)