[Spring] 다국어 설정 (1)

2020. 8. 5. 22:51Spring/Spring

1. 다국어 처리

1) 다국어 지원 이유

하나의 JSP 페이지를 다양한 언어로 서비스하는 것을 의미한다. 프레임워크에서 다국어 지원하기 전에는 언어별로 JSP 파일을 만들어야했었다. 하지만 프레임워크의 다국어 기능을 이용하면 JSP 화면에 출력되는 메시지 외에도 에외나 로그 메시지까지 다국어로 처리할 수 있다.

2) 메시지 파일 작성

사용자가 원하는 언어로 메시지를 출력하기 위해 각 언어에 따른 메시지 파일을 작성한다. 기본적으로 메시지 파일의 확장자는 '.properties'이며, 파일명은 언어에 해당하는 Locale 정보를 결합하여 작성한다.

/src/main/resources/
messageSource_en.properties

messageSource_en.properties

3) 한글 메시지 파일 작성

메시지 파일 생성 시 프로퍼티 값을 영어로 등록해도 되지만, 아시아권 언어 사용시 반드시 유니코드로 변환하여 등록해야한다. messageSouce_ko.txt 파일을 만들고 해당 내용을 복사하여 properties 파일에 옮겨 적는다.

/src/main/resources/
messageSource_ko.txt, messageSource_ko.properties

messageSource_ko.txt, messageSource_ko.properties

4) 메시지 파일 등록

ResourceBundleMessageSource 클래스의 경우, Resolver 클래스를 등록할 때 고정된 아이디를 사용했던것 과 같이, MessageSource도 messageSource로 등록해야한다. 지정된 아이디로 등록하지 않을 경우 동작하지 않는다.

 

또한 정확한 파일 이름이 아닌 확장자와 언어 정보에 해당하는 문자가 생략되어있다. 확장자의 정보가 생략된 이유는 파일명이 properties인 파일이 존재할 수 있기 때문에 혼란을 방지하고자 생략한다. 언어 정보에 해당하는 문자가 생략된 이유는 메시지 파일을 좀 더 효율적으로 등록하고 관리하기 위해서이다. 일반적으로는 하나의 파일로 모든 메시지를 관리하지만, 관리차원에서 여러 파일로 나누었고 이를 등록하기 위해서 언어 정보에 해당하는 문자를 생략하였다.

/src/main/webapp/WEB-INF/config/
presentation-layer.xml

presentation-layer.xml

5) LocaleResolver 등록

클라이언트로부터 서버에 요청 시 브라우저의 Locale 정보가 HTTP 요청 메시지 헤더에 자동으로 설정되어 전송된다. 스프링은 LocaleResolver를 통해 클라이언트의 Locale 정보를 추출하고 해당하는 언어의 메시지를 적용한다. 만약 LocaleResolver가 등록되어 있지 않을 경우 기본으로 AcceptHeaderLocaleResolver가 적용이 된다. 보통 Locale 정보를 추출하고 유지하는 SessionLocaleResolver를 가장 많이 사용한다.

종류 설명
AcceptHeaderLocaleResolver 브라우저에서 전송된 HTTP 요청 헤더에서 Accept-Language에 설정된 Locale로 메시지를 적용한다.
CookieLocaleResolver Cookie에 저장된 Locale 정보를 추출하여 메시지를 적용한다.
SessionLocaleResolver HttpSession에 저장된 Locale 정보를 추출하여 메시지를 적용한다.
FixedLocaleResolver 웹 요청과 무관하게 특정 Locale로 고정한다.
/src/main/webapp/WEB-INF/config/
presentation-layer.xml

presentation-layer.xml

6) Locale 변경

화면의 언어를 변경하고 싶을 경우, 스프링에서 제공하는 LocaleChangeInterceptor 클래스를 이용하면 쉽게 변경이 가능하다. mvc 네임스페이스를 추가하고 setter 주입으로 paramName 값을 lang으로지정하여 특정 Locale이 전송되면 해당 Locale로 변경하겠다는 설정이다.

/src/main/webapp/WEB-INF/config/
presentation-layer.xml

presentation-layer.xml


[참고] 스프링 퀵 스타트

728x90