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

时间:2018-07-27 16:07:50

标签: grails groovy gsp

在我的Grails 2.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.allowances.size() == 0不能正确处理0值。将int值为0的参数传递给messages.properties的正确方法是什么?

2 个答案:

答案 0 :(得分:6)

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()]"/>

答案 1 :(得分:1)

巴拉特的答案是正确的,但我想补充一下发生这种情况的原因: 您已通过args=0 这是来自消息标签lib的代码:

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

在groovy中0为假,这就是为什么您没有填写零消息的原因