텍스트 ID 기반 번역
텍스트 ID 번역 메커니즘은 국제화 및 로컬라이제이션을 위한 산업적 강점 시스템입니다. 애플리케이션의 각 텍스트에는 텍스트 대신 소스 코드에서 사용하는 고유 식별자(텍스트 ID)가 있습니다. 따라서 많은 수의 번역된 텍스트를 훨씬 쉽게 관리할 수 있습니다.
참고: 하나의 애플리케이션에서 일반 텍스트 기반 또는 텍스트 ID 기반 함수만 사용해야 합니다. 두 가지를 혼용하면 번역할 텍스트 세트가 불완전해집니다.
텍스트 ID로 국제화하기
일반 텍스트 대신 텍스트 ID를 사용하는 경우 애플리케이션을 국제화하는 일반적인 방법은 동일하지만 세부 사항은 약간 다릅니다:
- 텍스트 ID 기반 번역 시스템의 함수와 매크로는 일반 텍스트 시스템과 다릅니다. qsTr() 대신
qsTrId()
함수를, QT_TR_NOOP() 대신QT_TRID_NOOP()
매크로를, QT_TR_N_NOOP() 대신QT_TRID_N_NOOP()
매크로를 사용합니다.) - 일반 텍스트 문자열 대신 텍스트 ID를 사용자 인터페이스 문자열로 사용합니다. 예를 들어
qsTrId("id-back-not-front")
- 텍스트 ID로 컨텍스트 매개변수를 지정할 수 없으므로 철자가 같지만 의미가 다른 단어는 별도의 텍스트 ID가 필요합니다. 예를 들어
qsTrId("id-back-backstep")
은 백스텝 Back과id-back-not-front
Back을 구분합니다. - 개발 빌드용 사용자 인터페이스에 표시되는 엔지니어링 영어 텍스트는
//%
주석으로 표시됩니다. 이 코멘트를 포함하지 않으면 사용자 인터페이스에 텍스트 ID가 표시됩니다. 이는 매개 변수가 있는 텍스트가 있을 때 특히 중요합니다.//%
댓글은 문자열에 매개변수 표시기를 포함해야 합니다. 예를 들어//% "Number of files: %1"
- 번역기에 추가 정보를 제공하는
//:
주석은 일반 텍스트 시스템에서는 선택 사항입니다. 그러나 텍스트 ID 기반 시스템에서는 이 추가 정보가 없으면 텍스트 ID만 있고 번역가가 추가 컨텍스트 없이는 이를 통해 합리적인 번역을 하지 못할 수 있으므로 이 추가 정보는 필수입니다. 설명이 긴 텍스트 ID를 사용하고 코멘트를 사용하지 않을 수도 있지만, 코멘트가 있는 것이 더 이해하기 쉬운 경우가 많습니다.
아래의 나란한 코드 스니펫은 텍스트 ID 기반 번역과 일반 텍스트 기반 번역을 비교한 것입니다:
텍스트 ID 기반 | 일반 텍스트 기반 |
---|---|
Text { id: backTxt; //: The back of the object, not the front //% "Back" //~ Context Not related to back-stepping text: qsTrId("id-back-not-front"); } | Text { id: backTxt; //: The back of the object, not the front //~ Context Not related to back-stepping text: qsTr("Back","Not front") } |
텍스트 ID를 사용한 로컬라이제이션
텍스트 ID를 사용한 로컬라이제이션은 일반 텍스트와 거의 동일한 프로세스를 따릅니다.
업데이트 도구를 사용하여 번역을 추가할 TS 파일을 생성합니다. 번역 파일의 소스 값은 일반 텍스트가 아닌 텍스트 ID가 되므로 번역의 정확성을 보장하기 위해 설명적인 텍스트 ID나 좋은 추가 주석 또는 둘 다 필요합니다.
위의 텍스트 ID 기반 사용자 인터페이스 텍스트 예시에서는 .ts 파일에 다음과 같은 콘텐츠가 생성됩니다:
<message id="id-back-not-front"> <source>Back</source> <extracomment>The back of the object, not the front</extracomment> <translation type="unfinished"></translation> <extra-Context>Not related to back-stepping</extra-Context> </message>
lrelease를 사용할 때는 번역된 텍스트의 키가 일반 텍스트가 아닌 텍스트 ID를 기반으로 하도록 지정해야 합니다. qsTr()
을 사용하여 코드에서 문자열을 번역 가능한 것으로 표시하면 id
속성이 설정되지 않고 lrelease
은 이를 무시합니다.
그러나 특정 텍스트에 사용할 수 있는 번역이 없는 경우(일반적으로 개발 후반부까지) 사용자 인터페이스에 적절한 텍스트가 아닌 텍스트 ID가 표시됩니다. 애플리케이션을 테스트에 더 유용하게 사용하기 위해 lrelease
엔지니어링 영어 소스 텍스트( //%
주석의)를 번역 텍스트로 사용하고 느낌표(!)와 같은 표시를 하면 아직 번역되지 않은 텍스트를 볼 수 있도록 할 수 있습니다.
CMake 구성
CMake로 빌드할 때는 .ts 파일에 접두사 qml_
를 사용합니다. 예를 들어, qml_en.ts
. CMakeLists.txt 파일에서 *.ts 파일을 TS_FILES
값으로 나열하고, 프로젝트의 main.qml 파일의 URI에 RESOURCE_PREFIX 값을 /i18n으로 설정한 다음 LRELEASE_OPTIONS
값을 -idbased
으로 설정하는 qt_add_translations 함수를 추가합니다:
qt_add_translations(${CMAKE_PROJECT_NAME} TS_FILES i18n/qml_de_DE.ts i18n/qml_en_US.ts RESOURCE_PREFIX Main/i18n LRELEASE_OPTIONS -idbased )
qmake를 사용한 고급 사용
많은 로캘을 대상으로 하는 프로젝트의 경우 .pro 파일에서 번역 정보를 제거하고 대신 별도의 스크립트로 번역을 관리할 수 있습니다. 이 스크립트는 원하는 각 대상에 대해 lrelease
및 lupdate
을 호출할 수 있습니다.
업데이트는 다음과 같이 스크립트로 작성할 수 있습니다:
lupdate -recursive <project-dir> -ts <project-dir>/i18n/myapp-text_en_GB.ts lupdate -recursive <project-dir> -ts <project-dir>/i18n/myapp-text_en_US.ts ...
최종 .qm 파일 생성은 다음과 같이 스크립팅할 수 있습니다:
lrelease -idbased <project-dir>/i18n/myapp-text_en_GB.ts lrelease -idbased <project-dir>/i18n/myapp-text_en_US.ts ...
© 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.