Spring MessageSource

Rodina Novotných novotnaci na megasphera.cz
Úterý Prosinec 23 12:57:17 CET 2008


Ahoj,

   tak na tohle jsem se nachytal už nesčetněkrát, ale v kombinaci s 
ReloadableResourceBundleMessageSource. Ten má totiž metodu 
setFallbackToSystemLocale 
<http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/context/support/ReloadableResourceBundleMessageSource.html#setFallbackToSystemLocale%28boolean%29>:


      setFallbackToSystemLocale

public void *setFallbackToSystemLocale*(boolean fallbackToSystemLocale)

Set whether to fall back to the system Locale if no files for a specific 
Locale have been found. Default is "true"; if this is turned off, the 
only fallback will be the default file (e.g. "messages.properties" for 
basename "messages").

Falling back to the system Locale is the default behavior of 
|java.util.ResourceBundle|. However, this is often not desirable in an 
application server environment, where the system Locale is not relevant 
to the application at all: Set this flag to "false" in such a scenario.

    Tzn. díky default hodnotě setFallbackToSystemLocale=true bude Spring 
na systému, kde je defaultní locale EN (např. anglické windows, anglické 
Ubuntu apod.), hledat resourcy v pořadí:

    * globallmessages-cs_CZ.properties
    * globallmessages-cs.properties
    * globallmessages-en.properties
    * globallmessages.properties

    Když se tato properta nastaví na false, pak se to teprve začne 
chovat, jak by člověk čekal - tzn. cs_CZ, cs a pak fallback ke 
globálnímu resource bundle. Vůbec jsem nepochopil účel tohoto nastavení.
    Když ale koukám do příkladu, ty tam používáš standardní 
ResourceBundleMessageSource a ten podobnou metodu (podle JavaDocu) nemá. 
Chování by ale mohl mít stejné. No snad tě moje rada, alespoň posune 
blíž řešení.

Honza

--------------------------------------------------------------
Ing. Jan Novotný
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
http://blog.novoj.net
Myšlenky dne otce Fura
--------------------------------------------------------------



tomasjurman na email.cz napsal(a):
> Zdravím  konferenci
>
> v aplikaci se Springem 2.5 mám v aplikačním kontextu definované zdroje zpráv (viz doleji). Třídu MessageSourceAccessor si potom injektuju do tříd,  kde je potřeba. Problém je, že pokud změním Locale z defaultní (en) na jinou, stále dostávám anglické zprávy:
>
> Locale loc = new Locale("cs", "CZ");
> String message = messageSourceAccessor.getMessage("engine.support", loc) ;
> //vrací en hodnotu pro klíč engine.support
>
> v aplikaci jsou 2 soubory zpráv:
> globallmessages.properties //obsahuje české hodnoty
> globallmessages-en.properties //obsahuje anglické hodnoty
>
> applicationContext.xml
> -----------------------------
>     <bean id="messageSourceAccessor" class="org.springframework.context.support.MessageSourceAccessor">
>       <constructor-arg>
>         <ref local="messageSource" />
>       </constructor-arg>
>     </bean>        
>     <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
>          <property name="basenames">                           
>               <list>           
>                 <value>globalmessages</value>
>             </list>            
>         </property>
>     </bean>
>
>
>
> děkuji za pomoc
> Tomáš Jurman
>
>   
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://amaio.cz/pipermail/konference/attachments/20081223/ee3acbcc/attachment.htm>


Další informace o konferenci Konference