【问题标题】:laravel request return message keys translationslaravel 请求返回消息键翻译
【发布时间】: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

标签: laravel api validation request translation


【解决方案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;
猜你喜欢
  • 2014-07-26
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 2016-06-16
  • 2015-03-17
  • 2011-11-07
相关资源
最近更新 更多