프로젝트에서 다양한 언어를 지원하려고 하면 어떤 방식을 취해야할까?
가장 간단하게 생각하면 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를 읽어들이게 된다. 이에 국제화가 작동하면, 자동으로 인식해서 작동한다.
그리고 이런식으로 언어별 메시지 파일을 만들어서 사용하면 된다.
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 헤더의 우선언어 순위에 따라 처리하게 될 것이다.
인텔리제이에서 한글을 제대로 지원하지 못하는것인지 그냥 돌리면 한글이 깨지는 경우가 굉장히 많다.
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8
내용 추가 후 닫기
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
다음과 같은 내용을 추가한다.
이렇게 메시지, 국제화는 간단하게 해결 할 수 있다.