-
스프링 MVC 2 - 메시지, 국제화(소개, 스프링 메시지 소스 설정)FrameWork/Spring&Spring-boot 2023. 12. 7. 13:20
메시지, 국제화 소개
메시지
상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 어떻게 해야할까?
→ 여러 화면에 보이는 상품명, 가격, 수량 등 `label`에 있는 단어를 변경하려면 다음 화면들을 다 찾아가서 모두 변경해야 한다. 지금 처럼 화면 수가 적으면 문제가 되지 않지만 화면이 수십개 이상이라면 수십개의 파일을 고쳐야 한다.
- `addForm.html`, `editForm.html`, `item.html`, `item.html`
왜냐하면 해당 HTML 파일에 메시지가 하드코딩 되어 있기 때문이다. 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라고 한다.
예를 들어서`messages.properteis`라는 메시지 관리용 파일을 만들고
item = 상품
item.id = 상품 ID
item.itemName = 상품명
item.price = 가격
item.quantity = 수량각 HTML들은 다음과 같이 해당 데이터를 key값으로 불러서 사용하는 것이다.
addForm.html
<label for="itemNanme" th:text="#{item.itemName}"></label>
editForm.html
<label for="itemNanme" th:text="#{item.itemName}"></label>
국제화
메시지에서 한 발 더 나가보자
메시지에서 설명한 메시지 파일(messages.properteis)을 각 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 예를들어 다음과 같이 2개의 파일을 만들어서 분류한다.
`messages_en.propertis`
item = Item
item.id = Item ID
item.itemName = Item Name
item.price = price
item.quantity = quantity`messages_ko.propertis`
item = 상품
item.id = 상품 ID
item.itemName = 상품명
item.price = 가격
item.quantity = 수량영어를 사용하는 사람이면 `messages_en.propertis`를 사용하고,
한국어를 사용하는 사람이면 `messages_ko.propertis`를 사용하게 개발하면 된다.
이렇게 하면 사이트를 국제화 할 수 있다.
한국 사용자가 접근한 것인지 영어 사용자가 접근한 것인지 인식하는 방법은 방법은 HTTP `accept-language`헤더 값을 사용하거나 사용자가 직접 언어를 선택하도록 하고, 쿠키 등을 사용해서 처리하면 된다.
메시지와 국제화 기능을 직접 구현할 수도 있겠지만, 스프링은 기본적인 메시지와 국제화 기능을 모두 제공한다.
스프링 메시지 소스 설정
스프링은 기본적인 메시지 관리 기능을 제공한다.
메지시 관리 기능을 사용하려면 스프링이 제공하는 `MessageSource`를 스프링 빈으로등록하면 되는데 `MessageSource`는 인터페이스이다. 따라서 구현체인 `ResourceBundleMessageSource`를 스프링 빈으로 등록하면 된다.
직접 등록
@Bean public MessageSource messageSource(){ ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasenames("messages","error"); messageSource.setDefaultEncoding("utf-8"); return messageSource; }
- `basenames`:설정 파일의 이름을 지정한다.
- `messages`로 지정하면 `messages.properties`파일을 읽어서 사용한다.
- 추가로 국제화 기능을 적용하려면`messages_en.properties`,`messages_ko.properties`와 같이 파일명 마지막에 언어 정보를 주면된다. 만약 찾을 수 있는 국제화 파일이 없으면 `message.properties`(언어정보가 없는 파일명)를 기본으로 사용한다.
- 파일 위치는 `/resources/messages.properties`에 두면 된다.
- 여러 파일을 한번에 지정할 수 있다. 여기서 `messages`,`errors`둘을 지정했다.
- `defaultEncoding`: 인코딩 정보를 지정한다. `utf-8`을 사용하면 된다.
스프링 부트
스프링 부트를 사용하면 스프링 부트가 `MessageSource`를 자동으로 스프링 빈으로 등록한다.
스프링 부트 메시지 소스 설정
스프링 부트를 사용하면 다음과 같이 메시지 소스를 설정할 수 있다.
`application.properties`
spring.messages.basename=messages.config.i18n.messages
스프링 부트 메시지 소스 기본값
`pring.messages.basename=messages`
`MessageSource`를 스프링 빈으로 등록하지 않고, 스프링 부트와 관련된 별관의 설정을 하지 않으면 `messages`라는 이름으로 기본 등록된다. 따라서 messages_en.properties`,`messages_ko.properties`, `messages.properties`파일만 알맞은 경로에 등록하면 자동으로 인식된다.
[출처 - 스프링 MVC2편 - 백엔드 웹 개발 활용 기술 , 저 김영한]
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2
'FrameWork > Spring&Spring-boot' 카테고리의 다른 글
SpringBoot - Bean추가, Configuration, Path Variable (0) 2024.02.19 SpringBoot - SpringBoot API 시작하기 (0) 2024.01.31 Spring 기본 37 - 웹 스코프(request스코프 예제 만들기) (1) 2023.11.30 Spring 기본 36 - 프로토타입 스코프(싱글톤 빈과 함께 사용시 Provider로 문제 해결) (0) 2023.11.30 Spring 기본 35 - 프로토타입 스코프 (싱글톤 빈과 함께 사용시 문제점) (0) 2023.11.30