How can I create a map with all i18n-messages in Grails

后端 未结 2 1662
闹比i
闹比i 2021-01-02 09:14

I need this to render a part of it in a controller like:

class MessageController {

  def index = {

    def messageMap = listAlli18nMessages() // the questi         


        
2条回答
  •  庸人自扰
    2021-01-02 09:34

    Finally I found an answer - override the default Grails messageSource:

    class ExtendedPluginAwareResourceBundleMessageSource extends PluginAwareResourceBundleMessageSource {
        Map listMessageCodes(Locale locale) {
            Properties properties = getMergedProperties(locale).properties
            Properties pluginProperties = getMergedPluginProperties(locale).properties
            return properties.plus(pluginProperties)
        }
    }
    

    In grails-app/conf/spring/resources.groovy:

    beans = {
        messageSource(ExtendedPluginAwareResourceBundleMessageSource)  {
            basenames = "WEB-INF/grails-app/i18n/messages"
        }
    }
    

    Corresponding controller code:

    class MessageController {
        def messageSource
    
        def index = {
            def messageMap = messageSource.listMessageCodes(request.locale)
    
            render (contentType: "text/xml") {
                messageMap {key, message ->
                    ..
                }
            }
        }
    }
    

提交回复
热议问题