Qt 다국어 처리 > QT 강좌/팁

본문 바로가기
사이트 내 전체검색

QT 강좌/팁

QT/Win32 Qt 다국어 처리

페이지 정보

작성자 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 2건 조회 13,203회 작성일 15-03-17 22:09

본문

이글은 제가 podovat.com의 blog 올린글(http://www.podovat.com/?p=396)에서 퍼온것입니다.

Qt의 다국어 처리는 소스코드내의 tr로 감싸진 문자열을 분석하여 ts파일로 자동 추출하고 이를 Qt 번역 유틸리티인 linguist를 이용해 번역한 다음 qm파일을 생성합니다.
최종 생성된 qm파일은 프로젝트 내에서 QTranslator 객체를 생성해서 QApplication객체에 설정하면 됩니다.이의 과정을 자세히 정리해 보면 다음과 같이 처리 합니다.


1. tr()로 감싸기
QPushButton* btn = new QPushButton(“Name”);
위의 코드에서 QPushButton에 “Name”과 같이 문자열을 입력하면 Qt에서는 다국어 처리를 하지 않는다고 판단을 합니다.
만약 “Name”이라는 글자를 한국어로 “이름”, 중국어로 해당되는 문자열로 번역하기 위해서는 다음과 같이 tr() 매크로로 감싸 주어야 합니다.

QPushButton* btn = new QPushButton(tr(“Name”));


팁1. 디자이너등 버튼등을 배치하는 경우, 위의 C++ 소스코드내에서 했던 tr의 과정을 Qt에 의해 내부적으로 자동처리 되기 때문에 소스코드 상에서 특별한 작업을 하지 않아도 됩니다.

팁2. 소스코드내에서의 문자열은 1개의 언어로만 쓰여져야 하고, 되도록이면 영문으로 작성하는것이 좋습니다. 이러한 이유는, 번역하기 위한 언어가 여러가지 일때의 혼란을 막기 위해서 입니다.


2. lupdate 처리
소스코드와 디자이너 등에서 입력한 다국어 문자열은 Qt의 유틸리티를 이용해서 ts파일로 생성해야 합니다.
ts파일은 각 소스코드내의 tr로 감싸진 문자열을 모두 자동으로 읽어 xml형식으로 저장을 합니다.
만약 작성중인 프로그램이 영어, 한국어, 일본어, 중국어를 지원해야 한다면 총 네개의 ts파일이 필요한데, 참고로 영어의 경우 앞서 1에서 말한것과 같이 소스코드내에 작성한 코드가 영어이기 때문에 필요가 없으므로, 한국어, 일본어, 중국어를 위한 ts파일 3개만 생성을 하면 됩니다.
이 세개의 ts파일을 생성하기 위해서 Qt는 여러방법을 제공하는데, 그중 하나는 프로젝트 파일에 명시적으로 기술을 하고 lupdate명령어를 통해서 자동처리 하는 것입니다.



Qt프로젝트 파일인 .pro파일에 다음과 같이 TRANSLATIONS항목에 생성할 ts파일을 기술 합니다.
TRANSLATIONS += lang_ko.ts lang_ja.ts lang_zh.ts


TRANSLATIONS파일에 기술된 세개의 파일명에 대한 특별한 규칙은 없지만, 보통 앞에 프로젝트와의 연관성 혹은 이것이 다국어 언어파일이란것을 알 수 있도록 한 내용을 쓰고(여기서는 lang이라고 붙였습니다.)
그 뒤에 실제 어떠한 언어를 위한것인지를 구분하기 위한 구분자를 추가합니다.
일반적으로 _(언더바) 뒤에 언어별 약자를 기록하게 되며 ISO639표준(http://ko.wikipedia.org/wiki/ISO_639) 에 있는 언어별 약자를 쓰는것이 좋습니다.(한국어:ko, 일본어:ja, 중국어:zh)


.pro파일에 생성할 ts파일을 기록한 후에, Qt에서 제공하는 유틸리티인 lupdate를 이용해서 다음과 같이 ts파일을 생성합니다.
$ lupdate test.pro
위와 같이 lupdate 명령어 뒤에 현재 프로젝트 파일을 지정하면, 프로젝트 파일내에 있는 TRANSLATIONS에 기술된 파일명을 소스코드내에서 tr()로 묶여진 문자열을 추출하여 파일을 생성합니다.


만약 QtCreator상에서 이를 수행하고 싶은 경우 Menu – Tools – External – Linguist – Update Translations(lupdate)를 선택하시면 동일하게 처리할 수 있습니다.


3. Linguist
2의 과정을 거쳐 생성된 ts파일은 이제 Linguist라는 유틸리티를 통해 번역을 할 수 있는데, Qt설치 디렉토리에 위치한 Linguist유틸리티를 실행합니다.

[img]http://www.podovat.com/wp-content/uploads/2015/03/031715_1251_Qt1.png[/img]
그림1) Linguist



Linguist 실행후 Menu – File – Open으로 2에서 생성된 ts파일을 하나를 열면 다음과 같은 창이 표시가 됩니다.



[img]http://www.podovat.com/wp-content/uploads/2015/03/031715_1251_Qt2.png[/img]
그림2) 언어파일 설정



위의 그림2 에서 대상언어를 언어, 국가/지역을 선택하면 다음과 같이 번역할 문자열이 표시가 됩니다.

[img]http://www.podovat.com/wp-content/uploads/2015/03/031715_1251_Qt3.png[/img]
그림3) ts파일을 불러온 Linguist(프로젝트의 보호를 위해 주요 화면은 가렸습니다.)


그림3과 같이 프로그램의 모든 언어를 불러왔다면, 다음의 그림과 같이 원본 텍스트를 참고하여, 대상언어로 번역을 합니다.

[img]http://www.podovat.com/wp-content/uploads/2015/03/031715_1251_Qt4.png[/img]
그림4)



그림4와 같이 영문 Map을 중국어로 변환을 완료하면 이 항목에 대해서 번역이 완료되었다는 것을 체크하기 위해 중국어 입력후 Ctrl+Enter를 누르거나, 메뉴 – 번역 – 완료 표시후 다음을 누르면 위의 그림4에서 Map옆의 물음표 표시가 체크로 변경됩니다.

[img]http://www.podovat.com/wp-content/uploads/2015/03/031715_1251_Qt5.png[/img]
그림5)



위의 과정을 계속반복하며, 번역을 마치면, 메뉴 – 파일 – 배포를 누릅니다.
배포는 번역된 ts파일을 qm으로 변환하는 과정인데, qm파일은 ts가 있는 디렉토리에 자동생성됩니다.
위의 예에서는 lang_cn.ts를 배포하였으므로, lang_cn.qm파일이 생성됩니다.


4. QTranslator적용하기
3의 최종과정을 통해 생성된 .qm 파일은 소스코드 내에서 QTranslator객체로 불러와서 QApplication객체에 설정해 주면 됩니다. 이의 코드는 다음과 같습니다.


QTranslator* translator = new QTranslator();
Translator->load(“lang_cn.qm”);
QApplication::installTranslator(translator);


위의 코드를 적용하는 순간 모든 언어는 중국어로 변경이 되기 때문에, 프로그램 최초 시작시 처리해 주면 됩니다.


팁1. 만약 프로그램 동작 중 언어가 변경되는 경우 이미 install된 translator객체를 삭제하고 새롭게 load합니다. 그후 이미 모든 UI에 대해서 setText 와 같이 언어 설정을 다시 적용해 줍니다.
(참고 URL: http://www.informit.com/articles/article.aspx?p=1405555&seqNum=3)


5. QML에서의 다국어 처리
QML의 경우 C++에서 했던 것과 거의 동일하게 처리가 되는데, 단지 소스코드상에 tr() 태그 대신에 QML의 경우 qsTr() 태그로 묶어 주면 동일하게 처리할 수 있습니다.


예)
Rectangle {
width: 640
height: 480

text {
text: qsTr(“Name”);
}
}


이상 위와같이 Qt의 다국어 처리에 대해 살펴보았습니다. 다음번 기회가 있을 때 본문 내용에 팁으로 소개된 언어 동적 변경에 대해서 기술해 보도록 하겠습니다.
감사합니다.

추천0

댓글목록

지루님의 댓글

no_profile 지루 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

감사합니다 저도 요즘 언어작업 하는데 그냥 하려니 힘드네요 ㄱ-; 혹시 다국어 지원 가능한 '무료' 폰트 구하는 곳 알 수 있을까요? 지금 쓰는 폰트가 중국어 간체에선 잘리네요;

Total 198건 1 페이지
QT 강좌/팁 목록
번호 제목 글쓴이 조회 추천 날짜
198 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3886 0 09-10
197 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5451 0 12-03
196 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6847 1 03-07
195 QT/Embedded no_profile 요원009 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11228 0 11-13
194 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6413 0 05-18
193 QT/Embedded no_profile 잉농 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6172 0 05-14
192 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6550 0 04-01
191 QT/Embedded no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 21872 1 03-31
열람중 QT/Win32 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13204 0 03-17
189 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5844 0 02-13
188 QT/Win32 no_profile 인라이너 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5763 1 02-12
187 QT/Embedded no_profile 김아무개 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16068 0 11-12
186 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5824 0 11-11
185 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5884 0 11-11
184 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10509 0 10-22
183 QT/Win32
Qt와 C++11 댓글+ 2
no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10844 1 10-12
182 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10470 0 10-09
181 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7525 0 10-02
180 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8610 0 10-01
179 QT/X11 no_profile 별님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5411 0 09-25
178 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6047 0 09-16
177 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7522 0 09-03
176 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7449 0 09-02
175 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7934 2 09-02
174 QT/X11 no_profile 나무나무나무 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8355 0 07-25
173 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6751 2 07-11
172 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9357 2 07-09
171 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6558 2 07-08
170 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13029 1 07-07
169 QT/X11 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8218 0 07-02
게시물 검색

  • 게시물이 없습니다.

회원로그인

설문조사

새로운 홈페이지에 대한 평가

접속자집계

오늘
69
어제
497
최대
3,878
전체
4,081,909

Copyright © korone.net. All rights reserved.