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

Aurelia Validation中DisplayName未正常显示问题咨询

问题分析

你的问题核心是验证消息里的${$displayName}占位符没被正确替换成翻译后的字段名称,主要是两个环节出了问题:翻译时没传递必要的参数,加上占位符格式有误,和命名空间本身没关系,完全不用把验证消息挪到默认命名空间里。

解决方案

1. 修正验证消息的占位符格式

先看你的Validation.json,里面的占位符写了${$displayName}——多了一个多余的$。i18n(基于i18next)的插值占位符只需要字段名,所以改成这样:

{
  "errorMessages": {
    "required": "${displayName} fehlt!",
    "minLength": "Der ${displayName} sollte mindestens ${length} Zeichen lang sein",
    "matches": "${displayName} ist nicht gültig",
    "email": "${displayName} is not a valid email."
  }
}

2. 在HTML中给翻译管道传递必要参数

你当前的HTML代码只指定了验证命名空间,但没把验证规则里设置好的displayName(还有minLength需要的长度参数)传给t管道,导致占位符没法被替换。修改成这样:

<span class="help-block" repeat.for="errorInfo of ValueErrors">
  ${errorInfo.error.message & t:{ns:'validation', displayName: errorInfo.error.displayName, length: errorInfo.error.config.length}}
</span>
  • errorInfo.error.displayName:就是你在ValidationRules里用displayName()设置的翻译后名称(比如"Vorname")
  • length:对应minLength规则里的$config.length占位符,必须一起传才能正确渲染

3. 确认命名空间大小写一致

检查下你的i18n配置:你说默认命名空间是Translation.json,但代码里用的是ns:'translation'(小写)。i18next默认区分大小写,建议统一成小写——把文件名改成translation.json和validation.json,注册命名空间时也用小写名称,避免匹配失败。

4. 验证ValidationRules的翻译结果

你的TypeScript代码逻辑没问题,但可以临时加个日志确认翻译是否生效:

// 临时日志,确认翻译后的字段名是否正确
const translatedName = this.i18n.tr(model.displayName, {ns:'translation'});
console.log(translatedName); // 应该输出"Vorname"

ValidationRules.ensure('value')
  .displayName(translatedName)
  .required()
  .minLength(model.minLength)
  .on(this.model);
补充说明

完全不需要把验证消息放到默认命名空间,分开维护translation和validation是更清晰的最佳实践,只要参数传递正确、占位符格式没问题,就能正常渲染预期的错误消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:17:31