화살표 패드 예시
Qt Linguist 의 컨텍스트 개념 이해 및 두 개 이상의 언어 사용.

이 예제에서는 프랑스어와 네덜란드어, 두 가지 번역을 사용하겠지만, 애플리케이션에서 사용할 수 있는 번역의 수에는 실질적인 제한이 없습니다.
qmake를 사용할 때, ` arrowpad.pro ` 파일의 관련 줄은 다음과 같습니다:
HEADERS = arrowpad.h \
mainwindow.h
SOURCES = arrowpad.cpp \
main.cpp \
mainwindow.cpp
TRANSLATIONS = arrowpad_fr.ts \
arrowpad_nl.tsCMake를 사용할 때, CMakeLists.txt 파일의 관련 내용은 다음과 같습니다:
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES fr nl)
qt6_add_translations(arrowpad
QM_FILES_OUTPUT_VARIABLE qm_files)
install(FILES ${qm_files} DESTINATION ${INSTALL_EXAMPLEDIR})lupdate 를 실행하십시오. 그러면 arrowpad_fr.ts 와 arrowpad_nl.ts 라는 두 개의 동일한 메시지 파일이 생성됩니다. 이 파일들에는 tr() 호출을 통해 번역 대상으로 표시된 모든 원문과 해당 문맥이 포함됩니다.
qmake를 사용할 경우, lupdate 는 수동으로 실행해야 합니다:
lupdate arrowpad.proCMake를 사용할 때는 update_translations 타깃을 빌드하여 lupdate 를 실행하십시오:
cmake --build . --target update_translationsQt 애플리케이션 번역에 대한 자세한 내용은 Qt Linguist 매뉴얼을 참조하십시오.
줄별 단계별 안내
arrowpad.h 에서 우리는 QWidget 의 서브클래스인 ArrowPad 서브클래스를 정의합니다. 위 스크린샷에서 네 개의 버튼이 있는 중앙 위젯은 ArrowPad 입니다.
class ArrowPad : public QWidget
{
Q_OBJECTlupdate 를 실행하면 소스 텍스트를 추출할 뿐만 아니라 이를 컨텍스트별로 그룹화합니다. 컨텍스트란 소스 텍스트가 나타나는 클래스의 이름을 의미합니다. 따라서 이 예제에서 "ArrowPad"는 컨텍스트이며, ArrowPad 클래스 내 텍스트들의 컨텍스트입니다. Q_OBJECT 매크로는 ArrowPad 에서 다음과 같이 tr(x) 를 정의합니다:
qApp->translate("ArrowPad", x)각 원본 텍스트가 어떤 클래스에 속하는지 알면 Qt Linguist 논리적으로 관련된 텍스트들을 한데 묶을 수 있습니다. 예를 들어, 대화 상자에 있는 모든 텍스트는 해당 대화 상자 클래스 이름을 컨텍스트로 가지며 함께 표시됩니다. 텍스트가 나타나는 컨텍스트는 번역 방식에 영향을 미칠 수 있으므로, 이는 번역가에게 유용한 정보를 제공합니다. 일부 번역의 경우 키보드 단축키를 변경해야 할 수 있으며, 특정 컨텍스트(클래스)에 속한 모든 원문을 한데 묶어두면 번역가가 충돌을 일으키지 않고 단축키 변경 작업을 더 쉽게 수행할 수 있습니다.
arrowpad.cpp 에서는 ` ArrowPad ` 클래스를 구현합니다.
upButton = new QPushButton(tr("&Up"));
downButton = new QPushButton(tr("&Down"));
leftButton = new QPushButton(tr("&Left"));
rightButton = new QPushButton(tr("&Right"));라벨은 사용자에게 표시되는 텍스트이므로, 각 버튼의 라벨에 대해 ` ArrowPad::tr() `를 호출합니다.

class MainWindow : public QMainWindow
{
Q_OBJECT위의 스크린샷에서 전체 창은 하나의 ` MainWindow`입니다. 이는 ` mainwindow.h ` 헤더 파일에서 정의됩니다. 여기에서도 ` Q_OBJECT`를 사용하여 ` MainWindow `가 Qt Linguist.
arrowPad = new ArrowPad;MainWindow( mainwindow.cpp)의 구현에서, ArrowPad 클래스의 인스턴스를 생성합니다.
exitAct = new QAction(tr("E&xit"), this);
exitAct->setShortcut(QKeySequence(tr("Ctrl+Q", "Quit")));
connect(exitAct, &QAction::triggered, this, &MainWindow::close);또한 MainWindow::tr() 를 두 번 호출하는데, 한 번은 액션용이고 다른 한 번은 단축키용입니다.
다른 언어에서 서로 다른 키를 지원하기 위해 tr() 를 사용하는 점에 유의하십시오. 영어에서 'Quit'의 경우 "Ctrl+Q"가 좋은 선택이지만, 네덜란드어 번역가는 "Ctrl+A"(Afsluiten)를, 독일어 번역가는 "Strg+E"(Beenden)를 사용하고 싶어 할 수 있습니다. tr() 를 사용하여 Ctrl 키 단축키를 구현할 때는 두 개의 인자를 사용하는 형식을 취해야 하며, 두 번째 인자는 해당 단축키가 수행하는 기능을 설명해야 합니다.
main() 함수는 평소와 같이 main.cpp 에 정의되어 있습니다.
QTranslator translator;
if (translator.load(locale, u"arrowpad"_s, u"_"_s))
app.installTranslator(&translator);현재 로케일에 따라 사용할 번역본을 선택합니다. 예를 들어, LANG 환경 변수를 설정하여 QLocale::system()의 동작을 제어할 수 있습니다. .qm 메시지 파일(및 TS 파일)에 로케일을 포함하는 명명 규칙을 사용하면 로케일에 따라 번역 파일을 쉽게 선택할 수 있습니다.
선택한 로케일에 해당하는 QM 메시지 파일이 없는 경우, 원본 소스 텍스트가 사용되며 오류는 발생하지 않습니다.
프랑스어 및 네덜란드어로 번역하기
먼저 예제 애플리케이션을 프랑스어로 번역해 보겠습니다. Qt Linguistarrowpad_fr.ts 으로 시작하십시오. 7개의 원본 텍스트("&Up", "&Left" 등)가 두 개의 컨텍스트("ArrowPad"와 "MainWindow")로 그룹화되어 표시되어야 합니다.
이제 다음 번역 내용을 입력하십시오:
ArrowPad- &Up - &Haut
- &Left - &Gauche
- &Right - &Droite
- &Down - &Bas
MainWindow- E&xit - &종료
- Ctrl+Q - Ctrl+Q
- &파일 - &Fichier
Done & Next 버튼을 누르면 번역이 완료된 것으로 표시되고 다음 원문으로 넘어갑니다. 각 번역을 입력한 후 바로 단축키(번역 메뉴 바 참조)를 사용하는 것이 더 빠릅니다.
파일을 저장하고, arrowpad_nl.ts 를 사용하여 네덜란드어 번역도 같은 방식으로 진행하십시오:
ArrowPad- &Up - &Omhoog
- &Left - &Links
- &Right - &Rechts
- &Down - Omlaa&g
MainWindow- E&xit - &종료
- Ctrl+Q - Ctrl+A
- 파일 - &Bestand
tt1_fr.ts 및 tt1_nl.ts 번역 소스 파일을 QM 파일로 변환해야 합니다. Qt LinguistFile|Release 를 사용할 수도 있지만, 명령줄 도구인 lrelease 를 사용하면 애플리케이션에 필요한 모든 QM 파일이 생성되므로, Qt Linguist.
CMake를 사용할 때
lrelease arrowpad.proCMake를 사용할 때 다음을 입력하세요.
cmake --build . --target release_translations그러면 arrowpad_fr.qm 와 arrowpad_nl.qm 파일이 모두 생성됩니다.
arrowpad_fr.qm 을 사용하려면 시스템 언어를 프랑스어로 변경하십시오. Unix에서는 다음 두 명령 중 하나를 실행하면 됩니다.
export LANG=fr
setenv LANG frWindows나 Mac에서는 디스플레이 언어를 프랑스어로 설정하십시오.
프로그램을 실행하면 이제 프랑스어 버전이 표시되어야 합니다:

네덜란드어에서도 동일한 방법을 시도해 보세요(유닉스에서는 LANG=nl 을 사용하세요). 이제 네덜란드어 버전이 표시되어야 합니다:

연습 문제
번역 중 하나를 Qt Linguist '미완료'로 표시하십시오(즉, "완료" 확인란의 선택을 해제하십시오). lupdate 를 실행한 다음, lrelease 를 실행하고, 마지막으로 예제 프로그램을 실행해 보십시오. 이 변경으로 인해 어떤 결과가 나타났습니까?
LANG=fr_CA (프랑스어 캐나다)를 설정하고 예제 프로그램을 다시 실행하십시오. 결과가 LANG=fr 와 동일한 이유를 설명하십시오.
네덜란드어 번역에서 &Bestand 와 &Boven 간의 충돌을 제거하기 위해 단축키 중 하나를 변경해 보세요.
© 2026 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.