코딩성장스토리

스프링 메시지,국제화 본문

백 엔드/spring

스프링 메시지,국제화

까르르꿍꿍 2022. 5. 6. 23:57

김영한 선생님의 MVC2편 정리

메시지

상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 어떻게 해야할까? 

이럴떄 필요한게 메시지다.

메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다

item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
<label for="itemName" th:text="#{item.itemName}"></label>

위의 코드는 메시지에 있는 값들로 변경되어 상품명이 출력이 되게한다. 

 

예외 파라미터 제공도 가능

hello.name=안녕 {0}

<p th:text="#{hello.name(${item.itemName})}"></p>

위의 경우에는 저렇게 파라미터값을 넣는다.

 

스프링이 제공하는 메시지 소스

MessageSource ms; 

ms.getMessage("hello", null, null)

code: hello      // hello라는 변수 찾기

args: null

locale: null   //null은 기본 base조회

가장 단순한 테스트는 메시지 코드로 hello 를 입력하고 나머지 값은 null 을 입력했다. locale 정보가 없으면 basename 에서 설정한 기본 이름 메시지 파일을 조회한다. basename 으로 messages 를 지정 했으므로 messages.properties 파일에서 데이터 조회한다.

국제화

영어로 읽는 사람은 영어로 보여주고 한글로 읽는 사람은 한글로 보여주는 시스템이다.

messages_en.propertis 는 메시지 라벨이 영어로 저장되어 있는것

messages_ko.propertis 는 메시지 라벨이 한글로 저장되어 있는 것이다.

 

한국에서 접근한 것인지 영어에서 접근한 것인지는 인식하는 방법은 HTTP accept-language 해더 값을 사용하거나 사용자가 직접 언어를 선택하도록 하고, 쿠키 등을 사용해서 처리하면 된다

 

스프링에서 메시지 소스 설정

application.properties 파일에

spring.messages.basename=messages 를 적으면 기본 으로 제공되는 것이 messages가 된다.

그리고 국제화가 하고 싶으면 messages_en.propertis messages_ko.propertis를 추가해서 사용하면 된다.

 

locale 정보를 기반으로 국제화 파일을 선택한다. Locale이 en_US 의 경우 messages_en_US messages_en messages 순서로 찾는다. Locale 에 맞추어 구체적인 것이 있으면 구체적인 것을 찾고, 없으면 디폴트를 찾는다고 이해하면 된다.

ex)ms.getMessage("hello", null, null) : locale 정보가 없으므로 messages 를 사용

ms.getMessage("hello", null, Locale.KOREA) : locale 정보가 있지만, message_ko 가 없으므로 messages 를 사용

ms.getMessage("hello", null, Locale.ENGLISH) : locale 정보가 Locale.ENGLISH 이므로 messages_en 을 찾아서 사용

 

스프링도 Locale 정보를 알아야 언어를 선택할 수 있는데, 스프링은 언어 선택시 기본으로 AcceptLanguage 헤더의 값을 사용한다

 

LocaleResolver 스프링은 Locale 선택 방식을 변경할 수 있도록 LocaleResolver 라는 인터페이스를 제공하는데, 스프링 부트는 기본으로 Accept-Language 를 활용하는 AcceptHeaderLocaleResolver 를 사용한다.

ex)쿠키나 세션 기반의 Locale 선택 기능을 사용할 수 있다

 

 

 

 

 

 

 

'백 엔드 > spring' 카테고리의 다른 글

스프링 Bean Validation  (0) 2022.05.09
스프링 vaildation  (0) 2022.05.09
스프링 타임리프 스프링 통합기능  (0) 2022.05.06
spring 타임리프 기본기능  (0) 2022.05.05
스프링 이해를 위한 디자인 패턴  (0) 2022.04.08