2

在 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

4

1 回答 1

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
  }
}

最后安装模板并更改<g:message/>for<my:inheritedMessage/>或您所称的任何内容。

对于第 2 步,另一种方法是覆盖g.message(),其好处是不需要第 3 步,并为您的应用程序的所有部分提供修改。缺点是它必须有良好的文档记录和传播,否则可能会在其他开发人员中引起一些混乱。

编辑

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

于 2012-08-29T03:04:52.603 回答