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的%
格式化这些错误字符串的正确方法是什么,以便正确替换参数?
实际上使用标准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)