다국어 모듈 사용 가이드
개요
chamomile 프레임워크는 properties파일 외에 데이터베이스 기반의 다국어 처리기능을 제공한다.
기존의 properties 파일을 사용하는 방식과 혼용하여 사용이 가능하며 이를 통합하는 유틸리티를 제공한다.
사용자가 직접 만들어놓은 테이블을 이용할 수 도 있으며 이 경우 어드민의 다국어 관리는 사용할 수 없다.
파일 기반 다국어 적용
프로젝트 생성(chamomile-boot-basic)
dependency 등록(pom.xml)
<dependency> <groupId>net.lotte.chamomile.module</groupId> <artifactId>chamomile-i18n</artifactId> </dependency>리소스 번들 생성(resources/message/Resource Bundle 'message-common')
message 파일 작성(resources/message/Resource Bundle 'message-common'/message-common_en.properties)
exception.runtime=RuntimeException occurs.message 파일 작성(resources/message/Resource Bundle 'message-common'/message-common_ko.properties)
exception.runtime=런타임오류가 발생했습니다.컨트롤러 작성
BoardController.java//다국어 관련 인터페이스 private final MessageSource messageSource; /** * 파일 다국어가 적용된 예외를 발생시킵니다. */ @GetMapping("/file-i18n-exception") public ChamomileResponse<Void> fileI18nException() { String message = messageSource.getMessage("exception.runtime", null, Locale.KOREAN); throw new RuntimeException(message); }
데이터베이스 기반 다국어 적용
프로젝트 생성(chamomile-boot-basic)
dependency 등록(pom.xml)
<dependency> <groupId>net.lotte.chamomile.module</groupId> <artifactId>chamomile-i18n</artifactId> </dependency>다국어 관련 SQL 파일 실행(CHMM_MESSAGE_SOURCE_INFO)
캐모마일 제공 SQL(DDL.sql,DML.sql)을 실행했다면 해당 부분은 넘어간다.CREATE TABLE CHMM_MESSAGE_SOURCE_INFO ( CODE VARCHAR(255) NOT NULL ,COUNTRY_CODE VARCHAR(5) NOT NULL ,LANGUAGE_CODE VARCHAR(5) NOT NULL ,SYS_INSERT_DTM TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,SYS_INSERT_USER_ID VARCHAR(255) DEFAULT 'SYSTEM' ,SYS_UPDATE_DTM TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,SYS_UPDATE_USER_ID VARCHAR(255) DEFAULT 'SYSTEM' ,MESSAGE VARCHAR(1000) ,USE_YN CHAR(1) DEFAULT '1' ,PRIMARY KEY (CODE, COUNTRY_CODE, LANGUAGE_CODE) ); INSERT INTO CHMM_MESSAGE_SOURCE_INFO (LANGUAGE_CODE, COUNTRY_CODE, CODE, MESSAGE, USE_YN) SELECT 'en', 'US', 'alert.msg.error', 'An error has occurred.', '1' UNION ALL SELECT 'ko', 'KR', 'alert.msg.error', '에러가 발생했습니다.', '1';컨트롤러 작성
BoardController.java//다국어 관련 인터페이스 private final MessageSource messageSource; /** * 데이터베이스 다국어가 적용된 예외를 발생시킵니다. */ @GetMapping("/database-i18n-exception") public ChamomileResponse<Void> databaseI18nException() { String message = messageSource.getMessage("alert.msg.error", null, Locale.KOREAN); throw new RuntimeException(message); }
Last modified: 21 4월 2025