繁体   English   中英

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

[英]Laravel 5.8 Validation Localization - not translating error messages

我有一个问题,应该比较简单,但是我已经阅读了文档和此处的多个帖子,但仍然无法解决。 :(

我正在创建具有本地化(EN&FR)的Laravel应用程序。 就本地化而言,页面上的所有内容均正常运行。 但是,在验证方面,我似乎无法翻译出错误。

这是一些示例代码:

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

控制器内的验证器

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

<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>

验证结构

资源/郎

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

我注意到的一件事是,它似乎总是以英语进行验证。 似乎忽略了fr / validation.php文件。

有人知道为什么吗? 是否有某种方法可以强制验证器中的语言环境? 或者,我在这里想念什么吗? 非常感谢您的评论,建议和想法!

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

'locale' => 'fr',

在这里, 它将更改验证的语言环境 ,这真棒。 现在的问题是,为什么控制器中的“链接”丢失/断开了? 即,知道applocale已设置为FR,为什么要带回EN版本的validate.php? 我可以在控制器内强制执行此操作吗?

这是我通过“路由”设置来设置语言环境的方法:

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

#回答

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

因此,问题在于语言环境不会持续存在 ,因此在验证失败时刷新时会丢失。

我该如何解决?

在控制器内:

“使用”应用程序

use Illuminate\Foundation\Application;

将其带入您的函数中,在我的情况下是存储:

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

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

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

和宾果游戏! 您的问题已解决。 :)再次感谢@nakov!

谢谢!

布拉德

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

编码愉快! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM