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.tsmyproject_fr.ts 파일이 생성됩니다.

기본적으로 .ts 파일은 CMAKE_CURRENT_SOURCE_DIR 에 생성됩니다. TS_FILE_DIR 인수와 함께 다른 디렉터리를 전달하여 위치를 변경할 수 있습니다.

기본적으로 .ts 파일 이름은 PROJECT_NAME 에서 만들어집니다. TS_FILE_BASE 인수를 사용하여 다른 기본 이름을 지정할 수 있습니다.

참고: TS_FILE_DIRTS_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_TARGETlrelease 으로 호출을 유도하는 사용자 지정 대상의 이름을 제어합니다.

LUPDATE_OPTIONSLRELEASE_OPTIONS 을 사용하여 업데이트릴리스에 대한 추가 옵션을 설정할 수 있습니다. 가능한 옵션은 업데이트 옵션릴리스 옵션에서 찾을 수 있습니다.

예를 들어 ID 기반 번역을 사용하려면 LRELEASE_OPTIONS -idbasedqt_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_translationsOUTPUT_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.tsfrogger_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_gamefrogger_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.