메시지, 국제화

강한친구·2022년 6월 16일
0

Spring

목록 보기
18/27

메시지 관리 기능

프로젝트에서 다양한 언어를 지원하려고 하면 어떤 방식을 취해야할까?

가장 간단하게 생각하면 HTML에 있는 메시지들을 전부 영어나 다른 언어로 고치는것을 생각해볼 수 도 있다. 하지만 이건 매우 비효율적이고 오류발생 가능성도 높다. 따라서 이를 통합 관리하는 messages.properties 관리용 파일이 필요하다.

각 HTML들은 이제 이 안에 있는 파일명을 보고 그에 맞는 값을 가져다가 쓴다.

국제화

HTTP헤더에는 언어 우선순위 정보가 담겨있다.

accept-language: ko,en;q=0.9,ko-KR;q=0.8,en-US;q=0.7

이는 구글 공식 홈페이지의 언어선택 우선순위이다.
이런식으로 사용자의 언어에 맞춰서 언어를 출력해주는 기능은 요즘 사이트들에 기본적으로 들어 있다. 이를 국제화라고 한다.

스프링에서는 메시지 국제화 기능을 제공한다.

스프링 부트에 메시지 설정하기

spring.messages.basename=messages, config.il8n.messages

application.properties 파일에 해당 값을 주면 이제 messages.properties를 읽어들이게 된다. 이에 국제화가 작동하면, 자동으로 인식해서 작동한다.

그리고 이런식으로 언어별 메시지 파일을 만들어서 사용하면 된다.

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=취소
hello=hello
hello.name=hello {0}

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

이런식으로 언어별 설정을 따로 줄 수 있고, 인텔리제이는 이를 받아서 http 헤더의 우선언어 순위에 따라 처리하게 될 것이다.

한글 깨짐?

인텔리제이에서 한글을 제대로 지원하지 못하는것인지 그냥 돌리면 한글이 깨지는 경우가 굉장히 많다.

이를 해결하기 위한 방법

  1. Shift 2번 누르고 검색창 연 다음 vm 검색, vm options 들어가서
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8

내용 추가 후 닫기

  1. settings에 들어가서 file encoding을 전부 utf-8로 설정

  1. gradle 파일 수정
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

다음과 같은 내용을 추가한다.

  1. 이래도 안된다면 file->invalidate cache를 통해 캐시를 전부 지우고 위의 설정을 다시 해주면 된다.

국제화 끝

이렇게 메시지, 국제화는 간단하게 해결 할 수 있다.

0개의 댓글