【问题标题】:Laravel: translate validation messages in closureLaravel:在关闭时翻译验证消息
【发布时间】:2020-02-26 15:50:02
【问题描述】:

我正在使用 Laravel 的 HTTP 请求类来验证一些表单数据。对于某些字段,我需要一个闭包来进行自定义验证。

由于我的应用程序有两种本地化版本(英语和德语),如果验证失败,我需要翻译错误消息,我已经这样做了。

我遇到的唯一问题是闭包中的$fail()-消息。

这就是我根据闭包中的当前本地化翻译消息的方式:

if (app()->getLocale() == 'en') {
   $fail('Please choose a name for "' .$value. '" in order to continue.');
} 
elseif (app()->getLocale() == 'de') {
   $fail('Bitte wählen Sie einen Namen für "' .$value. '" um fortzufahren.');
}

我知道我可以使用en.json-文件来翻译整个网站,但我无法使用句子的$valueinside。

我想知道是否有更好的方法来实现这一点?

编辑

由于我使用的是闭包,因此我必须在闭包内编写“默认”德语错误消息,如下所示:

$fail('Bitte wählen Sie einen Namen für "' .$value. '" um fortzufahren.');

这样做,我会在错误消息中得到$value 的值,该消息会显示在视图中,如下所示:

@if ($errors->has('person.*.name'))
   <label class="error-small">@lang($errors->first('person.*.name'))</label>
@endif

所以$value变量会插入到消息中,所以我不能再通过json翻译文件访问变量了..

【问题讨论】:

    标签: laravel validation localization closures


    【解决方案1】:

    为什么不能传参数?

    看看documentation

    类似这样的:

    messages.php

    'chose_name' => 'Please choose a name for :name in order to continue.'
    
    __('messages.chose_name', ['name' => $value])
    

    -- 编辑

    对于 JSON

    __('Please choose a name for :name in order to continue.', ['name' => $value])
    

    你试过了吗:

    de.json

    {"Please choose a name for :name in order to continue.": "Bitte wählen Sie einen Namen für :name um fortzufahren."}
    

    【讨论】:

    • 这可以在 json 文件中使用,而不是在messages.php 中使用吗?我使用的是翻译字符串,而不是快捷键。
    • @ofmiceandmoon ofc,几乎是一样的。看看我的编辑。
    • 怎么写到json文件里?我可以把句子和像这样:name这样的变量一起放在那里吗?
    • @ofmiceandmoon 看看我的其他编辑,试试看告诉我。
    • 您不能在文本中传递参数 :) 您将不得不在客户端以某种方式对其进行解析,那么这很糟糕.. 可能会将其放入 flash() 会话中,这只会持续一个时间请求。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    相关资源
    最近更新 更多