Spring

메시지, 국제화

조밈밍 2022. 4. 18. 02:30

❗ 기획자가 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하였다면?

-> 단어를 다 찾아가면서 모두 변경해야 한다 => 해당 HTML 파일에 메시지가 하드코딩 되어 있기 때문

 

❓ 하드코딩 

ex) <h2>상품 등록 폼<h2> 

=> 상품 등록 폼과 같이 박혀 있는 코드를 말한다

 

💡 메시지

- 다양한 메시지를 한 곳에서 관리하도록 하는 기능

 

1. messages.properties 메시지 관리용 파일 작성한다

2. HTML에 key 값으로 해당 데이터를 불러 사용한다 => 타임리프 이용 #{ key }

 

💡 국제화

- 메시지 파일 (messages.properties)을 각 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다

ex) messages_en.properties / messages_ko.properties 

 

💡 스프링 메시지 소스 설정

- 스프링은 기본적인 메시지와 국제화 기능을 모두 제공한다

- 메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource를 스프링 빈으로 등록한다

  => 직접 등록하는 방법/ 스프링 부트 이용

- 직접 등록

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

 

📌 스프링 부트 이용 

: 스프링 부트가 자동으로  MessageSource를 스프링 빈으로 등록한다

: MessageSource를 스프링 빈으로 등록하지 않고, 스프링 부트와 관련된 별도의 설정을 하지 않으면

  messages라는 이름으로 기본 등록된다

 

스프링 부트 메시지 소스 기본 값

< application.properties >

spring.messages.basename=messages

 

💡 메시지 실제 적용

- messages.properties 작성하기

label.item=상품
label.item.id=상품 ID
label.item.itemName=상품명
label.item.price=가격
label.item.quantity=수량

page.items=상품 목록
page.item=상품 상세
page.addItem=상품 등록
page.updateItem=상품 수정

button.save=저장
button.cancel=취소

- 타임리프 메시지 표현식 이용해 조회 #{ }

<h2>상품 등록</h2>

<h2 th:text="#{page.addItem}">상품 등록</h2>

=> 둘다 <h2>상품 등록</h2>로 보여진다

 

💡 국제화 적용

- messages_en.properties 작성하기

label.item=Item
label.item.id=Item ID
label.item.itemName=Item Name
label.item.price=price
label.item.quantity=quantity

page.items=Item List
page.item=Item Detail
page.addItem=Item Add
page.updateItem=Item Update

button.save=Save
button.cancel=Cancel

- 이미 메시지 적용으로 #{ } 해뒀다

- 웹 브라우저의 언어 설정 값을 변경해 국제화 적용이 되었나 확인하자