티스토리 뷰
Spring Boot 에서 messages.properties 을 이용한 다국어 처리 (1)
zepinos 2019. 1. 28. 14:57Spring Boot 에서 사용할 수 있는 다국어 처리(i18n)에 대해서 몇 가지만 이야기 하려고 합니다.
Spring Boot 에서 다국어를 처리하는 가장 쉬운 방법은 src/main/resources 디렉토리에 messages.properties 파일을 이용하는 방법입니다.
기본 제공할 언어에 대해서 messages.properties 에 정의하고 messages_ko.properties, messages_en.properties 와 같이 파일을 생성하면 해당 언어에 따른 메세지를 별도로 관리할 수 있습니다. 물론 messages_ko_KR.properties, messages_en_US.properteis 와 같이 언어 뿐만 아니라 국가에 따른 분류 파일도 추가로 설정할 수 있습니다.
이를 쉽게 관리하기 위해 IDE 에서 기능을 제공하기도 하는데, IntelliJ 의 경우 messages.properties 와 같은 파일을 다음과 같이 인식하여 관리를 할 수 있게 해줍니다.
위와 같이 Project 화면에서 별도로 표시가 됩니다. 그리고 파일을 열어보면 아래와 같이 key 와 각 파일의 내용을 한 번에 비교해볼 수도 있습니다
하단의 Resource Bundle 탭을 선택하면(기존 정보 보호를 위해 가렸습니다) 왼쪽에 properties 파일 내의 key 가 보이고, 각 언어별로 value 들이 나열되는 형식으로 관리를 할 수 있습니다.
실제로는 일일이 이렇게 관리하는 것보다는 Google Drive 에서 Google 스프레드시트를 이용해 열 별로 언어를 지정하고 각 언어에 맞는 변역 문구를 번역하는 분들과 공유하면서 작업하고, "웹에 게시" 하는 기능을 이용해서 프로그램에서 자동으로 messages.properties 파일을 생성하는 형태로 만드는 것이 더 효율적이라고 생각합니다.
아래 코드는 Apache Commons 의 commons-csv 을 이용해서 실제 파일을 만들어내는 예제입니다.
import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import org.springframework.util.StringUtils; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.file.OpenOption; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.HashSet; public class ResourceBundleUtil { /** * 번역 시트 주소 (CSV) * 아래 주소는 실제 주소가 아닌 예제입니다. */ private static final String SHEET_URL = "https://docs.google.com/spreadsheets/...&output=csv"; public static void main(String[] args) throws Exception { String modulePath = ""; // Resource Bundle 파일 열기 Charset charset = Charset.forName("utf-8"); HashSetopenOptionSet = new HashSet<>(); openOptionSet.add(StandardOpenOption.CREATE); openOptionSet.add(StandardOpenOption.TRUNCATE_EXISTING); openOptionSet.add(StandardOpenOption.WRITE); // 원격으로 Sheet 접속 URL url = new URL(ResourceBundleUtil.SHEET_URL); // CSV Parse, 각 언어별 Resource Bundle 파일 열기 try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); CSVParser parse = CSVFormat .EXCEL .withAllowMissingColumnNames() .withFirstRecordAsHeader() .withTrim() .parse(reader); FileChannel koChannel = FileChannel.open(Paths.get(modulePath + "src/main/resources/messages_ko.properties"), openOptionSet); FileChannel koKRChannel = FileChannel.open(Paths.get(modulePath + "src/main/resources/messages_ko_KR.properties"), openOptionSet); FileChannel defaultChannel = FileChannel.open(Paths.get(modulePath + "src/main/resources/messages.properties"), openOptionSet)) { // 파일에 데이터 쓰기 for (CSVRecord record : parse) { if (!StringUtils.isEmpty(record.get(0))) { defaultChannel.write(charset.encode(record.get(0) + "=" + record.get(1) + "\n")); koChannel.write(charset.encode(record.get(0) + "=" + record.get(1) + "\n")); koKRChannel.write(charset.encode(record.get(0) + "=" + record.get(1) + "\n")); } } } } }
2019/01/28 - [Programming/Spring Boot 시작하기] - Spring Boot 에서 messages.properties 을 이용한 다국어 처리 (2)
'Programming > Spring Boot 시작하기' 카테고리의 다른 글
Spring Boot 에서 messages.properties 을 이용한 다국어 처리 (3) (0) | 2019.01.29 |
---|---|
Spring Boot 에서 messages.properties 을 이용한 다국어 처리 (2) (0) | 2019.01.28 |
Spring Boot 실행과 종료 시 특정 동작을 실행하도록 해보기 (2) | 2019.01.25 |
외부 resource 을 서비스하기 (3) | 2019.01.24 |
RestTemplate 설정 변경하기 (0) | 2019.01.23 |
- Total
- Today
- Yesterday
- 워드프레스
- proxmox
- java config
- 시니어 프로그래머
- Spring MVC
- Nas
- OracleJDK
- couchbase
- boot
- RestTemplate
- 클라우드플레어
- NoSQL
- docker
- Redmine
- 엘지
- SI
- 도입기
- 외장 WAS
- git
- Spring
- KDE
- messages.properties
- 페이징
- jooq
- manjaro
- Spring Boot
- paging
- 내장 WAS
- 프로젝트 규모
- Phabricator
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |