개발놀이터

스프링 메시지 / 국제화 본문

Spring/Spring

스프링 메시지 / 국제화

마늘냄새폴폴 2021. 10. 18. 18:49

본 포스트는 김영한님의 인프런강의 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 보고 정리한 포스트입니다. 자세한 내용은 강의를 참고해주세요

 

*메시지 / 국제화
기획자가 화면에 보이는 문구가 마음에 들지 않는다고 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 어떻게 해야할까? 여러 화면에 보이는 상품명, 가격, 수량 등 laebl에 있는 단어를 변경하려면 다음 화면들을 다 찾아가면서 모두 변경해야한다. 이는 페이지가 많으면 많을수록 더 난감해진다. 이렇게 난감해지는 이유는 해당 html파일에 메시지가 하드코딩 되어있기 때문이다. 

하드코딩이란?
데이터를 코드 내부에 직접 입력하는 것, 기술적으로는 데이터가 실행 바이너리에 합쳐져 있는 상태를 말한다. 반대말은 소프트코딩 또는 로딩이라고 한다. 

하드코딩의 예시
<label for="price">가격</label>

스프링은 기본적인 메시지 관리 기능을 제공한다. 메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource를 스프링 빈으로 등록하면 되는데 스프링부트를 사용할 경우
자동으로 스프링 빈으로 등록해주고 관리까지 해준다. 

application.properties에 spring.messages.basename=messages,config.i18n.messages 이렇게 등록하면 된다. 베이스네임의 디폴트값이 messages이기 때문에 messages하나만 쓴다면 적지않아도 된다. 

스프링에서 메시지 사용하기
1. application.properties에 설정등록
2. messages.properties에 메시지 등록 (메시지 등록은 key, value로 이루어져있다.)
item = 상품
item.id = 상품 ID
item.itemName = 상품명
item.price = 가격
item.quantity = 수량
3. MessageSource의 의존성 주입을 해준다. 
4. ms.getMessage("item", null, null); = "상품" (첫번째 파라미터는 키에 해당하는 문자이고, 두번째 파라미터는 Argument이고, 세번째는 Locale이다.)

타임리프에서 메시지 사용하기
2번까지는 스프링에서 메시지 사용하기와 같다.
3. 타임리프에서 제공하는 메시지 표현식 #{...}을 사용하면 된다.
랜더링 전
<label for="price" th:text="#{item.price}"></label>
랜더링 후
<label for="price">가격</label>

'Spring > Spring' 카테고리의 다른 글

스프링 Bean Validation  (0) 2021.10.25
스프링 Validation  (0) 2021.10.23
타임리프심화1  (0) 2021.10.16
타임리프기본2  (0) 2021.10.15
타임리프기본1  (0) 2021.10.13