국제화(Internationalization, I18N)란 미리 다양한 언어와 지역을 지원하도록 소프트웨어를
설계하고 쉽게 리엔지니어링을 할 수 있게 지원하는 일련의 과정이다.
Internationalization의 특징
Internationalization의 필요성
- 코드 수정 없이 지원하는 언어를 추가
- 텍스트 요소들, 메시지들, 이미지 소스들과 소스코드의 분리
-
날짜,시간,숫자, 통화 등과 같은 문화에 종속적인 데이터들을 언어와 위치에 따라 달리 포맷팅
- 비 표준 문자 집합들을 지원
- 어플리케이션을 새로운 언어와 지역에 쉽고 빠르게 적용
어플리케이션이 국제화를 지원한다고 해서 모든 언어와 지역에서 곧바로 쓸 수 있는 것을 의미한다는 것은
아니다. 국제화를 지원한다는 것은 언어나 지역에 영향을 받는 부분과 영향을 받지 않는 코드를 분리하여 쉽게
지역화될 수 있게 만들었다는 것을 의미한다.
지역 (Locale)
- 관습과 문화, 언어를 공유하는 영역을 의미함
-
지역화(L10N, Localization)는 제대로 국제화된 어플리케이션을 특정 지역에 맞게
만드는 일련의 과정
국제화 지원 시 위의 특징들 중 일부만 골라서 구현하는 것은 별 의미가 없다. 모두 지원하든지 지원하지
않든지 둘중의 하나이다. cf.) Anyframe Web에서는 모든 국제화 문제를 고려할 수는 없고 Core
Class 인 java.util.Locale, java.util.ResourceBundle 위주로
논의되었다.
Anyframe Web에서 제공하는 리소스들은 텍스트와 이미지에 초점이 맞추어져 있다.
MessageResource Bundle은 ProperyResourceBundle Class 의 규약에 따라 만들어야
한다. 확장자 .properties 의 텍스트 파일로, 메시지들은 key=value와 같은 형식으로 작성해야
함은 이미 말한 바 있다. 또한 클래스처럼 찾아오기 때문에 클래스패스 상에 작성해야 한다.
MessageResource Bundle 이 여러 개 있을 경우 Struts는 번들 중 하나에서 메시지를 찾을 때 기본
이름과 지역을 사용하여 이름이 가장 가깝게 일치하는 번들을 찾는다. 찾는데 실패하면 기본 번들을 사용한다.
다음은 메시지 정의의 예이다.
# error message
common.msg.authorization.error=You can not access this page.
..
# text resource
common.ui.title=eMarketPlace
..
다음은 ActionMessage 생성 시 메시지 키를 설정하는 예이다.
erros.add(ActionErrors.GLOBAL_ERROR, new ActionMessage("common.msg.authorization.error"));
다음은 Bean 태그 라이브러리의 MessageTag 를 사용하여 해당 메시지 키에 대한 실제 텍스트
value를 표시하는 예이다.
<head>
<title><bean:message key="common.ui.title"/></title>
</head>