2012-10-11 10 views

Odpowiedz

9

końcu znalazłem odpowiedź - zastąpić domyślny Grails 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) 
    } 
} 

w Grails-app/conf/Sprężyna/resources.groovy:

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

Odpowiedni kod kontrolera:

class MessageController { 
    def messageSource 

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

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

Próbowałem tego i nie działało, rozszerzone źródło wiadomości nie było używane. Być może związany z następującym komunikatem, który otrzymałem podczas uruchamiania 'java.lang.RuntimeException: Agent przeładowujący został zakończony przez wyjątek, proszę zgłosić błąd jira | at org.springsource.loaded.agent.ClassPreProcessorAgentAdapter.transform (ClassPreProcessorAgentAdapter.java:104) 'Tak więc, jeśli na początku to nie działa', nie obawiaj się, spróbuj ponownie później i będzie działać –

+0

' request.locale' didn dla mnie działa poprawnie. Zamiast tego użyłem 'RequestContextUtils.getLocale (request)'. – haisi

0

Podejście stosowania leku nie wygląda być możliwe w oparciu w dokumentach API dla PluginAwareResourceBundleMessageSource. To będzie zamknąć do roztworu

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

Dziękuję za odpowiedź. Chodzi o to, że nie chcę znać wszystkich kodów wcześniej. – Adrian

Powiązane problemy