laravel请求返回消息密钥转换

laravel请求返回消息密钥转换,laravel,api,validation,request,translation,Laravel,Api,Validation,Request,Translation,我有一个Laravel应用程序和另一个通过API调用Laravel的应用程序。这两个项目是分开的 Laravel和App有自己的多语言系统。它们独立工作,但使用相同的密钥翻译 所以我的想法是,所有Laravel的回答都必须是关键的,比如:“messages.success” 有了这个响应,应用程序可以翻译它 所有这些都很好 当我开始处理用于验证表单的Laravel请求时,问题出现了。 在这种情况下,验证错误将被自动翻译,因此应用程序将接收使用Laravel应用程序的默认语言翻译的响应 那我该怎么

我有一个Laravel应用程序和另一个通过API调用Laravel的应用程序。这两个项目是分开的

Laravel和App有自己的多语言系统。它们独立工作,但使用相同的密钥翻译

所以我的想法是,所有Laravel的回答都必须是关键的,比如:“messages.success”

有了这个响应,应用程序可以翻译它

所有这些都很好

当我开始处理用于验证表单的Laravel请求时,问题出现了。 在这种情况下,验证错误将被自动翻译,因此应用程序将接收使用Laravel应用程序的默认语言翻译的响应

那我该怎么办

我有两个想法,但我不知道它们是否可行

1:将语言传递到params。不知道它是否可以工作,如何在Laravel验证请求之前设置语言

2:覆盖请求的功能以返回消息,而不进行翻译,因此,不要使用“Felicidades”返回“messages.success”。我真的很喜欢这种方法。但是我怎么能按规定去做呢?覆盖消息函数如下所示:

public function messages()
{
    return [
        'unique' => 'validation.unique'
    ];
}
因为每一条规则都有效。。。但是我感觉很糟糕

另一种方法


解决此问题的最佳方法是什么?

我建议您在两行代码中使用此黑客解决方案。转到
/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版本是什么?尝试使用最新的6.4.1Nice,这正是我想要的。但是现在,如果我想在Laravel应用程序上使用这个翻译,会发生什么呢?你会得到钥匙的。您可以根据某些条件选择性地执行此转换:if($is\u api)返回数组\u combine(…);否则返回$ret;