Qt는 언어를 바꾸기위해 소스코드를 바꾸지 않아도 되도록 다국어 지원을 한다.
. Qt는 data를 다룰때 unicode string 을 사용한다. (QString QStringlist QChar)
. Qt는 런타임에 어플리케이션 스트링을 자동적으로 읽어올 수 있는 기반시스템을 제공한다.
. 또한 Qt Extended는 어플리케이션을 처음 시작할 때 언어 관련 파일을 자동적으로 로드한다.
다국어 지원을 위해서 tr() 함수를 사용한다.
예) QString str(tr("Hello"));
. QString tr(QString const&) 함수는 모든 클래스에 대해 moc에 의해 번역이 수행된다.
. 추가적으로 comment 와 context 를 사용할 수 있다.
ts 파일을 context(name, comment, extracomment, message) 등으로 구성되는데
- context는 string scope 을 정의하는 기능(XML의 context로 생각하면 됨)
생략 시 클래스 이름(Q_OBJECT 매크로가 정의된 QObject 의 class name)
두개의 문장이나 구를 구분하는데 사용됨
즉, 같은 문장이라도 context가 다르면 2개를 번역을 해주어야 함.
- comment는 string이 뜻이 애매모호할 때 부가적인 설명을 붙이는 기능이다.
QString str(tr("Hello", "this is comment"));
- message가 실제 데이터 내용인데 source(원본) 과 translation으로 구성된다.
.ts 파일의 내부를 보는데 위 내용을 알면 도움이 될것이다.
ts : transltion source
qm : qt message
Qt Extended 는 번역을 위해 몇가지 툴을 제공하는데 lupdate와 lrelease이다.
lupdate : 소스로 부터 tr 함수의 string 파일로 부터 .ts 파일을 만든다.
lrelease : 업데이트된 .ts 파일을 바이너리 파일인 .qm 파일로 만든다.
qm파일은 어플리케이션이 시작할 때 로딩되어 다국어를 읽을 수 있게 한다.
Qt Linguist : .ts 파일을 그래픽 적으로 편집할 수 있게 하는 툴이다.
번역 상태가 Unfinished (번역안됨), Obsolete(이미 사용되어지지 않음, 회색으로 표시)
Finished (번역 끝남, 화면에 녹색 체크표시) 3가지 상태가 존재한다.
Qt Extended 는 언어 파일 추출을 위해 두가지 make target를 제공한다.
make lupdate : 언어에 따른 ts 파일 생성
make lrelease : ts 파일을 qm 파일로 변환 하고 i18n/<lang>/<application name>.qm 으로 qm파일을 설치
변수에 tr을 사용할 때 QT_TR_NOOP 또는 QT_TRANSLATE_NOOP 매크로 사용
static const char* str[] = {
QT_TR_NOOP("String 1"),
QT_TR_NOOP("String 2"),
QT_TR_NOOP("String 3"),
QT_TR_NOOP("String 4"),
}
QT_TRANSLATE_NOOP는
QT_TRANSLATE_NOOP("Context", "String 1")
와 같이 context를 사용할 수 있다.
TS 파일 내부 예
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="ko_KR">
<defaultcodec></defaultcodec>
<context>
<name>English (U.S.)</name>
<message>
<location filename="../../src/server/main/tr13494.cpp" line="2"/>
<source>English (U.S.)</source>
<translation></translation>
</message>
</context>
<context>
<name>Korean</name>
<message>
<location filename="../../src/server/main/tr13494.cpp" line="1"/>
<source>Korean</source>
<translation>?쒓뎅??/translation>
</message>
</context>
</TS>
[출처] QT 다국어 지원 (Qt프로그래밍) |작성자 jsmak
'QT > Basics' 카테고리의 다른 글
Qt5 Windows 배포 정리 (0) | 2015.04.16 |
---|---|
QT) QMessageBox (0) | 2015.04.15 |
Include Path & Library Path 설정하기 (0) | 2015.04.13 |
Visual Studio 2013으로 Qt 사용하기 (0) | 2015.04.13 |
Qt5 VS2010으로 사용하기 [출처] Qt5 VS2010으로 사용하기 (0) | 2015.04.13 |