2012-02-15 3 views
-1

서버를 만들기 위해 최대 절전 모드 및 RestEasy API를 사용하고 있습니다. 나는 3 개의 속성 파일 message.properties a, mesage_en-GB.properties and message_en.propperties 파일을 가지고 있습니다. 클라이언트로부터 요청을 받으면 헤더 매개 변수에 로케일이 있습니다. 내 로캘을 내 속성 파일과 비교하여 확인해야합니다. 예를 들어, mesage_en-GB.properties를 사용하는 것보다 en-GB 인 경우 message.properties를 사용하는 것보다 지정되지 않은 경우 잘못 입력하면 오류 메시지가 표시됩니다. 이 값을 비교하는 방법을 모르겠다. 를 제안하십시오.로케일을 message.properties로 확인하는 방법

+0

http://docs.oracle.com/javase/tutorial/i18n/resbundle/propfile.html 그래서 당신은 RESTEasy가를 통해 REST 요청을 받고 HTTP 헤더를 수신하고, 서버 측에서 사용할 수있는 속성 선택해야하고 - 내가 맞습니까? –

+0

예 .. HTTP 히어로를 속성 파일과 비교하고 선택할 파일을 선택해야합니다. – Romi

답변

0

스프링 구성에 LocaleChangeInterceptor을 등록하고 <spring:message> 태그를 사용하여 메시지를 출력해야합니다. http://viralpatel.net/blogs/2010/07/spring-3-mvc-internationalization-i18n-localization-tutorial-example.html

PS 이 메커니즘은 더 나은 대안이 될 수 <fmt:message>를 사용하는 경우에, 서버에서 서버로 변경할 수 있습니다

여기 좋은 연습입니다.

+0

Qwe : 답변 해 주셔서 감사합니다. 하지만 그건 내가 필요로하는 것이 아닙니다. 나는 u dint가 나의 요점을 얻는다라고 생각한다. 실제로 serever를 만들고 클라이언트 로케일을 기반으로 결과를 줄 것입니다. 이제 클라이언트에서 message.properties 또는 message_en-GB.prperties와 함께 로케일을 비교해야합니다. – Romi

+0

원래 버전의 질문에서 스프링 MVC를 사용 중이라고 말했고 지금 바로 사용하고 있습니다. RestEasy와 나는 당신의 잘못된 점을 가지고있다. –

+0

한 번에 실수로 봄 MVC로 쓰고, 미안하다. 이제이 문제를 어떻게 해결할 수 있는지 제게 제안 해주십시오. – Romi

1

로캘과 번들을 어떤 이유로 컨테이너에서 관리 할 수없는 경우 수동으로 관리해야합니다.

클래스 경로에 속성 파일이 있다고 가정합니다.

먼저 사용할 로케일을 만들어야합니다. 예를 들어 당신이 문자열 fr 같은 HTTP 헤더에서 언어를 얻을, 당신은 Java7에서 Locale.forLanguageTag(String) 방법에 전달 또는 로케일 객체를 Java6에 Locale(String) 생성자를 사용하여 얻을 : 다음

Locale locale = Locale.forLanguageTag(stringFromHeader) // since Java 7 
Locale locale = new Locale(stringFromHeader) // prior to Java 7 

당신이를 얻기 위해 ResourceBundle.getBundle 방법이 지역을 통과 바로 번들 :

ResourceBundle messages = ResourceBundle.getBundle("messages", locale); 

가 그런 다음의 ResourceBundle의 getString(key:String) 메소드를 호출 지역화하려면 문자열 :

messages.getString("my_message") 
다음과 같은 내용으로

1) 폴더 어딘가에 tmp

만들기 2) 해당 폴더에서 파일 A.java을 만듭니다


100 % 작동이 방법을 사용하면 다음의 간단한 단계를 수행 할 수 있는지 확인하려면 :

import java.util.*; 

public class A { 

public static void main(String[] args) throws Exception { 
    Locale locale = new Locale("en"); 
    ResourceBundle messages = ResourceBundle.getBundle("messages", locale); 
    System.out.println(messages.getString("my_message")); 
    locale = new Locale("fr"); 
    messages = ResourceBundle.getBundle("messages", locale); 
    System.out.println(messages.getString("my_message")); 
} 
} 

3)은 다음과 같은 내용으로 파일 messages.properties을 만듭니다

my_message=hello 

4)는 다음과 같은 내용으로 파일 messages_fr.properties을 만듭니다

my_message=salut 

5) tmp 폴더로 이동하고이 명령을 실행

javac A.java 
java -cp . A 

출력은 다음과 같습니다

hello 
salut 

나는 그것이 당신을 위해 일하기를 희망한다!

PS : 여기에 좋은 도보를 통해이 있습니다 :

+0

이것이 정확히 무엇을하고 있는지입니다. 그러나 Locale.forLanguageTag (stringFromHeader) 대신에 새로운 Locale (stringFromHeader)을 사용하고 있으며 stringFromHeader에서 xyz를 얻고 있어도 messages.properties 파일에서 msg를 수신하고 있습니다. – Romi

+0

두 번째로 Locale.forLanguageTag() 메소드를 얻지 못하고 Local 클래스에 대한 메소드가 없습니다 – Romi

+0

@Romi가 내 답변을 편집했으며 forLanguageTag()에 대한 메모는 최신 Java –

관련 문제