web-dev-qa-db-fra.com

Comment accéder à une propriété définie dans le fichier messages.properties?

J'ai une application Groovy Grails et je souhaite accéder par programme à une propriété définie dans messages.properties.

Comme test, j'ai essayé la déclaration suivante:

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

Mais cela ne fonctionne pas (lève une exception).

Toute aide est la bienvenue.

Luis

35
Luixv

J'ai trouvé un moyen d'accéder directement aux propriétés des messages sans relire tous les fichiers de propriétés des messages (message_de.properties, message_fr.properties, etc.). C'est très simple.

message(code:"capacity.created")

et il fonctionne!

Luis

8
Luixv

Pour lire les fichiers de propriétés dans Groovy, vous pouvez utiliser la classe utilitaire ConfigSlurper et accéder aux propriétés contenues à l'aide d'expressions GPath. Cependant, vous devez savoir que ConfigSlurper ne prend pas en charge les fichiers de propriétés standard Java. Normalement, le ConfigSlurper sera utilisé pour lire les fichiers .groovy qui peuvent être similaire à un fichier de propriétés, mais respecter la notation groovy standard, donc les chaînes sont entre guillemets et les commentaires commencent par // ou se trouvent dans un /* */ bloquer. Donc, pour lire un fichier de propriétés Java, vous devez créer un Java.util.Properties objet et utilisez-le pour créer un 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

Si vous utilisez uniquement le fichier de propriétés à partir du code Groovy, vous devez utiliser directement la variante de notation Groovy.

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

Cela vous donne également quelques avantages intéressants par rapport aux fichiers de propriétés standard, par exemple au lieu de

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

tu peux écrire

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

Ce n'est pas une bonne pratique de lire message.properties pour i18n. Vous pouvez utiliser:

message(code:"capacity.created")

dans les contrôleurs comme l'a suggéré @Luixv ou

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

dans tout autre haricot de printemps/graal après injection du haricot messageSource.

2