首页 > 解决方案 > Laravel:在关闭时翻译验证消息

问题描述

我正在使用 Laravel 的 HTTP 请求类来验证一些表单数据。对于某些字段,我需要一个闭包来进行自定义验证。

由于我的应用程序有两种本地化版本(英语和德语),如果验证失败,我需要翻译错误消息,我已经这样做了。

我遇到的唯一问题是$fail()关闭中的 -message 。

这就是我根据闭包中的当前本地化翻译消息的方式:

if (app()->getLocale() == 'en') {
   $fail('Please choose a name for "' .$value. '" in order to continue.');
} 
elseif (app()->getLocale() == 'de') {
   $fail('Bitte wählen Sie einen Namen für "' .$value. '" um fortzufahren.');
}

我知道我可以使用en.json用于翻译整个网站的 -file,但我无法使用$value句子的内部。

我想知道是否有更好的方法来实现这一点?

编辑

由于我使用的是闭包,因此我必须在闭包内编写“默认”德语错误消息,如下所示:

$fail('Bitte wählen Sie einen Namen für "' .$value. '" um fortzufahren.');

这样做我得到了$value在视图中显示的错误消息内部的值,如下所示:

@if ($errors->has('person.*.name'))
   <label class="error-small">@lang($errors->first('person.*.name'))</label>
@endif

所以$value变量会被插入到消息中,所以我不能再通过json翻译文件访问变量了..

标签: laravelvalidationlocalizationclosures

解决方案


为什么不能传递参数?

看看文档

像这样的东西:

messages.php

'chose_name' => 'Please choose a name for :name in order to continue.'
__('messages.chose_name', ['name' => $value])

- 编辑

对于 JSON

__('Please choose a name for :name in order to continue.', ['name' => $value])

你有没有试过这个:

de.json

{"Please choose a name for :name in order to continue.": "Bitte wählen Sie einen Namen für :name um fortzufahren."}

推荐阅读