我刚刚开始使用 Groovy/Grails
我注意到您在验证表单时收到的错误消息如下所示:
Property [{0}] of class [{1}] cannot be blank
例如此代码将错误转储到控制台
s.errors.allErrors.each
{
println it.defaultMessage
}
现在,it.arguments 包含了这里需要填写的参数。
问题是,我在 Grails 或 Groovy 文档中找不到任何方法可以根据 {0}、{1} 等位置参数格式化字符串并替换数组中的值
我需要类似 python 的 %
格式化这些错误字符串以便正确替换参数的正确方法是什么?
最佳答案
这些标记实际上是使用标准 java.text.MessageFormat API 替换的。如果您使用 Grail 的 g:message 标签显示消息,如果您传递合适的 args="..."属性,它将填补空白:
<g:message code="mymessagecode" args="${['size', 'org.example.Something']}"/>
在某些情况下(在 GSP 页面中和从 Controller IIRC 中)您不能像函数一样调用标签:
g.message(code:'mymessagecode',args: ['size', 'org.example.Something'])
请注意,作为消息代码提供的值只是一个符号字符串常量。框架将使用 Spring 的可重新加载资源包读取实际的翻译(其中带有“间隙”的消息文本)。
如果您实际上只有翻译文本,则可以直接调用消息格式化 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"))
关于string - 什么函数用于格式化/替换 Grails/Groovy 中字符串中的 {0} {1} 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237624/