代码之家  ›  专栏  ›  技术社区  ›  cblanto7

messages.properties的参数有问题,除零以外的所有数字都正常工作

  •  0
  • cblanto7  · 技术社区  · 7 年前

    在我的Grails2.4.4应用程序中,我使用messages.properties进行国际化,其值如下:

    my.app.thing.allowance(s)={0} Allowance(s)
    

    它正在像这样的GSP中使用:

    <g:message code="my.app.thing.allowance(s)" args="${item.allowances.size()}"/>
    

    对于任何大于0的值,例如如果 item.allowances.size() == 4 然后显示的消息是 4 Allowances(s)

    问题是如果 item.allowances.size() == 0 然后显示的消息是 {0} Allowance(s)

    我尝试了几种不同的方式来编写args,例如:

    <g:message code="my.app.thing.allowance(s)" args="${item.allowances.isEmpty() ? 0.intValue() : item.allowances.size()}"/>
    

    我已经调试过了,我确信 item.allowments.size()==0 但由于某种原因,它无法正确处理0的值。将int值为0的参数传递给messages.properties的正确方法是什么?

    2 回复  |  直到 7 年前
        1
  •  6
  •   Bharat Satija    7 年前

    g.message 参数始终作为 List .

    来自: http://docs.grails.org/3.0.17/ref/Tags/message.html

    args(可选)-使用代码时应用于消息的参数值列表。

    请尝试以下代码:

    <g:message code="my.app.thing.allowance(s)" args="[item.allowances.size()]"/>
    
        2
  •  1
  •   Koloritnij    7 年前

    巴拉特的回答是正确的,但我想补充一下为什么会这样: 你已经过去了 args=0 这里是来自消息标签lib的代码:

    List args = []
    if (attrs.args) {
       args = attrs.encodeAs ? attrs.args as List : encodeArgsIfRequired(attrs.args)
       }
    

    在groovy 0中是假的,这就是为什么在0的情况下您没有填充消息的原因。

    推荐文章