2010-01-13 6 views
35

J'ai une application Groovy et je veux accéder par programmation à une propriété définie dans message.properties.groovy: Comment accéder au fichier de propriétés?

En tant que test que j'ai essayé ce qui suit:

println "capacity.created " + ${message.properties['capacity.created']} 

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

Toute aide est la bienvenue

Luis

Répondre

8

J'ai trouvé un moyen d'accéder aux propriétés du message wothout directement re-lecture toutes les propriétés messages (fichiers message_de.properties, message_fr.properties, etc. C'est très facile.

message(code:"capacity.created") 

et cela fonctionne!

Luis

+0

J'ai une classe séparée ce n'est pas un contrôleur, j'ai essayé ceci et ça ne fonctionne pas ... aucune suggestion? –

+0

@ CPU100 injecter' messageSource' dans cette classe et utiliser le ' La méthode getMessage –

+0

Cela a fonctionné pour moi où je devais passer une valeur dynamique pour le titre: Xplora

68

Pour lire les fichiers de propriétés en Groovy, vous pouvez utiliser la classe utilitaire ConfigSlurper et accéder aux propriétés contenues en utilisant des expressions de GPath. Toutefois, vous devez savoir que ConfigSlurper ne prend pas en charge les fichiers de propriétés Java standard. Normalement le ConfigSlurper sera utilisé pour lire les fichiers .groovy qui peuvent être similaires à un fichier de propriétés, mais qui adhèrent à la notation groovy standard, donc les chaînes sont entre guillemets et les commentaires commencent par // ou se trouvent dans un bloc /* */. Donc, pour lire un propriétés Java vous fichier devez créer un objet java.util.Properties et l'utiliser 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 la variante de notation Groovy directement. Cela vous donne également de beaux avantages par rapport aux fichiers de propriétés standard, par exemple. au lieu de

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

vous pouvez écrire

capacity { 
    created="x" 
    modified="y" 
} 
+0

Merci pour votre réponse. Ce que vous avez fait est valable pour n'importe quel fichier de propriétés, mais le message est un fichier i18n. Je pense que cela fonctionnera si la localisation du client est définie dans une autre langue. Je veux dire, vous ne lisez pas message_de, message_es, message_fr, etc. En outre, tous les messages sont déjà lus par le système. Je ne les relirais plus si je pouvais éviter cela. – Luixv

+0

Bonne réponse. Merci – Gervase

+4

Juste un avis pour le chargement de classpath utiliser 'properties.load (getClass(). GetClassLoader(). GetResourceAsStream (" message.properties "))' – banterCZ

2

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

message(code:"capacity.created") 

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

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

dans tout autre ressort/haricot grails après l'injection de la fève messageSource.

Questions connexes