Как получить доступ к свойству, определенному в файле messages.properties? - PullRequest
35 голосов
/ 13 января 2010

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

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

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

Но это не работает (создает исключение).

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

1010 * Луис *

Ответы [ 3 ]

70 голосов
/ 13 января 2010

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

Если вы используете файл свойств только из кода Groovy, вам следует использовать вариант нотации Groovy напрямую.

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

Это также дает вам некоторые преимущества по сравнению со стандартными файлами свойств, например, вместо

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

Вы можете написать

capacity {
  created="x"
  modified="y"
}
8 голосов
/ 14 января 2010

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

message(code:"capacity.created")

и все работает!

Луис

2 голосов
/ 21 мая 2015

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

message(code:"capacity.created")

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

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

в любом другом бобе весной / Грааля после введения боба messageSource.

...