Подтвердить что ты не робот

Groovy: Как получить доступ к файлу свойств?

У меня есть приложение Groovy, и я хочу программно перейти к свойству определенные в message.properties.

В качестве теста я пробовал следующее:

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

Но он не работает (генерирует исключение).

Любая помощь приветствуется

Луис

4b9b3361

Ответ 1

Я нашел способ доступа к свойствам сообщений напрямую, не перечитывая все файлы свойств сообщений (message_de.properties, message_fr.properties и т.д.) Это очень легко.

message(code:"capacity.created")

и он работает!

Луис

Ответ 2

Для чтения файлов свойств в 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 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"
}

Ответ 3

Не рекомендуется читать message.properties для i18n. Вы можете использовать:

message(code:"capacity.created")

в контроллерах по предложению @Luixv или

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

в любом другом spring/grails bean после инъекции bean messageSource.