在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/