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 に答える