본문 바로가기
Spring

[Spring] 메시지와 국제화

by 당코 2023. 1. 16.

메시지

화면에 보이는 '상품명'이라는 단어를 모두 '상품이름'으로 바꾸기 위해서는 해당되는 모든 html 파일을 변경해야 한다.

화면수가 적다면 문제가 되지 않겠지만, 화면수가 수십 개 이상이라면 매우 번거로운 작업일 것이다.

이러한 문제점을 해결하기 위해 스프링에서 다양한 메시지를 한 곳에 관리하는 기능을 지원한다.

//messages.properties

item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량

국제화

메시지에서 설명한 메시지 파일(messages.properties)을 나라별로 별도로 관리하면 서비스를 국제화할 수 있다.

영어를 사용하는 이용자

//messages_en.properties

item=Item
item.id=Item ID
item.itemName=Item Name
item.price=price
item.quantity=quantity

 

한국어를 사용하는 이용자

//messages_ko.properties

item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량

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

 

스프링 메시지 소스 설정

직접등록

메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource를 스프링 빈으로 등록하면 된다.

MessageSource는 인터페이스이기 때문에 구현체인 ResourceBundleMessageSource를 스프링 빈으로 등록하면 된다.

@Bean
public MessageSource messageSource() {
	ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
 	messageSource.setBasenames("messages", "errors");
 	messageSource.setDefaultEncoding("utf-8");
	return messageSource;
}

 

스프링 부트 사용

스프링 부트를 사용하면 스프링 부트가 MessageSource를 자동으로 스프링 빈으로 등록한다

//application.properties

spring.messages.basename=messages,config.i18n.messages

다음과 같이 메시지 소스를 설정할 수 있다.

 

 

스프링 메시지 소스 사용

//messages.properties

hello=안녕
hello.name=안녕 {0}
@SpringBootTest
public class MessageSourceTest {
 	@Autowired
 	MessageSource ms;
    
	@Test
 	void helloMessage() {
 		String result = ms.getMessage("hello", null, null);
 		assertThat(result).isEqualTo("안녕");
   	}
}

MessageSource의 getMessage를 사용하여 메시지 소스를 사용할 수 있다.

ms.getMessage("hello", null, null)
  • code: hello
  • args: null
  • locale: null

 

만약 메시지가 없는 경우 기본메시지(defaultMessage)를 설정할 수 있다.

ms.getMessage("no_code", null, "기본 메시지", null);

 

 

매개변수를 사용하여 메시지를 동적으로 사용할 수 있다.

메시지의 {0} 부분은 매개변수를 전달해서 치환할 수 있다.

ms.getMessage("hello.name", new Object[]{"Spring"}, null);

 

 

웹 애플리케이션에 메시지 적용하기

<h2 th:text="#{page.addItem}">상품 등록</h2>

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

 

 

웹 애플리케이션에 국제화 적용하기

웹브라우저에서 언어 설정 값을 변경하면서 국제화 적용을 확인 할 수 있다.

우선순위를 영어로 변경하고 테스트하면 요청시 Accept-Language의 값이 영어로 바뀐다.

Accept-Language는 클라이언트가 서버에 기대하는 언어 정보를 담아서 요청하는 HTTP 요청 헤더이다.

스프링은 언어 선택시 기본으로 Accept-Language 헤더의 값을 사용한다

또한 Accept-Language 를 활용하는 AcceptHeaderLocaleResolver를 사용하여 Locale의 선택방식을 변경할 수 있게 한다.

 

 

출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard

'Spring' 카테고리의 다른 글

[Spring] 로그인 처리(쿠키, 세션)  (0) 2023.01.24
[Spring] 검증(Bean Validation)  (0) 2023.01.20
[Spring] @ModelAttribute 사용법  (0) 2023.01.13
[Spring] @RequestParam 사용법  (0) 2023.01.10
[Spring] @PathVariable 사용법  (0) 2023.01.10