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 )
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。