laravel 请求返回消息键翻译
Posted
技术标签:
【中文标题】laravel 请求返回消息键翻译【英文标题】:laravel request return message keys translations 【发布时间】:2020-03-07 03:38:53 【问题描述】:我有一个 Laravel 应用程序和另一个通过 API 调用 Laravel 的应用程序。这两个项目是分开的。
Laravel 和 App 有自己的多语言系统。他们独立工作,但使用相同的关键翻译。
所以我的想法是所有 Laravel 响应都必须是翻译键,例如:'messages.success'。
有了这个响应,应用就可以翻译它。
所有这些都工作正常。
当我开始使用 Laravel Requests 来验证表单时,问题就出现了。 在这种情况下,验证错误会自动翻译,因此 App 会收到使用 Laravel 应用程序默认语言翻译的响应。
那我该怎么办?
我想到了 2 个想法,但我不知道它们是否可行。
1:将语言传递给参数。不知道能不能用,如何在 Laravel 验证 Request 之前设置语言?
2:重写请求的功能以返回不带翻译的消息,因此返回“messages.success”而不是“Felicidades”。我真的很喜欢这种方法。但是我怎样才能为所有规则做到这一点?像这样覆盖消息函数:
public function messages()
return [
'unique' => 'validation.unique'
];
因为每条规则都有效……但我感觉很糟糕。
其他方法?
解决此问题的最佳方法是什么?
【问题讨论】:
嘿,好问题。你使用的 Laravel 版本是什么? 尝试使用最新的 6.4.1 【参考方案1】:我建议您在 2 行代码中使用这个 hacky 解决方案。转到/resources/lang/code/validation.php
。您可以看到它默认返回一个消息数组。修改如下:
// Replace return in the first line
$ret = [
/* all the translations go here as normal */
];
// Add this as the last line. This will replace all values with their keys.
return array_combine(array_keys($ret), array_keys($ret));
之后,您可以照常使用验证,您将获得验证消息密钥而不是消息。干杯,希望这会有所帮助。
【讨论】:
很好,这正是我想要的。但是现在如果我想在 Laravel 应用程序上使用这个翻译会发生什么? 你会得到钥匙。您可以根据某些条件选择性地进行此转换: if( $is_api ) return array_combine(..);否则返回 $ret;以上是关于laravel 请求返回消息键翻译的主要内容,如果未能解决你的问题,请参考以下文章
向 laravel 中的资源 json 响应添加状态和消息键
如何在 laravel 8 中为 API 返回验证规则和消息作为 JSON