캐모마일 다국어 모듈 가이드
개요
chamomile 프레임워크는 properties파일 외에 데이터베이스 기반의 다국어 처리기능을 제공한다.
기존의 properties 파일을 사용하는 방식과 혼용하여 사용이 가능하며 이를 통합하는 유틸리티를 제공한다.
사용자가 직접 만들어놓은 테이블을 이용할 수 도 있으며 이 경우 어드민의 다국어 관리는 사용할 수 없다.
dependency
<dependency>
<groupId>net.lotte.chamomile.module</groupId>
<artifactId>chamomile-i18n</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
사용법
[설정]
직접 bean을 생성하고 싶다면 다음과 같이 생성하면 된다.
@Configuration
public class ChamomileI18nConfiguration implements WebMvcConfigurer {
@PersistenceContext
private EntityManager em;
..
// 파일기반 다국어 메시지 설정
@Bean
public ReloadableResourceBundleMessageSource fileMessageSource() {
ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
// 메시지 properties 파일을 등록한다. 등록 하지 않은 경우의 기본값은 message.properties 이다.
String[] baseNames = {"classpath:/message/message-common", "classpath:/message/message-user"};
reloadableResourceBundleMessageSource.setBasenames(baseNames);
reloadableResourceBundleMessageSource.setCacheSeconds(60);
return reloadableResourceBundleMessageSource;
}
@Bean
public MessageInfoRepositoryCustom messageInfoRepository() {
return new MessageInfoRepositoryImpl(em);
}
// 데이터베이스 기반 다국어 메시지 설정
@Bean
public DBMessageSource dbMessageSource() {
return new DBMessageSource((MessageInfoRepositoryImpl) messageInfoRepository());
}
// 다국어 메시지소스 통합(파일 기반 + 데이터베이스 기반)
@Bean
public MessageSource messageSource(ReloadableResourceBundleMessageSource fileMessageSource
, DBMessageSource dbMessageSource) {
IntegratingMessageSource integratingMessageSource = new IntegratingMessageSource();
List<MessageSource> abstractMessageSourceList = new ArrayList<>();
abstractMessageSourceList.add(fileMessageSource);
abstractMessageSourceList.add(dbMessageSource);
integratingMessageSource.setMessageSources(abstractMessageSourceList);
return integratingMessageSource;
}
}
[예제]
MailUtil bean을 이용해 메일을 발신한다.
@Autowired
private MessageSource messageSource;
...
messageSource.getMessage("[다국어 코드]", null, null);
//arguments가 존재할경우 (e.g. 총 {0}건이 등록되었습니다.)
messageSource.getMessage("[다국어 코드]", new Integer[]{3}, null);