-
[Spring-4]국제화 서비스를 위한 MessageSource 설정하기설치&설정 관련/Spring Framework 2014. 10. 24. 00:28728x90
본 포스팅은 UTF-8 Filter 적용 및 ViewResolver 설정 이후, 국제화 서비스 제공을 위한 MessageSource 설정 하는 내용입니다.
GIT 주소 : https://github.com/lahuman/SpringBoot.Sample
국제화(Internationalization)란?
사용자의 Locale에 따라 표출되는 언어를 변경하는 서비스 이며, Spring에서는 해당 서비스를 지원하기 위해 MessageSource라는 것을 사용한다.
준비 사항
- JDK 1.6 이상
- Gradle 1.11 이상
- IntelliJ
국제화 서비스를 위한 MessageSource 설정하기
1. Messages.properties 파일 생성하기
resources 폴더 밑에 messages.properties 파일을 생성한다.
파일은 다음과 같은 포멧으로 설정 한다. messages_언어_나라.properties
[파일 목록]
[Resource Bundle로 확인시]
TIP : Properties 파일에서 한글 사용시, 깨질시 Settings에서 아래와 같이 UTF-8 와 체크박스를 선택한다.
Eclipse 에서는 플러그인 설치가 필요 하지만 Intellij에서는 기본적으로 제공한다.
2. Application 에 MessagesSource 설정하기
WebMvcConfigurerAdapter 상속받은 Application 에서 MessageSource 설정을 진행한다.
@Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); //WEB-INF 밑에 해당 폴더에서 properties를 찾는다. messageSource.setBasename("messages/messages"); messageSource.setDefaultEncoding("UTF-8"); return messageSource; } @Bean public LocaleChangeInterceptor localeChangeInterceptor(){ LocaleChangeInterceptor localeChangeInterceptor=new LocaleChangeInterceptor(); //request로 넘어오는 language parameter를 받아서 locale로 설정 한다. localeChangeInterceptor.setParamName("language"); return localeChangeInterceptor; } @Bean(name = "localeResolver") public LocaleResolver sessionLocaleResolver(){ //세션 기준으로 로케일을 설정 한다. SessionLocaleResolver localeResolver=new SessionLocaleResolver(); //쿠키 기준(세션이 끊겨도 브라우져에 설정된 쿠키 기준으로) // CookieLocaleResolver localeResolver = new CookieLocaleResolver(); //최초 기본 로케일을 강제로 설정이 가능 하다. localeResolver.setDefaultLocale(new Locale("en_US")); return localeResolver; } public void addInterceptors(InterceptorRegistry registry) { //Interceptor를 추가 한다. registry.addInterceptor(localeChangeInterceptor()); }
3. JAVA 또는 JSP에서 사용하기
Java에서 MessageSource를 사용하기 위해서는 다음과 같이 MessageSource 를 DI(Dependency Injection) 하여 사용한다.
@Autowired private MessageSource messageSource;
그리고 MessageSource에서 제공되는 다음의 method를 주로 사용한다.
MessageSource Method 인자 설명
code : properties에서 설정한 Key 값
args : Key에 해당하는 Value값에 {0}, {1} 등으로 매핑되는 값
defaultMessage : Key값을 찾지 못할 경우 표출될 값
locale : 지역 코드 값
JAVA 사용 예)
String usMessage = messageSource.getMessage("hello.test", null, "no surch", Locale.US); //미국 기준 메시지 요청 String korMessage = messageSource.getMessage("hello.test",null, "no surch", Locale.KOREA);//한국 기준 메시지 요청 String localeMessage = messageSource.getMessage("hello.test",null, "no surch", localeResolver.resolveLocale(request)); //현재 설정된 위치 기준의 메시지 요청 //결과 출력 log.debug("KR: " + korMessage); log.debug("US: " + usMessage); log.debug("USER SET: " + localeMessage); log.debug("response SET: " + response.getLocale().toString()); //respons에 설정된 위치 정보 출력(불변)
JSP 사용 예)
- Spring taglib를 사용하여 MessageSource 를 쉽게 사용할 수 있다
- Parameter에 language=Locale 을 하게 되면, 위치 정보 properties가 Locale에 맞게 출력된다.
4. 테스트 결과
최초 접속 시)
한글 선택 시)
영어 선택 시)
참고 URL :
https://gist.github.com/marcaurele/3665696
http://alex-ilies.blogspot.kr/2013/12/internationalization-spring-mvc-with.html
728x90'설치&설정 관련 > Spring Framework' 카테고리의 다른 글
[Spring-6]DBMS 연동 (0) 2014.12.12 [Spring-5]PropertySource 사용하기 (0) 2014.10.28 [TIP]AOP : java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut 발생시 확인 사항 (2) 2014.10.21 [Spring-3]UTF-8 Filter 적용 및 ViewResolver 설정 (0) 2014.10.20 [Spring-2]SLF4j + Logback 사용하기 (0) 2014.10.17