Spring MVC 2편 - 메세지 국제화 기능

김승호·2024년 12월 17일
0

1. 메세지와 국제화

1. 메세지 필요성

1) HTML에 기록되어 있는 “상품명”을 고치고 싶은데 수 백가지를 반복 작업 하면서 수정해야된다. 이럴 때 HTML에 바로 상품명을 등록시키지 않고 특정 properties를 만든 뒤 불러다 쓰는 것을 메시지라 한다.

2. 국제화 필요성

1) 국제화 필요성 : 각 나라별 언어를 지원하기 위해 사용한다.

Spring은 기본적인 메세지 기능을 제공한다. 또한 타임리프도 스프링이 제공하는 메시지와 국제화 기능을 통합해서 사용할 수 있다.

3. 메세지와 국제화 사용을 위한 MessageSource 등록

1. 자동 등록 (default)

1) MessageSource 를 스프링 빈으로 등록하지 않고, 스프링 부트와 관련된 별도의 설정을 하지 않으면 messages 라는 이름으로 빈이 기본 등록된다.
2) messages_en.properties , messages_ko.properties , messages.properties 파일만 등록하면 자동으로 인식된다.

2. application.properties로 등록

1) 이럴 경우 스프링 부트가 MessageSource 를 자동으로 스프링 빈으로 등록
2) application.properties에서 spring.messages.basename=을 설정한다. 그러면 basetname.properties를 스프링 부트에서 자동으로 읽어들인다.

3. 빈 직접 등록

1) @BaseNames와 DefaultEncoding을 설정해서 직접 등록한다.

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

2) 이럴 경우 "messages", "errors"이름으로한 메세지와 국제화 기능을 사용할 수 있다.

4. properties 등록

해당 resource에 basename.properties로 등록 시 자동으로 설정된다.

내부에 key와 value를 설정해서 thymleaf에서 사용 가능하다.

1. 사용처 - testcase 작성 (MessageSource.getMessage())

	@Test
    void enLang() {
        assertThat(ms.getMessage("hello", null,"dddd", Locale.ENGLISH)).isEqualTo("hello");
    }

1) 메세지가 없을 경우
메시지가 없는 경우에는 NoSuchMessageException 이 발생한다.
메시지가 없어도 기본 메시지(defaultMessage)를 사용하면 기본 메시지가 반환된다.

2. 사용처 - thymleaf

1) 타임리프에서 사용 #{} 표현식으로 사용
2) 타임리프에서 매개변수를 넣을 시 #{lable.name(매개변수)}와 같이 사용

<label for="itemName" th:text="#{label.item.itemName}">상품명</label>

참고

스프링MVC2편

profile
백준 : https://www.acmicpc.net/user/tmdghdhkdw (골드 - 2)

0개의 댓글