什么函数用于格式化/替换Grails/Groovy中字符串中的{0} {1}参数?

7 string formatting grails groovy

我刚开始使用Groovy/Grails

我注意到您在验证表单时收到的错误消息如下所示:

Property [{0}] of class [{1}] cannot be blank
Run Code Online (Sandbox Code Playgroud)

例如,此代码将错误转储到控制台

        s.errors.allErrors.each
        {
            println it.defaultMessage
        }
Run Code Online (Sandbox Code Playgroud)

现在,it.arguments包含需要填写的参数.

问题是,我在Grails或Groovy文档中找不到基于位置参数(如{0},{1})格式化字符串并替换数组值的方法

我需要类似python的%

格式化这些错误字符串的正确方法是什么,以便正确替换参数?

Dir*_*irk 8

实际上使用标准java.text.MessageFormat API替换这些标记.如果您使用Grail的g:message标签显示消息,如果您传递了合适的args ="..."属性,它将填补空白:

<g:message code="mymessagecode" args="${['size', 'org.example.Something']}"/>
Run Code Online (Sandbox Code Playgroud)

在某些情况下(在GSP页面内和来自控制器IIRC),你可以像操作一样调用标签:

g.message(code:'mymessagecode',args: ['size', 'org.example.Something'])
Run Code Online (Sandbox Code Playgroud)

请注意,作为消息代码提供的值只是一个符号字符串常量.框架将使用Spring的可重新加载资源包读取实际转换(其中包含"gap"的消息文本).

如果您实际拥有的只是翻译文本,则可以直接调用消息格式化API.参见例如:

import java.text.MessageFormat

...

args = ["english"].toArray()
println(MessageFormat.format("Translation into {0}", args))

// Or - as the method is variadic:
println(MessageFormat.format("Translation into {0}", "english"))
Run Code Online (Sandbox Code Playgroud)