我需要翻译JSON文件中Laravel的默认验证错误。问题是,如果我想覆盖翻译,比如resourceses/lang/de.json文件中的"required"验证错误,它是不起作用的。
我必须这样做的原因是我使用的短语翻译系统。
知道吗?谢谢
更新
经过一些研究,现在我明白了我的"问题"是什么。Laravel使用trans((函数来翻译验证错误,但如果您想使用Laravel的JSON翻译,则必须使用__((函数。好吧,我知道他们为什么这么做,因为验证错误是由"短键"和JSON格式的翻译构成的,如果使用字符串作为键的话。但是,如果我仍然想用JSONish(我知道这是一个未来主义的词(的方式翻译默认错误呢?在这里关注我的解决方案:
首先,您必须创建一个表单请求(https://laravel.com/docs/7.x/validation#creating-表单请求(:
php artisan make:request UserUpdateRequest
在新创建的表单请求文件中,您必须覆盖消息功能才能翻译验证错误:
namespace AppHttpRequestsv1;
use IlluminateFoundationHttpFormRequest;
use IlluminateContractsValidationValidator;
use AppExceptionsApiValidationException;
class UserUpdateRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => ['required', 'string', 'min:3', 'max:255'],
];
}
/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'name.required' => __('The user name is required.'),
'name.string' => __('The user name must be a string.'),
'name.min' => __('The user name must be at least three characters.'),
'name.max' => __('The user name may not be greater than 255 characters.'),
];
}
}
现在我们必须创建翻译文件(https://laravel.com/docs/7.x/localization#using-翻译字符串作为键(,并将新的翻译字符串放入其中。
# resourses/lang/de.json
{
"The user name is required." : "The user name is required.",
"The user name must be a string." : "The user name must be a string.",
"The user name must be at least three characters." : "The user name must be at least three characters.",
"The user name may not be greater than 255 characters." : "The user name may not be greater than 255 characters."
}
仅此而已。我希望对翻译过程的描述对其他人有用。
根据提供的答案,我挖掘了更多内容,发现双下划线函数在默认validation.php文件中按预期工作!我用Laravel 5.6测试了它。
我有一个类似的问题,我需要为用户提供一种方式来为网络应用程序中的所有内容提供翻译,所以我开始测试解决方案。虽然它按说明工作,但它不再使用占位符属性,因此在我的情况下它的可扩展性不是很好。
我使用双下划线函数测试了以下要求:
- locale和fallback_locale在app.php中设置为'en'
- resources/lang中有一个en文件夹
- en文件夹中有一个validation.php文件
- resources/lang文件夹中有一个locale json文件(类似于pt-br.json(
- 应用程序使用App::setlocale((动态设置区域设置
validation.php中需要更改的只是使用字符串中的函数,如下所示:
# before
'unique' => 'The :attribute has already been taken.',
#after
'unique' => __('The :attribute has already been taken.'),
json文件需要有一个具有相同字符串的字符串键,如下所示:
"The :attribute has already been taken.": ":attribute ju00e1 existe!"
谢谢你让我更多地思考这个问题。我认为Laravel应该对这样的用例有更好的支持。
我需要翻译JSON文件中Laravel的默认验证错误。问题是,如果我想覆盖翻译,比如resourceses/lang/de.json文件中的"required"验证错误,它是不起作用的。
我必须这样做的原因是我使用的短语翻译系统。
知道吗?谢谢
答案
经过一些研究,现在我明白了我的"问题"是什么。Laravel使用trans((函数来翻译验证错误,但如果您想使用Laravel的JSON翻译,则必须使用__((函数。好吧,我知道他们为什么这么做,因为验证错误是由"短键"和JSON格式的翻译构成的,如果使用字符串作为键的话。但是,如果我仍然想用JSONish(我知道这是一个未来主义的词(的方式翻译默认错误呢?在这里关注我的解决方案:
首先,您必须创建一个表单请求(https://laravel.com/docs/7.x/validation#creating-表单请求(:
php artisan make:request UserUpdateRequest
在新创建的表单请求文件中,您必须覆盖消息功能才能翻译验证错误:
namespace AppHttpRequestsv1;
use IlluminateFoundationHttpFormRequest;
use IlluminateContractsValidationValidator;
use AppExceptionsApiValidationException;
class UserUpdateRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => ['required', 'string', 'min:3', 'max:255'],
];
}
/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'name.required' => __('The user name is required.'),
'name.string' => __('The user name must be a string.'),
'name.min' => __('The user name must be at least three characters.'),
'name.max' => __('The user name may not be greater than 255 characters.'),
];
}
}
现在我们必须创建翻译文件(https://laravel.com/docs/7.x/localization#using-翻译字符串作为键(,并将新的翻译字符串放入其中。
# resourses/lang/de.json
{
"The user name is required." : "The user name is required.",
"The user name must be a string." : "The user name must be a string.",
"The user name must be at least three characters." : "The user name must be at least three characters.",
"The user name may not be greater than 255 characters." : "The user name may not be greater than 255 characters."
}
仅此而已。我希望对翻译过程的描述对其他人有用。