알프레스코에서 비즈니스 로직단을 담당하는 /alfresco 컨텍스트에서 다국어 처리하는 방법을 알아보자.
사전 준비물
다국어 처리를 위해서는 당연히 준비되어야 하는 항목이 있다.
- 다국어 properties 파일
- 다국어 설정을 위한 xml 파일
다국어 properties 파일
언어별 key-value 값을 가지고 있는 properties 파일은 작업 전에 필수적으로 준비해야 하는 항목이다.
다음의 경로에 아래의 파일이 있다고 가정해보자.
/[프로젝트 명]/src/main/amp/config/alfresco/module/vince-server/messages
.properties 앞에 있는 언어/국가 코드로 다국어 처리를 하게 되는데, 언어/국가 코드가 없는 경우는 디폴트라는 의미이고, 언어로만 정의할 수도 있으며, 언어_국가로 정의할 수 있다. 국가로만은 정의가 불가능하다.
다국어 설정을 위한 xml 파일
스프링 컨터이너에서 로드하는 xml 에 다음과 같은 설정 추가가 필요하다.
bean id 는 중복되면 안되기 때문에 메시지 경로와 이름을 적절히 조합하여 사용해야 한다.
### xml
<bean id="vince.resourceBundles" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
<property name="resourceBundles">
<list>
<value>alfresco.module.vince-server.messages.vince-message</value>
</list>
</property>
</bean>
위의 properties 파일의 위치가 설정 값에 영향을 미치는데, /config 에서 부터 .properties 전 까지의 경로에서 '/' 를 '.' 으로 바꾸어주면 된다.
여러 종류의 다국어 properties 를 적용하려면 <list> 에 여러 <value> 를 추가하면 된다.
다국어 처리
properties 에 다음과 같은 다국어가 있다고 가정해보자.
vince.label.name = 이름
vince.alert.duplicateName = {0} 는 중복된 이름입니다. {1} 자 이내로 다시 입력하시기 바랍니다.
사용법은 아래와 같다.
### java
final String nameLabel = I18NUtil.getMessage("vince.label.name"));
// nameLabel = 이름
...
final String inputName = "자수씨";
final int maxNameLength = 20;
final String duplicateNameAlertMessage =
I18NUtil.getMessage("vince.label.name", inputName, maxNameLength));
// duplicateNameAlertMessage = 자수씨 는 중복된 이름입니다. 20 자 이내로 다시 입력하시기 바랍니다.
org.springframework.extensions.surf.util.I18NUtil 클래스의 getMessage 메소드를 이용하여 처리할 수 있다.
getMessage 메소드는 총 4가지가 있는데, 일반적인 다국어 key 를 이용하는 방법과, 파라미터를 치환하는 방법이다. 자세한 내용은 위의 사용법을 보고 확인해보자.