스프링 부트 3.2.1 버전을 기준으로 작성됨
대부분이 실습코드이므로 학습위주로 정리함
messages.properties 라는 관리용 파일에 다양한 메시지를 관리
파일명 : application.properties
spring.messages.basename=messages (기본)
// 추가할 수 있음
// properties 파일 생성
// ex) home.properties
spring.messages.basename=messages, home
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
// 사용
#{item.itemName}
hello=안녕
hello.name=안녕 {0} // 파라미터 받기 가능
// 파라미터 사용
<p th:text="#{hello.name(${item.itemName})}"></p>
// 메시지를 읽어오는 기능을 제공
public interface MessageSource {
String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale);
String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;
@SpringBootTest
public class MessageSourceTest {
@Autowired
MessageSource ms;
@Test
void helloMessage() {
String result = ms.getMessage("hello", null, null);
assertThat(result).isEqualTo("안녕");
}
}
ms.getMessage("hello", null, null)
code: hello
args: null
(defaultMessage) : @Nullable
locale: null
// 파일이름
// messages_ko.properties
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
// messages_en.properties
item=Item
item.id=Item ID
item.itemName=Item Name
item.price=price
item.quantity=quantity
메시지 기능은 Locale 정보를 알아야 언어 선택 가능
스프링은 Locale
선택 방식을 변경할 수 있도록 LocaleResolver
라는 인터페이스를 제공
스프링 부트는 기본으로 Accept-Language
를 활용하는 AcceptHeaderLocaleResolver
를 사용
public interface LocaleResolver {
Locale resolveLocale(HttpServletRequest request);
void setLocale(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable Locale locale);
}
만약 Locale 선택 방식을 변경하려면 LocaleResolver 의 구현체를 변경해서 쿠키나 세션 기반의 Locale 선택
기능을 사용 가능
ex) 고객이 직접 Locale 을 선택
자세한 것은 찾아보고 직접 구현해볼 것
🔖 학습내용 출처