스프링 메시지, 국제화
스프링 MVC 2편- 백엔드 웹 개발 핵심 기술을 듣고 정리
스프링은 기본적인 메시지와 국제화 기능을 모두 제공한다. 개념 및 사용 방법에 대해서 알아보자.
메시지
어떤 애플리케이션의 여러 화면에서 쓰이는 필드명을 바꾸려면? 화면이 수백개라면? 수기로 작업하기에는 상당한 시간이 걸린다.
이런 정보를 한 곳에서 관리하는 기능을 메시지라고 한다.
사용방법
1. messages.properties 메시지 관리용 파일을 생성한다.
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
- 각 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를 사용한다.
Author And Source
이 문제에 관하여(스프링 메시지, 국제화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jyo925/스프링-메시지-국제화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)