Java에서 GNU gettext를 이용하여 번역파일을 추출하고 사용하는 법.
우선 아래와 같은 Test.java 소스파일이 있다고 가정.
사실 이게 번역을 테스트할 최종 버전 소스코드임.
import java.util.*;
public class Test {
static public void main(String[] args) {
Locale locale = new Locale("ja", "JP");
ResourceBundle stats = ResourceBundle.getBundle("Messages", locale);
System.out.println(stats.getString("백충덕_테스트"));
}
}
이 파일에서 번역이 필요한 부분은 "백충덕_테스트" 부분임.
xgettext를 이용해서 이걸 추출해서 우선 po 파일을 생성해야 함.
// 추출
xgettext Test.java --from-code=utf-8 -L Java
// 이 명령어를 실행하면 Test.java에서 번역이 필요한 부분을 추출한 messages.po 파일이 생성됨
// 옵션이 많이 있으므로 xgettext --help를 통해 확인
messages.po 파일은 대략 아래와 같은 모습.
최소한의 옵션만 지정해서 헤더부분은 다 기본값.
맨 아랫부분에 보면 Test.java 파일 7라인에서 "백충덕_테스트"를 추출한 결과를 확인 가능.
msgid가 번역 대상 문자열이고 msgstr은 번역한 문자열이라고 보면 됨.
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-04 11:32+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: Test.java:7
msgid "백충덕_테스트"
msgstr ""
일본어로 번역한다고 가정.
msgstr 부분에 白忠德_テスト라고 입력하자.
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-04 11:32+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: Test.java:7
msgid "백충덕_테스트"
msgstr "白忠德_テスト"
이제 이걸 msgfmt를 이용해 class 파일로 변환해야 함.
// 먼저 $JAVAC 환경변수가 세팅되어 있어야 함
export JAVAC=$JAVA_HOME/bin/javac
// msgfmt로 class 파일 변환
msgfmt --java2 -d resources -l ja_JP messages.po
여기까지 하면 일본어 번역이 완료된 Messages_ja_JP.class 파일이 생성되어 있음.
이제 최초의 Test.java 파일을 실행해서 확인 가능.
// class 컴파일
$JAVAC Test.java
// 실행
$JAVA_HOME/bin/java Test
// 일본어로 번역된 문자열 출력 확인 가능
白忠德_テスト
[참조]
https://www.gnu.org/software/gettext/
'Java' 카테고리의 다른 글
[Java] Jackson ObjectMapper로 json 변환시 object {} 로 지정한 값이 비어있는 array [] 로 넘어올 때 MismatchedInputException 발생시 (2) | 2022.09.22 |
---|