qt_add_translations
Qt Linguist.ts 파일을 .qm 파일로 업데이트하고 변환할 대상을 추가합니다.
이 명령은 Qt6
패키지의 LinguistTools
구성 요소에 정의되어 있습니다. 패키지를 로드합니다:
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
이 명령은 Qt 6.2에 도입되었습니다.
개요
Qt 6.7부터:
qt_add_translations([target] [TARGETS target1 [target2...]] [SOURCE_TARGETS target1 [target2...]] [TS_FILE_BASE name] [TS_FILE_DIR directory] [TS_FILES file1.ts [file2.ts ...]] [PLURALS_TS_FILE file.ts] [NO_GENERATE_PLURALS_TS_FILE] [RESOURCE_PREFIX prefix] [OUTPUT_TARGETS variable-name] [TS_FILES_OUTPUT_VARIABLE variable-name] # since 6.8 [QM_FILES_OUTPUT_VARIABLE variable-name] [SOURCES source1.cpp [sources2.cpp ...]] [INCLUDE_DIRECTORIES directory1 [directory2 ...]] [LUPDATE_TARGET target-name] [LUPDATE_OPTIONS ...] [LRELEASE_TARGET target-name] [LRELEASE_OPTIONS ...] [IMMEDIATE_CALL])
Qt 6.2부터 (더 이상 사용되지 않음):
qt_add_translations(target TS_FILES file1.ts [file2.ts ...] [RESOURCE_PREFIX prefix] [OUTPUT_TARGETS variable-name] [QM_FILES_OUTPUT_VARIABLE variable-name] [SOURCES source1.cpp [sources2.cpp ...]] [INCLUDE_DIRECTORIES directory1 [directory2 ...]] [LUPDATE_OPTIONS ...] [LRELEASE_OPTIONS ...])
버전 없는 명령이 비활성화되어 있으면 대신 qt6_add_translations()
을 사용하십시오. 이 명령과 동일한 인자 집합을 지원합니다.
경고: 대상 디렉터리 범위와 다른 디렉터리 범위에서 qt_add_translations
를 호출하려면 CMake 버전 3.18 이상이 필요합니다.
설명
Qt Linguist .ts
파일을 업데이트하고 .qm
파일로 변환하기 위한 대상을 만듭니다. 이 함수는 qt_add_lupdate와 qt_add_lrelease의 편리한 래퍼이며, 한 번의 호출로 두 함수의 가장 일반적인 사용법을 제공하는 것을 목표로 합니다.
TARGETS
매개변수는 런타임에 생성된 .qm
파일을 로드할 대상 목록을 지정합니다. 이러한 대상이 하나만 있는 경우 첫 번째 인수로 대상의 이름을 직접 전달할 수 있습니다.
SOURCE_TARGETS
매개변수는 번역 가능한 문자열이 포함된 소스를 포함하는 실행 파일 또는 라이브러리 대상 목록을 지정합니다. 이러한 대상의 소스에서 .ts
파일이 생성됩니다.
SOURCE_TARGETS
을 지정하지 않으면 PROJECT_SOURCE_DIR
의 디렉터리 범위 끝에서 qt_collect_translation_source_targets 를 호출하여 타깃을 자동으로 수집합니다. 이 기능은 CMake 3.19 이상이 필요합니다. 이 기능은 IMMEDIATE_CALL
인수를 사용하여 끌 수 있습니다.
이 함수는 lupdate
으로 모든 소스 파일을 스캔하고 .ts
파일을 생성 및 업데이트하는 update_translations
대상을 생성합니다.
이 함수는 .ts
파일에서 .qm
파일을 생성하는 release_translations
대상을 만듭니다. 이 타깃은 기본적으로 만들어집니다.
.ts
파일은 TS_FILES
인수를 사용하여 지정할 수 있지만 qt_add_translations
이 파일 경로를 자동으로 알아내도록 하는 것이 더 편리합니다. 자세한 내용은 .ts 파일 경로 자동 결정을 참조하세요.
소스 및 포함 디렉토리
SOURCES
을 사용하면 번역 가능한 문자열이 포함된 추가 소스 파일을 명시적으로 지정할 수 있습니다.
INCLUDE_DIRECTORIES
을 사용하여 해당 소스 파일의 포함 디렉터리를 명시적으로 지정할 수 있습니다.
.ts 파일 경로 자동 결정
qt_add_translations
입력으로 사용되는 .ts
파일의 경로는 QT_I18N_TRANSLATED_LANGUAGES가 설정된 경우 자동으로 결정될 수 있습니다. 이 변수는 qt_standard_project_setup으로 편리하게 설정할 수 있습니다.
일반적으로 다음 프로젝트 설정으로 충분합니다:
project(myproject) cmake_minimum_required(VERSION 3.19) find_package(Qt6 COMPONENTS Core LinguistTools) qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr) add_subdirectory(libs) add_subdirectory(apps) qt_add_translations(TARGETS myapp)
그러면 프로젝트의 소스 디렉터리에 myproject_de.ts
및 myproject_fr.ts
파일이 생성됩니다.
기본적으로 .ts
파일은 CMAKE_CURRENT_SOURCE_DIR
에 생성됩니다. TS_FILE_DIR
인수와 함께 다른 디렉터리를 전달하여 위치를 변경할 수 있습니다.
기본적으로 .ts
파일 이름은 PROJECT_NAME
에서 만들어집니다. TS_FILE_BASE
인수를 사용하여 다른 기본 이름을 지정할 수 있습니다.
참고: TS_FILE_DIR
및 TS_FILE_BASE
은 명시적으로 지정된 .ts
파일에는 적용되지 않습니다.
Qt 6.8부터는 TS_FILES_OUTPUT_VARIABLE
인수를 지정하여 자동으로 결정된 .ts
파일 경로를 변수에 저장할 수 있습니다.
복수형
QT_I18N_SOURCE_LANGUAGE는 소스 코드 문자열이 작성되는 언어를 지정합니다. 복수형을 올바르게 처리하려면 해당 언어에 대해 복수형에 대해 번역 가능한 문자열만 포함된 .ts
파일을 추가로 만드세요. 자세한 내용은 복수형 처리하기를 참조하세요.
PLURALS_TS_FILE
을 사용하여 소스 언어에 대한 .ts
파일을 지정할 수 있습니다. 이 파일에는 복수형만 포함됩니다.
NO_GENERATE_PLURALS_TS_FILE
옵션을 지정하지 않으면 복수형 전용 .ts
이 자동으로 생성됩니다.
예를 들어
project(myapp) qt_standard_project_setup( I18N_SOURCE_LANGUAGE en # optional - this is the default I18N_TRANSLATED_LANGUAGES de ) qt_add_executable(myapp ...) ... qt_add_translations(myapp)
은 전체 번역 파일 myapp_de.ts
과 복수형 전용 파일 myapp_en.ts
을 생성합니다.
소스 언어의 전체 번역이 필요한 경우 QT_I18N_TRANSLATED_LANGUAGES에 추가합니다.
에 추가합니다,
project(myapp) qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES en de) qt_add_executable(myapp ...) ... qt_add_translations(myapp)
은 전체 번역 파일을 생성합니다.
myapp_en.ts
myapp_de.ts
옵션
LUPDATE_TARGET
옵션으로 업데이트를 호출하는 사용자 지정 대상의 이름을 지정할 수 있습니다. 마찬가지로 LRELEASE_TARGET
은 lrelease
으로 호출을 유도하는 사용자 지정 대상의 이름을 제어합니다.
LUPDATE_OPTIONS
및 LRELEASE_OPTIONS
을 사용하여 업데이트 및 릴리스에 대한 추가 옵션을 설정할 수 있습니다. 가능한 옵션은 업데이트 옵션 및 릴리스 옵션에서 찾을 수 있습니다.
예를 들어 ID 기반 번역을 사용하려면 LRELEASE_OPTIONS -idbased
을 qt_add_translations
으로 전달해야 합니다.
기본적으로 .qm
파일은 현재 빌드 디렉터리(CMAKE_CURRENT_BINARY_DIR
)에 배치됩니다. 이를 변경하려면 소스 .ts
파일의 속성으로 OUTPUT_LOCATION
을 설정하면 됩니다.
예를 들어 다음 코드를 사용하면 .qm
파일이 현재 빌드 디렉터리 아래의 translations
디렉터리에 생성됩니다.
set_source_files_properties(app_en.ts app_de.ts PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
생성된 .qm 파일을 리소스에 임베드하기
기본적으로 생성된 .qm
파일은 TARGETS
으로 전달된 타깃에 링크될 Qt 리소스에 포함됩니다. 리소스에 있는 파일은 리소스 접두사 "/i18n"
로 액세스할 수 있습니다.
리소스 접두사는 RESOURCE_PREFIX
로 설정할 수 있습니다.
정적 Qt 빌드에서 리소스 타깃이 생성되면 추가 타깃을 생성할 수 있습니다. qt_add_translations
에 OUTPUT_TARGETS <variable-name>
을 전달하여 이러한 타깃을 변수에 저장하도록 지시할 수 있습니다.
OUTPUT_TARGETS
을 사용하는 경우 IMMEDIATE_CALL
또는 SOURCE_TARGETS
을 지정해야 합니다.
자동 리소스 임베딩은 QM_FILES_OUTPUT_VARIABLE
옵션 뒤에 생성된 .qm
파일 목록을 저장할 변수 이름을 지정하여 해제할 수 있습니다.
qt_add_translations
Qt 6.7 이전
Qt 6.7 이전에는 이 명령이 첫 번째 인수로 하나의 대상만 허용했습니다. 이 대상은 번역 가능한 소스를 추출하고 .qm
파일을 포함하는 두 가지 용도로 모두 사용되었습니다.
Qt 6.7부터는 첫 번째 인수의 대상은 더 이상 소스 추출에 사용되지 않습니다.
예제
qt_add_translations
을 사용하여 frogger
대상에 독일어와 프랑스어 번역을 추가합니다:
cmake_minimum_required(VERSION 3.28) project(frogger) find_package(Qt6 COMPONENTS OpenGLWidgets) qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr) # The CMake files in the 'src' subdirectory create # the targets 'frogger_game' and 'frogger_level_editor'. add_subdirectory(src) # Add translations to the 'frogger_game' target. qt_add_translations(frogger_game)
그러면 소스 디렉터리에 .ts
파일 frogger_de.ts
과 frogger_fr.ts
이 생성됩니다. lupdate는 qt_collect_translation_source_targets의 규칙에 따라 번역할 수 있는 모든 대상의 소스 파일을 확인합니다.
.ts
파일에서 생성된 .qm
파일은 리소스 접두사 "i18n"
아래에 frogger_game
대상에 포함됩니다.
위의 예제에서 qt_add_translations
호출은 대략 다음과 같습니다:
qt_collect_translation_source_targets(i18n_targets) qt_add_lupdate( SOURCE_TARGETS ${i18n_targets} TS_FILES frogger_de.ts frogger_fr.ts) qt_add_lrelease( TS_FILES frogger_de.ts frogger_fr.ts QM_FILES_OUTPUT_VARIABLE qm_files) qt_add_resources(frogger_game "translations" PREFIX "/i18n" BASE "${CMAKE_CURRENT_BINARY_DIR}" FILES "${qm_files}" )
디렉터리, 대상 및 소스 제외하기
소스 대상의 자동 수집에서 대상과 디렉터리를 제외할 수 있습니다. 다음은 helper_lib
대상과 tests
디렉터리 아래의 모든 것을 제외합니다. 디렉터리 속성 QT_EXCLUDE_FROM_TRANSLATION 및 대상 속성 QT_EXCLUDE_FROM_TRANSLATION을 참조하세요.
# <project_root>/CMakeLists.txt qt_add_translations(frogger_game)
# <project_root>/src/helper_lib/CMakeLists.txt qt_add_library(helper_lib STATIC helpers.cpp) set_property(TARGET helper_lib PROPERTY QT_EXCLUDE_FROM_TRANSLATION ON)
# <project_root>/tests/CMakeLists.txt add_subdirectory(behavior_tests) add_subdirectory(physics_tests) set_directory_properties(PROPERTIES QT_EXCLUDE_FROM_TRANSLATION ON)
다음 예에서는 QT_EXCLUDE_SOURCES_FROM_TRANSLATION 대상 속성을 사용하여 frogger_game
대상의 일부인 소스 파일을 제외합니다:
qt_add_executable(frogger_game main.cpp 3rdparty/jumpsim.cpp 3rdparty/frogmath.cpp ) set_property(TARGET frogger_game PROPERTY QT_EXCLUDE_SOURCES_FROM_TRANSLATION "3rdparty/*" )
소스 대상의 명시적 지정
소스 대상의 자동 수집을 사용하지 않으려면 소스 대상을 명시적으로 지정할 수 있습니다:
qt_add_translations(frogger_game SOURCE_TARGETS frogger_game )
사용자 정의 리소스 접두사
이제 frogger_game
및 frogger_level_editor
에 .qm
파일을 임베드하고 사용자 정의 리소스 접두사를 설정해 보겠습니다.
qt_add_translations( TARGETS frogger_game frogger_level_editor RESOURCE_PREFIX "/translations" )
.qm 파일 설치하기
.qm
파일을 임베드하는 대신 일반 파일로 설치할 수 있습니다:
qt_add_translations( TARGETS frogger_game frogger_level_editor QM_FILES_OUTPUT_VARIABLE qm_files ) install(FILES ${qm_files} DESTINATION "translations")
.ts 파일 이름에 영향 주기
.ts
파일을 translations
디렉터리에 배치하고 기본 이름을 frogger_i18n
로 변경합니다:
qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr) ... qt_add_translations(frogger TS_FILE_BASE froggo TS_FILE_DIR translations )
그러면 다음과 같은 파일이 생성됩니다.
translations/froggo_de.ts
translations/froggo_fr.ts
경로를 명시적으로 지정할 수도 있습니다:
qt_add_translations(frogger TS_FILES translations/froggo_de.ts translations/froggo_fr.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.