일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 순열
- 다이나믹 프로그래밍
- 역방향 반복자
- BFS
- AWS
- 백준
- 그래프
- Spring
- SQL
- 자료구조
- 이분탐색
- 도커
- 다이나믹프로그래밍
- 알고리즘
- 자바
- 브루트포스
- 그리드
- 트리
- 스프링
- 재귀
- TCP
- dfs
- 그리드 알고리즘
- HTTP
- 컴퓨터 네트워크
- 분할정복
- github action
- GIT
- 분할 정복
- CI/CD
- Today
- Total
코딩성장스토리
스프링 메시지,국제화 본문
김영한 선생님의 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 |