2012-06-20 2 views
6

Spring 국제화 작동을 시도 중입니다. classpath : messages basename을 사용했고, 언어에 대한 .properties 파일을 만들었습니다. 그들은 web-inf 폴더에 corectly 복사되고 코드는 속성 파일 내에 존재합니다 ...에 의해 발생 : org.springframework.context.NoSuchMessageException : 코드 아래에 메시지가 없습니다.

여기에 모든 것을 보여주는 IDE가 있습니다. 제발 도와주세요. 나는 그 일을 잘한 다른 프로젝트에서 설정을 복사했습니다. 다른 메시지 파일의로드를 만들려고 시도했지만 그 중 아무것도 선택하지 않았습니다 ... 그림은 web.xml, spring-servlet.xml 및 디렉토리 구조를 보여줍니다.

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

내가 ApplicationContext를 대신 스프링 서블릿에 빈 정의를 추가하는 경우 작동 편집 ..?

답변

11
내 시도 갈 것이다

: 파일이 WEB-INF/classes 디렉토리에있는 경우

, 시도 :

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

그리고 파일의 이름은해야 하나 :

  • messages.properties
  • messages_en.properties
  • 메사 ges_en_GB.properties

- Final try!

어떤 설정을 쓰는이 방식에 대해, 나는 당신의 마지막 코멘트 후 sthg 여기 냄새 :

<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

이미 시도했지만 다시 시도합니다.그리고 네, messages_en.properties가 다른 프로젝트에서 작동하더라도 (스크린 샷에서) 해당 속성 파일을 시도했습니다. – NimChimpsky

+0

그 중 하나만 디렉토리에 보관하십시오. –

+0

나는 이것을 너무 오랫동안보고 있었다. 그 somethign 너무 작고 성가신가는 – NimChimpsky

3

클래스 경로 외부 (WEB-INF/클래스) 메시지 등록 정보 파일을 유지하고 아래와 같이 빈을 정의 doc 후 ReloadableResourceBundleMessageSource 당으로

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

는 봄이 throu 가져 즉석에서 메시지를 변경의 혜택을 제공합니다 gh the cachSeconds. 이 클래스는 리소스 위치를 지정하는 경우에만 ResourceBundleMessageSource와 다릅니다.

+0

ReloadableResourceBundleMessageSource를 이미 사용하고 있습니다. – NimChimpsky

+0

그렇습니다. 내가 언급 한 것처럼 특성 파일을 클래스 경로 외부에 두어야하는 이유는 무엇입니까? \ –

+0

나는 그것이 맞는 것 같지 않습니다. 내 다른 프로젝트, 그리고 여기에 다른 답변을 모두 잘 작동합니다. 그러나 나는 시도 할 것이고, 정확하다면 나는 영원히 감사 할 것이다 – NimChimpsky

0

모든 구성 정보가 모두 정확하지만 속성 파일이 하위 구성 파일에 구성되는 경우 하나만 수행하면 spring-servlet.xml은 모든 속성을 applicationContext.xml로 구성한다는 것을 의미합니다. 이는 부모 구성 파일이 최대로 작동한다는 것을 의미합니다. 그것을 시도하고 spring-servlet.xml의 속성 세부 정보 구성을 제거하십시오. ...

-1

많은 경우이 방법은 어리석은 일이긴하지만, 실수로 인해서 우리는 우리 자신의 MessageSource . 어느 쪽이 Spring의 MessageSource를 호출했는지.

하지만 코드에서는 (MessageSource (MessageSource))와 같았습니다. 그러므로 우리는 룩업을 둘러 보았습니다.

여분의 전화를 제거하고 지금 작동합니다.

관련 문제