Я знаю, что есть ответ, но вот мой взгляд на него. Я сделал услугу (вдохновленный другими)
import org.springframework.web.servlet.i18n.SessionLocaleResolver
import org.springframework.context.MessageSource
class I18nService {
boolean transactional = false
SessionLocaleResolver localeResolver
MessageSource messageSource
/**
*
* @param msgKey
* @param defaultMessage default message to use if none is defined in the message source
* @param objs objects for use in the message
* @return
*/
def msg(String msgKey, String defaultMessage = null, List objs = null) {
def msg = messageSource.getMessage(msgKey,objs?.toArray(),defaultMessage,localeResolver.defaultLocale)
if (msg == null || msg == defaultMessage) {
log.warn("No i18n messages specified for msgKey: ${msgKey}")
msg = defaultMessage
}
return msg
}
/**
* Method to look like g.message
* @param args
* @return
*/
def message(Map args) {
return msg(args.code, args.default, args.attrs)
}
}
Теперь в сервисе просто введите i18nService, и все готово! Это также упрощает юнит-тестирование других сервисов, так как вы можете издеваться над i18nService
В качестве бонуса служба будет пытаться найти текущую локаль для текущего веб-запроса, при условии, что служба работает в контексте веб-запроса.