메시지와 국제화의 개념과 사용방법을 설명하기 전에 먼저 예시를 먼저 들어보겠습니다.

 

여기서 이름, 나이, 아이디, 비밀번호가 적힌 페이지수가 20개라고 예시를 들어보겠습니다. 근데 여기서 아이디와 비밀번호를 ID, Password로 변경을 하고 싶으면 20개의 페이지를 다 들어가서 하나씩 하나씩 변경을 해줘야 되는 됩니다. 이런 번거로운 일을 줄이기 위해 사용하는 것이 메시지 기능입니다.

 

1. 메시지란?

위에 예시처럼 여러 페이지에 있는 다양한 메시지를 한 곳에서 관리하는 기능입니다.

2. 국제화란?

메시지랑 비슷한 기능을 하는데 Accept-Lange에서 나라언어 우선순위에 따라 메시지를 해당하는 나라 언어로 변경해주는 기능입니다. 예를 들어보면 구글에서 영어로 된 부분을 한국어로 번역 이런 것을 본 적 있을 겁니다. 한국어 번역을 누르면 영어를 한국어로 바꿔주는 역할이 국제화 기능입니다.

3. 메시지와 국제화 사용 방법 및 예시

* message.properties

user.name = 이름
user.age = 나이
user.id = ID
user.passwd = Password

* message_en.properties

user.name = Name
user.age = Age
user.id = ID
user.passwd = Password

 

  • 메시지와 국제화 기능을 직접 설정하는 방법
@Bean
public MessageSource message() {
    ResourceBundleMessageSource source = new ResourceBundleMessageSource();
    source.setBasenames("사용할메시지 properties 파일명");
    source.setDefaultEncoding("utf-8");
    return source;
    }

 

1. MessageSource 인터페이스를 Bean으로 먼저 등록을 합니다.

2.  resource 패키지 하위에 setBasenames로 설정해놓은 파일명을 만듭니다. 

3. "사용할메시지 properties 파일명" => message일 경우 resource 하위에 message.properties를 만들어줍니다.

4. message.properties에 정의해 놓은 값을 사용하는 방법은 MessageSource에 있는 getMessage 메서드를 사용하면 됩니다.

 

@AutoWired
MessageSource message;

//getMessage(String code,@NullAble Object[] args,@Nullable String defaultMessage, Locale locale);


void messageTest() {
    String test = message.getMessage("user.id",null,null);
}

//결과
test = "ID"

void messsageTest() {
    String test = message.getMessage("user.name", null, Locale.ENGLISH);
}

//결과
test = "Name"

void messsageTest() {
    String test = message.getMessage("user.name", null, Locale.KOREA);
}

//결과
test = "이름"

 

근데 위와 같이 따로 설정을 안해줘도 됩니다. 왜냐하면 스프링 부트에서 메시지 기능과 국제화 기능을 자동으로 설정을 해주기 때문입니다.

메시지와 국제화 기능을 사용자가 직접 설정하는 방법에서 보면 setBasenames 부분에서 properties명을 설정해주는 부분이 있습니다. setBasenames를 사용 안 하고 properties명을 설정해주는 부분은 application.properties에 설정을 해주면 됩니다.

spring.messages.basename= message, config,....

 

위와 같이 설정을 안해줘도 스프링 부트에서 default로 messages이름을 설정해줍니다.

 

여태 설명 드린 부분은 언어 우선순위가 한국어인 사용자 기준으로 설명을 했습니다. 영어가 우선순위인 사용자도 존재하기 때문에 message.properties와 같은 경로에 message_en.properties를 만들어 줍니다.

 

 

이제 messasge.properties와 messasge_en.properties에 설정해 놓은 값을 어떻게 변경하는지 thymeleaf를 사용하여 확인해보겠습니다.

 

<form>
      <label for="name" th:text="#{user.name}">이름</label>
      <input type="text" placeholder="이름을 입력하세요" /><br />
      
      <label for="age" th:text="#{user.age}">나이</label>
      <input type="text" placeholder="나이를 입력하세요" /><br />
      
      <label for="id" th:text="#{user.id}">아이디</label>
      <input type="text" placeholder="아이디를 입력하세요" /><br />
      
      <label for="passwd" th:text="#{user.passwd}">비밀번호</label>
      <input type="password" placeholder="아이디를 입력하세요" />
 </form>

 

* 참고 

  • thymeleaf에서 메시지를 표현하는 방법=> #{...}
  • thymeleaf에서 텍스트 사용방법 : th:text

 

결과

  • 언어 우선순위가 한국어인 사용자 (message.properties 적용)

  • 언어 우선순위가 영어인 사용자(message_en.properties 적용)