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
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
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"
}
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
.