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/

 

Posted by bloodguy
,