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_lupdateqt_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.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 オプションで lupdate を呼び出すカスタム・ターゲットの名前を指定できます。同様に、LRELEASE_TARGETlrelease を呼び出すカスタム・ターゲットの名前を制御します。

LUPDATE_OPTIONS LRELEASE_OPTIONSlupdate オプションと lreleaseオプションでlupdateと lreleaseの追加オプションを設定できます。

たとえば、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 ビルドでは、リソースターゲットが作成されると、追加のターゲットを作成することができます。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.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
)

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