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の便利なラッパーで、両方の関数の最も一般的な使用方法を 1 回の呼び出しで提供することを目的としています。
パラメータTARGETS
は、生成された.qm
ファイルを実行時にロードするターゲットのリストを指定します。そのようなターゲットが1つしかない場合は、第1引数にターゲット名を直接渡すことができる。
パラメータ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_I18N_TRANSLATED_LANGUAGES が設定されている場合、qt_add_translations
の入力として使用される.ts
ファイルのパスは自動的に決定されます。この変数は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
オプションで lupdate を呼び出すカスタム・ターゲットの名前を指定できます。同様に、LRELEASE_TARGET
は、lrelease
を呼び出すカスタム・ターゲットの名前を制御します。
LUPDATE_OPTIONS
LRELEASE_OPTIONS
lupdate オプションと lreleaseオプションで、lupdateと lreleaseの追加オプションを設定できます。
たとえば、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 ビルドでは、リソースターゲットが作成されると、さらにターゲットを作成することができます。OUTPUT_TARGETS <variable-name>
を渡すことで、これらのターゲットを変数に格納するようqt_add_translations
に指示できます。
OUTPUT_TARGETS
を使用する場合は、IMMEDIATE_CALL
またはSOURCE_TARGETS
のどちらかを指定する必要があります。
自動リソース埋め込みをオフにするには、QM_FILES_OUTPUT_VARIABLE
オプションの後に、生成された.qm
ファイルのリストを格納する変数名を指定します。
qt_add_translations
Qt 6.7 以前
Qt 6.7以前では、このコマンドは最初の引数として1つのターゲットしか受け付けませんでした。このターゲットは、翻訳可能なソースの抽出と.qm
ファイルの組み込みの両方に使用されました。
Qt 6.7以降、第1引数のターゲットはソースの抽出には使われなくなりました。
例
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.