2012-10-11 11 views

Respuesta

9

Finalmente encontré una respuesta - anular el valor predeterminado Griales MessageSource:

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

En griales-app/conf/primavera/resources.groovy:

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

correspondiente código del controlador:

class MessageController { 
    def messageSource 

    def index = { 
     def messageMap = messageSource.listMessageCodes(request.locale) 

     render (contentType: "text/xml") { 
      messageMap {key, message -> 
       .. 
      } 
     } 
    } 
} 
+0

Intenté esto y no funcionó, el origen del mensaje extendido no se estaba utilizando. Tal vez relacionado con el siguiente mensaje que recibí en el arranque 'java.lang.RuntimeException: agente de recarga salido por excepción, por favor levante un error jira | en org.springsource.loaded.agent.ClassPreProcessorAgentAdapter.transform (ClassPreProcessorAgentAdapter.java:104) 'Entonces, si al principio esto no funciona, no tema, simplemente inténtelo de nuevo más tarde y funcionará –

+0

' request.locale' didn 't funcionar correctamente para mí. Usé 'RequestContextUtils.getLocale (request)' en su lugar. – haisi

0

El enfoque que está tomando no parece ser posible en función en los documentos API para PluginAwareResourceBundleMessageSource. Esto hará que se cierra a una solución

class MessageController { 
    def messageSource 

    def index = { 
     Locale locale = new Locale('en'); 
     List codes = ['default.paginate.prev','default.paginate.next','default.boolean.true','default.boolean.false'] 
     def messageMap = messagesForCodes(codes,locale) 
     render (contentType: "text/xml") { 
      messageMap {key, message -> 
       .. 
      } 
     } 
    } 

    private def messagesForCodes(codes, locale){ 
     Map messages = [:] 
     codes.each{code-> 
      messages[code] = messageSource.getMessage(code,null,locale) 
     } 
     messages 
    } 
} 
+0

Gracias por responderme. Pero el punto es que no quiero saber todos los códigos antes. – Adrian

Cuestiones relacionadas