Hello tr() 예제
작은 Hello World 프로그램을 라틴어로 번역합니다.
스크린샷은 영어 버전을 보여줍니다.
Qt 애플리케이션 번역에 대한 자세한 내용은 Qt Linguist 매뉴얼을 참조하세요.
한 줄씩 살펴보기
#include <QTranslator>
이 줄에는 QTranslator 클래스의 정의가 포함되어 있습니다. 이 클래스의 객체는 사용자가 볼 수 있는 텍스트에 대한 번역을 제공합니다.
QTranslator translator;
부모 없이 QTranslator 객체를 생성합니다.
Q_UNUSED(translator.load("hellotr_la"));
프로그램에 사용된 소스 텍스트의 라틴어 번역이 포함된 hellotr_la.qm
( .qm
파일 확장자는 암시적임)이라는 파일을 로드하려고 시도합니다. 파일을 찾을 수 없는 경우 오류가 발생하지 않습니다. 이 예제는 데스크톱 플랫폼에서 가장 잘 작동합니다. Android 및 iOS와 같은 플랫폼에서는 .qm 파일이 앱 번들의 일부여야 합니다. 일반적으로 .qm 파일을 Qt 리소스에 번들로 묶습니다.
app.installTranslator(&translator);
hellotr_la.qm
의 번역을 프로그램에서 사용하는 번역 풀에 추가합니다.
QPushButton hello(QPushButton::tr("Hello world!"));
"Hello world!"를 표시하는 푸시 버튼을 만듭니다. hellotr_la.qm
이 발견되어 "Hello world!"에 대한 번역이 포함되어 있으면 번역이 표시되고, 그렇지 않으면 소스 텍스트가 표시됩니다.
QObject 을 상속하는 모든 클래스에는 tr()
함수가 있습니다. QObject 클래스의 멤버 함수 내부에는 QPushButton::tr("Hello world!")
또는 QObject::tr("Hello world!")
대신 tr("Hello world!")
을 작성하면 됩니다.
영어로 애플리케이션 실행하기
번역 파일 hellotr_la.qm
을 만들지 않았으므로 애플리케이션을 실행하면 소스 텍스트가 표시됩니다:
라틴어 메시지 파일 만들기
첫 번째 단계는 프로젝트의 모든 소스 파일을 나열하는 프로젝트 파일을 만드는 것입니다.
qmake를 사용하는 경우 hellotr.pro
의 관련 줄은 다음과 같습니다:
SOURCES = main.cpp TRANSLATIONS = hellotr_la.ts
TRANSLATIONS
유지 관리할 메시지 파일을 지정합니다. 이 예에서는 라틴어라는 한 세트의 번역만 유지 관리합니다.
CMake를 사용하는 경우 CMakeLists.txt
의 관련 줄은 다음과 같습니다:
find_package(Qt6 REQUIRED COMPONENTS LinguistTools) qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES la) qt6_add_translations(hellotr QM_FILES_OUTPUT_VARIABLE qm_files) install(FILES ${qm_files} DESTINATION ${INSTALL_EXAMPLEDIR})
파일 확장자는 .qm
이 아니라 .ts
입니다. .ts
번역 소스 형식은 애플리케이션 개발 중에 사용하도록 설계되었습니다. 프로그래머 또는 릴리스 관리자는 lupdate
프로그램을 실행하여 소스 코드에서 추출한 소스 텍스트로 TS 파일을 생성하고 업데이트합니다. 번역가는 TS 파일을 읽고 업데이트하며 Qt Linguist 을 사용하여 번역을 추가하고 편집합니다.
TS 형식은 사람이 읽을 수 있는 XML로 직접 이메일로 보낼 수 있으며 버전 관리가 쉽습니다. 이 파일을 수동으로 편집하는 경우 XML의 기본 인코딩은 Latin1(ISO 8859-1)이 아닌 UTF-8이라는 점에 유의하세요. 'ø'(슬래시가 있는 노르웨이어 o)와 같은 Latin1 문자를 입력하는 한 가지 방법은 XML 엔티티를 사용하는 것입니다: "ø". 이 방법은 모든 유니코드 4.0 문자에 사용할 수 있습니다.
번역이 완료되면 lrelease
프로그램을 사용하여 TS 파일을 QM Qt 메시지 파일 형식으로 변환합니다. QM 형식은 매우 빠른 조회 성능을 제공하도록 설계된 컴팩트한 바이너리 형식입니다. lupdate
와 lrelease
는 프로젝트의 모든 소스 파일과 헤더 파일(프로젝트 파일의 HEADERS 및 SOURCES 줄에 지정된 대로)을 읽고 tr()
함수 호출에 표시되는 문자열을 추출합니다.
lupdate
는 메시지 파일(이 경우hellotr_la.ts
)을 만들고 업데이트하여 소스 코드와 동기화 상태를 유지하는 데 사용됩니다. lupdate
은 정보를 제거하지 않으므로 언제든지 lupdate
을 실행해도 안전합니다.
지금 바로 lupdate
을 실행해 보세요.
qmake를 사용하는 경우 lupdate
을 수동으로 실행해야 합니다:
lupdate -verbose hellotr.pro
( -verbose
옵션은 lupdate
에 수행 중인 작업을 설명하는 메시지를 표시하도록 지시합니다.)
CMake를 사용하는 경우 update_translations
대상을 빌드하여 lupdate
을 실행합니다:
cmake --build . --target update_translations
이제 소스 디렉터리에 hellotr_la.ts
파일이 있어야 합니다:
<!DOCTYPE TS><TS> <context> <name>QPushButton</name> <message> <source>Hello world!</source> <translation type="unfinished"></translation> </message> </context> </TS>
이 파일은 도구(lupdate
, Qt Linguist, lrelease
).
를 사용하여 라틴어로 번역하기 Qt Linguist
를 사용하여 Qt Linguist 를 사용하여 번역을 제공하지만, XML 또는 일반 텍스트 편집기를 사용하여 TS 파일에 번역을 입력할 수도 있습니다.
시작하려면 Qt Linguist를 입력합니다.
linguist hellotr_la.ts
이제 왼쪽 위 창에 "QPushButton"이라는 텍스트가 표시됩니다. 이를 두 번 클릭한 다음 "Hello world!"를 클릭하고 Translation 창(창 오른쪽 가운데)에 "Orbis, te saluto!"를 입력합니다. 느낌표를 잊지 마세요!
Done 체크상자를 클릭하고 메뉴 모음에서 File|Save 을 선택합니다. TS 파일에 더 이상
<translation type='unfinished'></translation>
대신
<translation>Orbis, te saluto!</translation>
라틴어로 애플리케이션 실행하기
애플리케이션이 라틴어로 실행되는 것을 확인하려면 TS 파일에서 QM 파일을 생성해야 합니다. QM 파일 생성은 다음 중 하나에서 수행할 수 있습니다. Qt Linguist (단일 TS 파일의 경우) 또는 프로젝트 파일에 나열된 각 TS 파일에 대해 하나의 QM 파일을 생성하는 명령줄 프로그램 lrelease
을 사용하여 생성할 수 있습니다. hellotr_la.ts
에서 File|Release 을 선택하여 hellotr_la.qm
을 생성합니다. Qt Linguist을 선택하고 파일 저장 대화 상자가 나타나면 Save 을 누르면 됩니다. 이제 hellotr
프로그램을 다시 실행합니다. 이번에는 버튼의 레이블이 "Orbis, te saluto!"로 바뀝니다.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.