【问题标题】:grails i18n label cross-referencing?grails i18n标签交叉引用?
【发布时间】:2011-07-15 10:59:27
【问题描述】:

是否可以在 grails 的其他国际化消息中包含 i18n 属性值?

我有一个包含 2 个属性“minDelay”和“maxDelay”的域类,我想编写一条国际化消息,引用这两个属性的标签。

我写了一个自定义验证器(maxDelay 必须大于等于 minDelay):

maxDelay(validator:{
    value, reference ->
    if (value < reference.minDelay) {
        return ['custom.error', it]
    } else {
        return true;
    }
  })

当它失败时,我正在打印属性stub.maxDelay.custom.error

在我的 messages.properties 中有属性:

stub.maxDelay.custom.error=Property [{0}] must be bigger than value of minDelay
stub.minDelay.label=Min. delay (ms)
stub.maxDelay.label=Max. delay (ms)

如何使用stub.minDelay.label 属性的值而不是静态文本? 错误消息应如下所示:

"Property [Max. delay (ms)] must be bigger than value of [Min. delay (ms)]"

我试过像 {stub.minDelay.label}${stub.minDelay.label} 那样引用它,但我得到的只是来自 grails 的解析错误。

也许我以错误的方式处理这个问题,是否可以通过验证器中的数字参数注入标签?例如,如果错误消息是:

stub.maxDelay.custom.error=Property [{0}] must be bigger than value of [{1}]

【问题讨论】:

    标签: grails syntax internationalization label


    【解决方案1】:

    请注意,还有第三个参数,属于 org.springframework.validation.Errors 类,可用于微调错误消息,例如:

    maxDelay(validator:{ value, reference, errors ->
        if (value < reference.minDelay) {
            errors.rejectValue('maxDelay', 'stub.maxDelay.custom.error', [value, obj.minDelay], 'oops')
        }
      })
    

    它适用于消息:

    stub.maxDelay.custom.error=Property [{0}] must be bigger than value of [{1}]
    

    【讨论】:

    • 不走运,我尝试了您的建议,它将呈现对象属性的值,而不是标签名称。比如Property [10] must be bigger than value of [5000]
    • 哦,你只需要它是Property [Max. delay (ms)] must be bigger than value of [Min. delay (ms)]",没有值吗?那么为什么不按原样写呢?
    • 我正在尝试将 minDelay 属性标签与引用它的任何其他消息分开。对于 i18n 消息中必须包含其他消息的其他情况,也需要它。
    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2022-01-22
    相关资源
    最近更新 更多