[다국어 처리(국제화)]
하나의 페이지를 여러가지의 언어로 서비스하는 것
과거에는 언어별로 페이지를 다르게 제작함
-> 프레임워크의 다국어처리기능을 사용(별도 페이지 제작 xxx)
1) 메세지 파일 제작
1-1 .properties
언어 선택을 Locale 코드 정보로 수행
1-2) 파일명에 언어에 해당하는 Locale 코드를 추가
ex) xxx_en.properties, xxx_ko.properties, ...
1-3) 파일 내부에는 메세지 키+메세지 값을 작성
유니코드로 작성
1-1. src/main/resources에 패키지로 message 추가
1-2. New - 일반 File로 만들기 (ex) xxx_en.properties, xxx_ko.properties, ...
1-3. 파일 내부에는 메세지 키+메세지 값을 작성
영어를 제외한 언어는 유니코드로 작성
2) 스프링설정파일에게 메세지 파일들을 읽어들일수있도록 클래스 추가
DS.xml에 MessageSource 클래스 <bean> 등록
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>message.messageSource</value>
</list>
</property>
</bean>
원래라면 message.messageSource_en.properties / message.messageSource_kr.properties 라고 적어야할텐데
❓❓ 왜 경로.message 만 사용할까?
. 는 경로를 읽는 구분점이라 패키지인지 확장자인지 알기 힘들기 때문에,
message 파일은 무조건 확장자를 properties를 쓰기로 정함
그리고 Locale 정보를 xml 변화 없이 추가할 수 있다! ( ex. 지원 언어들이 더 추가되게 된다면 )
3) Locale 정보를 알아서 판단해줄 LocaleResolver 등록
SessionLocaleResolver
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
4) Locale 정보를 변경해서 사용하고싶을때?
LocaleChangeInterceptor 클래스 등록
lang 파라미터로 Locale 정보를 변경
- mvc namespace 추가가 필요하다!
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>
5) 사용해보자!
커스텀 태그처럼 상단에 <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 등록
<spring:message code="메세지 키" />
현재 언어를 바꾸는 기능은 들어가있지 않고 접속한 지역을 확인해 제공해주고 있어 한글만 확인이 가능할 것이다.
그렇다면 사용자가 사용할 언어를 바꾸고 싶을 땐 어떡할까?
다음과 같이 특정 요청에 파라미터 Lang으로 값을 주면
LocaleChangeInterceptor 가 읽고 언어설정을 바꾸는 것도 가능하다.
'개발자노트 > Spring' 카테고리의 다른 글
프로젝트 중 만난 오류 - Crawling NosuchElementException (1) | 2022.10.07 |
---|---|
Spring - 에러 페이지 설정 , 예외처리 (0) | 2022.09.28 |
Spring 작동순서 개인적인 정리 (0) | 2022.09.24 |
Spring - 컨트롤러, 리퀘스트 매핑 @Controller / @RequestMapping , Spring에서 매핑하는법 (0) | 2022.09.21 |
Spring - 디스패쳐서블릿 (DispatcherServlet) / 핸들러 매핑 (HandlerMapping) / 뷰 리졸버 (ViewResolver) (2) | 2022.09.19 |