有没有办法在Grails的message.properties文件中将消息链接在一起?

时间:2012-08-28 15:39:49

标签: 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

1 个答案:

答案 0 :(得分:0)

在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的问题。