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

我刚刚开始使用 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/

相关文章:

linq - ReSharper LINQ 扩展方法格式化

html - Crystal Report 显示 HTML 文本,但不显示项目符号。为什么?

c++ - printf() 中宽度小于精度的意义何在?

c# - Visual Studio 2013 丢失代码格式,C#

xml - HTML 之于 HAML 就像 XSLT 之于 ...?

c - 是否有 "null"printf 代码不打印任何内容,用于跳过参数?

mysql - 如何将 MySQL 结果以表格式存储到文件中

sql-server-2005 - 在 SQL Reporting 2005 中更改货币符号

R - 绘图标签文本的文本格式 - 删除线

haskell - 将 NominalDiffTime 打印为小时、分钟和秒