grails - 有什么方法可以将Grails的message.properties文件中的消息链接在一起?

标签 grails

在Grails中,有一个message.properties文件。在此文件消息中定义如下:

exampleClass.fieldOne.label=Field One

otherExampleClass.fieldOne.label=Field One

我希望能够使用两种消息,即使它们在文本上是相同的。我想这样定义它们:
exampleClass.fieldOne.label=Field One

otherExampleClass.fieldOne.label=${message(code: 'exampleClass.fieldOne.label')}

...但是只要调用otherExampleClass.fieldOne.label就会返回字符串${message(code: 'exampleClass.fieldOne.label')}而不是所需的字符串Field One

最佳答案

在message.properties中,我认为您无法做到这一点,但是也许可以通过约定并修改Grails的模板来实现。所以我的想法是:

为您的消息定义一个约定(例如,使用一些特殊字符初始化消息)

exempleClass.fieldOne.label=FieldOne
otherExampleClass.fieldOne.label=#exempleClass.fieldOne.label

创建一个TagLib来处理消息
class MyTagLib {
  static namespace = "my"
  def inheritedMessage = { attrs, body -> 
    String message = g.message(attrs)
    if(message.startsWith("#")) {
      //get the other message...
    }
    out << message
  }
}

最后是install templates,并将<g:message/>更改为<my:inheritedMessage/>或您称之为的其他名称。

对于第2步,另一种方法是重写g.message(),其好处是不需要第3步,并使修改可用于您应用的所有部分。缺点是必须对其进行良好的记录和分发,否则可能会引起其他开发人员的困惑。

编辑

为了涵盖所有消息,我认为更好的方法是定制Grails使用的messageResource。 Here是一个涵盖如何使用Spring来从数据库获取消息的问题,这可能是一个起点。 here是一个问题,显示了如何在Grails中替换bean。

关于grails - 有什么方法可以将Grails的message.properties文件中的消息链接在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162791/

相关文章:

grails - 如何在grails 3中绑定(bind)时间?

json - 从 object/json 中删除字段属性

grails - URL映射-替换从数据库中提取的参数中的字符

emacs - Grails是否可以emacs格式输出错误消息?

tomcat - 具有使用多个数据源的 spring 安全核心的 Grails 3.1.8

grails - 用groovy.sql.sql查询不起作用,但可以与MySQLWorkbench一起使用

grails - 使用对象列表进行Grails自定义验证

plugins - 如何安全地更新 grails 插件

rest - Grails Restful Controller UPDATE-Method不会从PUT获取更新的数据

grails - 在不输出完全限定的字段名称的情况下渲染renderErrors