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