2010-01-13 24 views
35

Tengo una aplicación Groovy y quiero acceder programáticamente a una propiedad definida en message.properties.groovy: ¿Cómo acceder al archivo de propiedades?

Como prueba he intentado lo siguiente:

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

Pero esto no funciona (emite una excepción).

Cualquier ayuda es bienvenida

Luis

Respuesta

8

he encontrado una manera de acceder a las propiedades del mensaje directamente wothout volver a leer todos los mensajes archivos de propiedades (message_de.properties, message_fr.properties, etc.) Es muy fácil.

message(code:"capacity.created") 

y funciona!

Luis

+0

Tengo una clase separada, no es un controlador, probé esto y no funciona ... ¿alguna sugerencia? –

+0

@ CPU100 inyecte' messageSource' en esa clase y use ' Método getMessage' –

+0

Esto funcionó para mí donde tuve que pasar un valor dinámico para el Título: Xplora

68

Para leer archivos de propiedades en Groovy puede utilizar la clase de utilidad ConfigSlurper y acceder a las propiedades contenidas utilizando expresiones GPath. Sin embargo, debe tener en cuenta que ConfigSlurper no es compatible con archivos de propiedades estándar de Java. Normalmente, el ConfigSlurper se usará para leer archivos .groovy que pueden ser similares a un archivo de propiedad, pero se adhieren a la notación groovy estándar, por lo tanto, las cadenas son comillas internas y los comentarios comienzan con // o están dentro de un bloque /* */. Por lo tanto, para leer un archivo de propiedades Java que necesita para crear un objeto java.util.Properties y usarlo para crear 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 sólo utiliza el archivo de propiedades desde dentro del código maravilloso que debe utilizar la variante de la notación maravilloso directamente.

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

Esto también le da algunas ventajas agradables sobre archivos de propiedades estándar, por ejemplo en lugar de

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

puede escribir

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

Gracias por su respuesta. Lo que hizo es válido para cualquier archivo de propiedad, pero el mensaje es un archivo i18n. Creo que esto funcionará si la configuración regional del cliente está configurada en otro idioma. Quiero decir, no estás leyendo message_de, message_es, message_fr, etc. Además de eso, todos los mensajes ya han sido leídos por el sistema. No volvería a leerlos si puedo evitar eso. – Luixv

+0

Gran respuesta. Gracias – Gervase

+4

Solo un aviso para cargar desde classpath use 'properties.load (getClass(). GetClassLoader(). GetResourceAsStream (" message.propiedades "))' – banterCZ

2

No es una buena práctica para leer message.properties para i18n. Se puede utilizar:

message(code:"capacity.created") 

en los controladores como @Luixv sugerido o

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

en cualquier otra primavera/Grails frijol después de inyectar el grano messageSource.

Cuestiones relacionadas