2014-09-08 3 views
0

"메시지"(사용자 메시지, 필드 레이블/버튼, 데이터 값)의 다른 유형에 대해 별도의 파일을 유지하려고합니다. 이 시도에서 다른 데이터 값에 대한 설명을 얻으려고합니다. 예를 들어, UserStatus "A"가 활성 또는 활성으로 표시 될 수 있습니다. 로케일 'en_us'의 코드 'user.status.A'에서 메시지가 없습니다.

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="defaultEncoding" value="UTF-8"/> 
    <property name="basenames"> 
     <list> 
      <value>WEB-INF/locale/messages/messages</value> 
      <value>WEB-INF/locale/fields/fields</value> 
      <value>WEB-INF/locale/values/values</value> 
     </list> 
    </property> 
</bean> 

[값 파일의 위치.] [1]

다음

values_en_us.properties 파일의 관련 항목은 다음과 같습니다!

user.status.A = Active 
user.status.I = Inactive 
user.status.P = Pending 

내가 각각에 대한 열거를 구축하고자하는이 지역화 된 값을 얻을 수있는 값 유형. 아래 코드에서, 디버깅 할 때 변수의 수를 줄이기 위해 get 메시지에 전달되는 값을 하드 코드했습니다.

description = appCtx.getMessage("user.status.A", null, new Locale("en_us")); 

응용 프로그램이 이미 내가 가진 내 사용자 지정 응용 프로그램 오류 메시지를 보여주고있다 :이 코드 줄에

org.springframework.context.NoSuchMessageException: No message found under code 'user.status.A' for locale 'en_us'. 

:이 코드를 실행하면

import java.util.EnumMap; 
import java.util.HashMap; 
import java.util.Locale; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public enum UserStatusEnum { 
    A,I,P; 

    private static HashMap<LocaleEnum, EnumMap<UserStatusEnum, String>> userStatuses = new HashMap<LocaleEnum, EnumMap<UserStatusEnum, String>>(); 

    public static EnumMap<UserStatusEnum, String> getUserStatuses(LocaleEnum locale) { 
     return userStatuses.get(locale); 
    } 

    // Pre-load the descriptive values. 
    static { 
     String description = null; 
     ApplicationContext appCtx = new ClassPathXmlApplicationContext("spring-config.xml"); 

     for (LocaleEnum locale : LocaleEnum.values()) { 

      EnumMap<UserStatusEnum, String> localeSpecificUserStatuses = new EnumMap<UserStatusEnum, String>(UserStatusEnum.class); 
      for (UserStatusEnum status : UserStatusEnum.values()) { 
       //description = appCtx.getMessage("user.status."+status, null, new Locale(locale.toString())); 
       description = appCtx.getMessage("user.status.A", null, new Locale("en_us")); 
       if (description != null) { 
        localeSpecificUserStatuses.put(status, description); 
       } 
       description=null; 
      } 
      userStatuses.put(locale, localeSpecificUserStatuses); 
     } 
    } 
} 

, 나는 다음과 같은 메시지가 메시지 지역화 된 파일에 있지만,이 경우 ApplicationContext는 이미 사용할 수 있습니다. 내가 messages_en_us.property 파일의 내용에 접근 할 수 있기 때문에 나는 설정이 맞다고 생각한다. 그러나 메시지 내용을 가져 오는 클래스는 Spring에 의해 인스턴스화됩니다.

Enum은 Spring에 의해 생성되지 않으므로 ApplicationContext에서 핸들을 얻는 방법이나 사용 방법에 문제가있는 것으로 가정합니다.

모든 도움을 주시면 대단히 감사하겠습니다.

는 감사

편집 :이 디버그 모드에서 appCtx 값을보고 후, 나는 MessageSource를> basename이 적어도 내 구성 데이터를 포함 않는 것을 볼 수 있습니다.

어디서나 파일 확장자가있는 전체 파일 이름이 표시되지는 않지만,

답변

-1

예를

public Locale(String language, 
    String country) 

로케일

에 대해 다음 생성자를 사용하여 당신은 ko 페이지와 파일을 종료 할 필요가 없습니다

description = appCtx.getMessage("user.status.A", null, new Locale("en","US")); 

. 기본값은 en_us입니다.

+0

답변 해 주셔서 감사합니다. 나는 그 라인에서 여전히 똑같은 오류를 얻는다. – forevernewb123