2012-06-20 9 views
6

Tentativo di far funzionare l'internazionalizzazione di Spring. Ho usato classpath: messaggi basename, file .properties creati per le lingue. Sono copiati correttamente nella cartella web-inf e i codici sono presenti nel file delle proprietà ...Causato da: org.springframework.context.NoSuchMessageException: Nessun messaggio trovato sotto il codice

Ecco l'ide che mostra tutto, per favore aiutami. Ho copiato il set up da un altro progetto che ho fatto e che funziona bene. Ho provato a creare un carico di diversi file di messaggi, ma non è in grado di raccogliere nulla ... l'immagine mostra web.xml, spring-servlet.xml e la struttura delle directory.

This shows everything, I can't see what I am missing

Modifica Se aggiungo la definizione fagiolo per applicationContext invece di primavera-servlet funziona ..?

risposta

11

andrò per la mia prova:

Se il file si trova nella directory WEB-INF/classes, provare:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="WEB-INF/classes/messages" /> 
</bean> 

E il nome del file dovrebbe essere:

  • messages.properties
  • messages_it.properties
  • messa ges_en_IT.properties

Modifica - Prova finale!

Che dire di questo modo di scrivere la configurazione, sento l'odore sthg qui dopo il tuo ultimo commento:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:messages" /> 
    <property name="defaultEncoding" value="UTF-8" /> 
</bean> 
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> 
    <property name="defaultLocale" value="en" /> 
</bean> 

<mvc:interceptors> 
    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
     <property name="paramName" value="lang" /> 
    </bean> 
</mvc:interceptors> 
+0

già provato, ma ci riproverò.E sì, ho provato il file di proprietà (nello screenshot), anche se messages_en.properties funziona nel mio altro progetto. – NimChimpsky

+0

Cerca di mantenere solo uno di questi nella tua directory? –

+0

L'ho guardato troppo a lungo. Sta andando a qualcosa di così piccolo e fastidioso – NimChimpsky

3

mantenere i file di proprietà di messaggi al di fuori del percorso di classe (WEB-INF/classes) e definire il fagiolo, come di seguito

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
<property name="basename" value="/WEB-INF/messages"/> 
<property name="cacheSeconds" value="1"/> 

Come per la ReloadableResourceBundleMessageSource doc fornisce beneficiate di cambiare i messaggi al volo che nascono recupera throu gh i cachSeconds. Questa classe differisce da ResourceBundleMessageSource solo per specificare la posizione della risorsa.

+0

Sto già utilizzando ReloadableResourceBundleMessageSource. – NimChimpsky

+0

Sì, ecco perché è necessario mantenere i file delle proprietà all'esterno del classpath come ho menzionato. \ –

+0

Non penso che sia corretto. I miei altri progetti e le altre risposte qui funzionano bene. Ma proverò, e sarò eternamente grato se corretto – NimChimpsky

0

Tutti i dettagli di configurazione sono tutti corretti ma fanno una cosa che tutti i file di proprietà sono configurati nel file di configurazione figlio significa che il vostro spring-servlet.xml configura tutte le proprietà in applicationContext.xml significa che il file di configurazione principale funzionerà al massimo. provalo e rimuovi la configurazione dei dettagli della proprietà in spring-servlet.xml ...........

-1

Anche se a molti questo sembra sciocco, ma l'errore del mio codice era che avevamo scritto il nostro MessageSource . Il che stava chiamando Spring MessageSource.

Ma nel codice era come (MessageSource (MessageSource)). Quindi stavamo guardando al di sopra.

Rimossa la chiamata extra, e ora funziona.

Problemi correlati