스프링 메시지, 국제화

지윤·2021년 8월 7일
0

Spring

목록 보기
5/7

스프링 MVC 2편- 백엔드 웹 개발 핵심 기술을 듣고 정리

스프링은 기본적인 메시지와 국제화 기능을 모두 제공한다. 개념 및 사용 방법에 대해서 알아보자.

메시지

어떤 애플리케이션의 여러 화면에서 쓰이는 필드명을 바꾸려면? 화면이 수백개라면? 수기로 작업하기에는 상당한 시간이 걸린다.
이런 정보를 한 곳에서 관리하는 기능을 메시지라고 한다.

사용방법
1. messages.properties 메시지 관리용 파일을 생성한다.

item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
  1. 각 HTML 파일에서 key 값을 이용해 데이터를 불러서 사용하면 된다.
<label for="itemName" th:text="#{item.itemName}"></label>

스프링 메시시 소스 설정

스프링 메시지를 사용하려면, MessageSource를 스프링 빈으로 등록해야하는데, 스프링 부트가 자동으로 등록한다.

스프링 부트 메시지 소스 기본 값은 spring.messages.basename=messages이다.
따라서 아래와 같은 이름으로 파일을 생성하면 자동으로 인식된다.

  • messages_en.properties
  • messages_ko.properties
  • messages.properties

Test

@SpringBootTest
public class MessageSourceTest {
	@Autowired
	MessageSource ms;
    
    	
	@Test
	void helloMessage() {
		String result = ms.getMessage("hello", null, null);
		assertThat(result).isEqualTo("안녕");
	}
    	//메시지가 없는 경우, 기본 메시지 사용 가능
    	@Test
	void notFoundMessageCodeDefaultMessage() {
		String result = ms.getMessage("no_code", null, "기본 메시지", null);
		assertThat(result).isEqualTo("기본 메시지");
	}
    	// 매개변수 사용 가능 -> hello.name=안녕 {0}
   	 @Test
	void argumentMessage() {
		String result = ms.getMessage("hello.name", new Object[]{"Spring"}, null);
		assertThat(result).isEqualTo("안녕 Spring");
	}
}

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

Thymeleaf에 메시지 적용하기

  • 메시지 표현식 #{..}를 이용
  • 추후 변경이 필요하면 messages.properties 파일만 수정하면 된다.


국제화

메시지 파일(messages.properties)을 각 나라별로 관리해서 서비스하면 국제화가 가능하다.

메시지 파일을 나라별로 생성

  • messages_en.propertis
  • messages_ko.propertis

서버는 클라이언트가 어느 국가에서 접근했는지 어떻게 알 수 있나?
1. HTTP accept-language 헤더 값을 사용
2. 사용자가 직접 언어를 선택하도록 처리

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

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

  • 스프링은 Locale 정보를 알아야 언어를 선택할 수 있는데, 스프링은 언어 선택시 기본으로 Accept- Language 헤더의 값을 사용한다.
  • 스프링은 Locale 선택 방식을 변경할 수 있도록 LocaleResolver 라는 인터페이스를 제공하는데, 기본으로 Accept-Language를 활용하는 AcceptHeaderLocaleResolver를 사용한다.
profile
헬로🙋‍♀️

0개의 댓글