메시지, 국제화

JungHwan Oh·2022년 7월 23일
0

회사에서 다국어 지원(결제)를 개발한다는 이야기를 듣고 메시지, 국제화를 사용할 수도 있다라는 생각이 들어 이전에 수강 했던 김영한님의 강의를 바탕으로 복습하고 내용을 정리해 보았습니다.

메세지, 국제화란?

메시지

화면에서 보여지는 여러개의 라벨을 하드코딩 되어있다면 수정시 하나하나 찾아 다니며 라베을 수정애햐 하는 번거로움이 있습니다. 이러한 메시지들을 하나의 properties 파일로 관리하도록 하는 기능이 메시지 기능입니다.
결국 하나의 파일로 메시지들을 관리하여 편리성을 얻고자 하는 것입니다.

국제화

국제화란 단어에 의미에서 알 수 있지만 각 나라별로 서비스를 제공을 하기 위한 기능입니다.

properties

messages_ko_properties

hello=안녕
hello.name=안녕 {0}

message_en_properties

hello=hello
hello.name=hello {0}

이런식으로 여러 국가에 서비스하며 여러 메시지들을 관리해야 하는 서비스라면, 메시지와 국제화를 통해서 편리하고 메세지를 관리하며 국제화 서비스를 구축 할 수 있을 겁니다.

※ 어느 국가에서 접근한 것인가에 대해 알 수 있는 방법은 accept-language 헤더 값을 사용 하거나(Spring 에서는 기본적으로 accept-language 헤더 값을 사용하고 있습니다.) 세션, 쿠키를 사용 하거나 등등.. 취향에 맞게 사용 하면 될 것 같습니다.

properteis 파일도 적용이 가능하니 .yaml 파일로도 관리 할 수 있을 겁니다. 제가 봤을 때는 .yaml 파일이 관리 하기 쉬울 것 같다는 생각이 듭니다.

Config

Spring 에서 제공하는 MessageSourceBean으로 등록하면 됩니다. MessageSource는 인터페이스 이므로 구현체인 ResourceBundleMessageSourceBean으로 등록하시면 됩니다.

        ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource();
        resourceBundleMessageSource.setBasenames("message", "error");
        resourceBundleMessageSource.setDefaultEncoding("UTF-8");
        return resourceBundleMessageSource;

혹시 SpringBoot를 사용하고 계신다면 Boot에서는 기본적으로 MessageSource를 자동으로 빈으로 등록 하기 때문에 따로 설정을 필요하지 않습니다. (아직 저희 회사는 legacy project가 많아서 따로 설정해줘야 할 것 같습니다 ^^;;)

SpringBoot Config

application properties

	
    spring.messages.basename=messages,config.i18n.messages
    spring.messages.encoding=UTF-8

주의
파일 이름이 '.' 을 넣으면 안됩니다. spring.messages.basename 설정을 파싱하는 코드는 '.' 을 기준으로 파일 경로를 나누기 때문에 '/' 와 같은 의미를 같습니다.
https://blog.hkwon.me/spring-boot-spring-i18n-configuration/

SpringBoot 에서의 메시지 소스 기본 값은 아래와 같습니다.
application properties


	spring.messages.basename=messages

따라서 빈으로 등록하지 않고, 별도의 설정을 하지 않으시면 messages 라는 이름으로 기본 등록이 됩니다. 그러므로 message_ko_properteis message_en_properties 등등... 파일만 등록하시면 자동으로 인식이 됩니다

Thymeleaf 적용

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

타임리프에서의 메시지 표현식 #{...} 를 사용하여 메시지를 편리하게 조회 할 수 있습니다.

국제화 적용

그렇다면 국제화 적용은 어떻게 할까요?? 국제화 적용은 이미 적용 되어 있는데요 위에 message_en_properties 를 등록 했었는데요. 웹 브라우저에서의 언어 설정 값을 영어로 바꾸신다면 영어로 적용될 것입니다. 그 이유는 위에서 말했듯 Spring 에서는 기본적으로 accept-language 헤더 값 을 사용하고 있기 때문입니다.

강의를 기반한 내용을 통해서 간략하게 정리를 해봤습니다. 봐주셔서 감사합니다!!

[Reference]

김영한님의 Spring MVC 2편 - 메시지 국제화

profile
JAVA BACK_END DEVELOPER

0개의 댓글