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

尝试将翻译键值的 json 从 laravel 刀片传递到 vue.js 时出现问题

让 Laravel 返回 JSON

Laravel 5插入带有外键错误的行

如何在laravel错误消息数组中获取错误键