메시지, 국제화

유동우·2023년 5월 28일
0
post-thumbnail

메시지, 국제화 소개

메시지

'상품명' -> '상품이름' 으로 모두 바꿔주려면 어떻게 해야할까?
=> 수십개의 파일에 가서 직접 이름을 바꿔줘야한다

이때 messages.properties 라는 메시지 관리용 파일을 만들자

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

이후

//addForm.html
<label for="itemName" th:text="#{item.itemName}"></label>

//이런식으로 해당 데이터를 key값으로 불러서 사용 가능

국제화

위에 설정한 메시지파일 (messages.properties) 를 나라별로 관리 => 국제화

messages_en.properties
messages_ko.properties

두 파일을 생성하고 각 나라별로 접근이 다르므로
(HTTP acept-language 헤더 값을 사용하거나 사용자가 직접 언어를 선택하도록 하고, 쿠키 등을 사용해서 처리)

스프링 메시지 소스 설정

스프링은 기본적인 메시지 관리 기능을 제공

  @Bean
  public MessageSource messageSource() {
  	ResourceBundleMessageSource messageSource 
    	= new ResourceBundleMessageSource();
    //MessageSource 인터페이스의 구현체인 
    //ResourceBundleMessageSource 를 스프링빈으로 등록
    messageSource.setBasenames("messages", "errors"); // 설정 파일의 이름 지정 
    messageSource.setDefaultEncoding("utf-8");
    
    return messageSource;
}

스프링 메시지 소스 사용

ms.getmessage("hello", null, null)
// code: hello, args: null, locale: null
//locale 정보가 없으면 basename에서 설정한 기본 이름 메시지 파일 조회

웹 애플리케이션에 메시지 적용하기


//messages.properties

label.item=상품 
label.item.id=상품 ID 
label.item.itemName=상품명
...

<div th:text="#{label.item}"></h2>

웹 애플리케이션에 국제화 적용하기

//messages_en.properties

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

크롬 -> 설정 -> 언어를 검색해서 우선 순위 변경하여 국제화 적용여부 확인 가능
(이렇게 웹 브라우저에서 언어 설정 값 요청 시 Accept_Language의 값이 변경된다
)

Accept-Language 는 클라이언트가 서버에 기대하는 언어 정보를 담아서 요청하는 HTTP 요청 헤더이다.

스프링의 메시지 기능은 Locale 정보를 알아야 언어 선택이 가능한데, 기본으로 Accept-Language 헤더의 값을 사용한다.

public interface LocaleResolver {
    Locale resolveLocale(HttpServletRequest request);
    void setLocale(HttpServletRequest request, @Nullable HttpServletResponse
  response, @Nullable Locale locale);
}

LocaaleResolver의 구현체에서 쿠키나 세션 기반의 Locale을 사용하도록 선택기능 사용 가능 -> 클라이언트가 직접 Locale 선택 가능

Reference
김영한 님 - 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

profile
효율적이고 꾸준하게

0개의 댓글