You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel验证中动态嵌套多语言属性的翻译问题求助

解决Laravel嵌套属性验证的翻译问题

针对你使用title.*验证多语言字段时遇到的翻译提示异常问题,这里提供两种可行的解决方案:

方案一:嵌套数组配置属性翻译

直接在validation.php的attributes节点中用嵌套数组定义title的子字段翻译,避免重复定义键名导致的语法错误:

'attributes' => [
    'title' => [
        'en' => 'English Title',
        'fa' => 'Farsi Title',
        'es' => 'Spanish Title',
    ],
],

配置完成后,title.en的验证提示会自动替换为"English Title is required.",直接对应子字段的翻译内容。

方案二:自定义属性解析逻辑

如果需要实现"TITLE ENGLISH"这类拼接式的翻译格式,可通过自定义验证消息替换器实现:

  1. 先在validation.php中保留基础属性翻译:
'attributes' => [
    'title' => 'TITLE',
    'en' => 'ENGLISH',
    'fa' => 'FARSI',
    'es' => 'SPANISH',
],
  1. 在App\Providers\AppServiceProvider的boot方法中添加自定义替换规则:
use Illuminate\Support\Facades\Validator;

public function boot()
{
    Validator::replacer('required', function ($message, $attribute, $rule, $parameters) {
        $parts = explode('.', $attribute);
        // 仅处理title.xx格式的嵌套属性
        if (count($parts) === 2 && $parts[0] === 'title') {
            $title = __('validation.attributes.title');
            $lang = __('validation.attributes.' . $parts[1]);
            $attribute = "{$title} {$lang}";
        }
        return str_replace(':attribute', $attribute, $message);
    });
}

配置后,title.en的验证提示会变为你预期的"TITLE ENGLISH is required."。

你之前尝试的'title.en' => 'ENGLISH TITLE'配置无效,是因为Laravel处理通配符*生成的字段时,默认优先解析嵌套数组结构的属性定义,而非直接识别点连接的键名,因此该方式无法被系统正确读取。

内容的提问来源于stack exchange,提问作者Kowalski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:10:18