it-swarm-ja.tech

messages.propertiesファイルで定義されたプロパティにアクセスする方法は?

Groovy Grailsアプリケーションがあり、messages.propertiesで定義されたプロパティにプログラムでアクセスしたい。

テストとして、次のステートメントを試しました。

println "capacity.created: ${messages.properties['capacity.created']}"

ただし、機能しません(例外がスローされます)。

どんな助けも歓迎します。

ルイス

35
Luixv

すべてのメッセージプロパティファイル(message_de.properties、message_fr.propertiesなど)を再読み込みせずに、メッセージプロパティに直接アクセスする方法を見つけました。これは非常に簡単です。

message(code:"capacity.created")

そしてそれは動作します!

ルイス

8
Luixv

Groovyでプロパティファイルを読み取るには、ユーティリティクラス ConfigSlurper を使用し、GPath式を使用して含まれるプロパティにアクセスできます。ただし、ConfigSlurperは標準のJavaプロパティファイルをサポートしません。通常、ConfigSlurperは、.groovyファイルの読み取りに使用されます。プロパティファイルに似ていますが、標準のgroovy表記法に準拠しているため、文字列は引用符内にあり、コメントは//で始まるか、/* */ブロック内にあります。したがって、Java Java.util.Propertiesオブジェクトを作成し、それを使用してConfigSlurperを作成する必要があるプロパティファイル:

def props = new Properties()
new File("message.properties").withInputStream { 
  stream -> props.load(stream) 
}
// accessing the property from Properties object using Groovy's map notation
println "capacity.created=" + props["capacity.created"]

def config = new ConfigSlurper().parse(props)
// accessing the property from ConfigSlurper object using GPath expression
println "capacity.created=" + config.capacity.created

Groovyコード内からのみプロパティファイルを使用する場合は、Groovy表記バリアントを直接使用する必要があります。

def config = new ConfigSlurper().parse(new File("message.groovy").toURL())

これにより、標準のプロパティファイルより優れた利点も得られます。の代わりに

capacity.created="x"
capacity.modified="y"

あなたは書ける

capacity {
  created="x"
  modified="y"
}
70

I18nでmessage.propertiesを読むことはベストプラクティスではありません。次を使用できます。

message(code:"capacity.created")

@Luixvが提案したようにコントローラーで、または

messageSource.getMessage("capacity.created",
                        [].toArray(), "Capacity Created.", null)

bean messageSourceを注入した後、他のSpring/Grails Beanで。

2