Spring/[인프런 김영한 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술]
[인프런 김영한 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술] 메시지, 국제화
h2boom
2024. 10. 11. 23:29
메시지, 국제화
- 스프링에서 메시지, 국제화 기능을 제공한다.
- 타임리프에서도 스프링이 제공하는 기능을 통합해서 제공한다.
국제화
- 국제화 : 특정 지역, 국가에 맞게 언어를 지원해주는 등과 같은 기능
- ex) 웹 브라우저를 영어로 세팅하거나 영어를 사용하는 나라에서 서비스를 이용하면 영어로 보이는 것
- 메시지 파일을 각 나라별로 별도로 관리하면 서비스를 국제화할 수 있다.
- 어디 지역(국가)에서 접근한 것인지 인식하는 방법은 HTTP accept-language 헤더 값을 사용하면 된다.
- 사용자가 직접 선택하게 하고 쿠키 등을 사용해서 처리하는 방법도 있다.
메시지
- 메시지 기능 : 다양한 메시지를 한 곳에서 관리하도록 하는 기능
- 만약 모든 "상품명" 이라는 단어를 "상품이름" 으로 고쳐야 한다면?
- 모든 파일에 메시지가 하드 코딩되어 있는 경우 모두 찾아서 변경해야한다.
- 관리용 파일에서 관리한다면 그 파일에서 해당 내용만 고치면 된다.
- 만약 모든 "상품명" 이라는 단어를 "상품이름" 으로 고쳐야 한다면?
<!-- 메시지 관리용 파일 예시 -->
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
- 이러한 하드 코딩된 단어들을 별도의 메시지 관리용 파일을 만들어서 Map 형태로 관리하고 각 HTML에서는 해당 데이터를 key 값으로 불러서 사용하는 방식이다. = 메시지 관리 기능
- 메시지 관리 기능을 사용하기 위한 스프링 빈 등록
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages", "errors");
messageSource.setDefaultEncoding("utf-8");
return messageSource;
}
- 직접 등록 방식
- basenames : 설정 파일의 이름을 지정한다.
- 설정 파일의 이름을 messages로 지정하면 messages.properties 파일을 읽어서 사용한다.
- 국제화 기능을 적용하려면 messages_en.properties, messages_ko.properties와 같이 파일명 마지막에 언어 정보를 주면 된다.
- 파일 위치 : /resources/messages.properties
- 여러 파일을 ,로 구분하여 한 번에 지정할 수 있다.
- basenames : 설정 파일의 이름을 지정한다.
spring.messages.basename=messages
- 스프링 부트 사용 시 설정 방법
- 스프링 부트 사용 시 빈으로 자동으로 등록해준다. 메시지 properties 파일은 application.properties / .yml에서 설정할 수 있다.
- MessageSource를 스프링 빈으로 등록하지 않고 스프링 부트와 관련된 별도의 설정도 하지 않으면 messages라는 이름으로 기본 등록된다.
- messages_en.properties, messages_ko.properties, messages.properties 등을 생성하면 모두 인식된다.
- 해당하는 언어가 있으면 해당 언어로 되지만 없는 경우 디폴트인 messages.properties로 된다.
//messages.properties 예시
hello=안녕
hello.name=안녕 {0}
- {}로 파라미터 값도 넘겨받을 수 있다.
@Autowired
MessageSource ms;
ms.getMessage("hello", null, null);
//디폴트 메시지 값 설정
ms.getMessage("no_code", null, "기본 메시지", null);
//파라미터 값 설정
ms.getMessage("helo.name", new Object[]{"Spring"}, null);
//locale 지정
ms.getMessage("hello", null, Locale.ENGLISH);
- getMessage() : 메시지 key 값, 파라미터 값, 디폴트 메시지 ,locale 값을 파라미터로 줄 수 있다.
- locale 정보가 없는 경우 basename에서 설정한 기본 이름 메시지 파일을 조회한다.
- 디폴트 메시지를 설정하면 메시지 key 값으로 찾지 못하더라도 디폴트 메시지가 나온다.
- 파라미터는 Object 배열로 넘겨야 한다.
- #{...} : 타임리프 메시지 표현식
- ex) <h2 th:text="#{page.addItem}">상품 등록 폼</h2>
- 국제화 기능을 위해 스프링에서 Locale 정보를 알기 위해서 기본으로 Accept-Language 헤더 값을 사용한다.
- Locale 선택 방식을 변경할 수 있도록 스프링에서 LocaleResolver 인터페이스를 제공한다.
- LocaleResolver 구현체를 변경해서 쿠키나 세션 기반의 Locale 선택 기능을 사용할 수 있다.
출처 : [인프런 김영한 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술]
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런
김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습
www.inflearn.com