アプリケーションのローカライズ

アプリケーションをローカライズする手順には、翻訳可能なアプリケーションの作成、翻訳の準備、文字列の翻訳、リリースされたアプリケーションのランタイム翻訳ファイルの作成が含まれます。

Qt Quick と Qt C++ アプリケーションは、同じローカライズシステムを使用しています:lupdateQt Quick と Qt C++ アプリケーションでは、同じローカリゼーションシステム(lrelease )、およびそれらが生成する翻訳ソース(TS)ファイルと QM ファイルを使用します。Qt Linguist Manual で説明されているように、QML と C++ のコードには同じツールを使用します。

同じアプリケーションに、QML と C++ のソースファイルによるユーザーインターフェイス文字列を含めることもできます。システムは 1 つの翻訳ファイルを作成し、文字列は QML と C++ コードからアクセスできます。

国際化されたアプリケーションをローカライズするには

Qt プロジェクトファイルで翻訳ソースを指定する

lupdatelrelease で TS と QM ファイルを生成できるようにするには、アプリケーションのプロジェクトファイルを更新して、翻訳するテキストを含むソースファイルを指定します。

実行時に読み込む言語を決定するには、TS ファイル名の ISO 言語コードと国コードを使用します。詳細は、「翻訳を有効にする」を参照してください。

lupdate ツールは、アプリケーションからユーザー・インターフェイス文字列を抽出します。デフォルトでは、すべてのソース・コードがUTF-8でエンコードされていることを想定しています。詳細については、「エンコード」を参照してください。

CMakeの使用

Qt6LinguistTools パッケージをロードすることで、Qt の国際化用 CMake コマンドを利用できるようにします。

cmake_minimum_required(VERSION 3.16)
project(myproject)
find_package(Qt6 COMPONENTS Core LinguistTools)

qt_standard_project_setupI18N_TRANSLATED_LANGUAGES 引数でサポートする言語を宣言します。

# Declare that the project will have a German and a French translation.
qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr)

ソースコードは英語で翻訳可能な文字列があると仮定されます。ソースコードの文字列の言語はqt_standard_project_setup パラメータI18N_SOURCE_LANGUAGE で調整できます。

実行時に.qm ファイルを読み込むターゲットでqt_add_translationsコマンドを呼び出します。

qt_add_translations(myapplication)

まだ存在しない場合は、myproject_de.tsmyproject_fr.ts のファイルが作成されます。これらのファイル名がどのように作られるかについては、.tsファイルパスの自動決定を参照してください。

このコマンドは、複数形のみの翻訳ファイルであるmyproject_en.ts も作成します。詳細については、「複数形の処理」を参照してください。複数形のみのファイルの生成は、NO_GENERATE_PLURALS_TS_FILE 引数でオフにすることができます。

プロジェクト内のすべてのターゲットのすべてのソースファイルは、.ts ファイルの生成のための入力とみなされます。プロジェクトのターゲットがどのように収集されるか、ターゲットや単一のソースを除外する方法については、qt_add_translationsのリファレンスドキュメントを参照してください。

qmakeを使う

qmakeを使用する場合、.proファイルのSOURCES またはHEADERS エントリに記載されているQMLソースをコンパイラから非表示にする条件文を設定します。

SOURCES変数はC++ソースファイルを対象としています。SOURCES変数にQMLやJavaScriptのソースファイルを記述すると、コンパイラーはそれらをC++ファイルであるかのようにビルドしようとします。回避策として、lupdate_only{...} 条件文を使用することで、lupdate ツールには .qml ファイルが表示されますが、C++ コンパイラには無視されます。

例えば、次の.proファイルのスニペットは、アプリケーション内の2つの.qmlファイルを指定しています。

lupdate_only{
SOURCES = main.qml \
          MainPage.qml
}

.qmlソース・ファイルはワイルドカードで指定することもできます。検索は再帰的ではないので、UI 文字列を含むソース・ファイルを含む各ディレクトリを指定する必要があります:

lupdate_only{
SOURCES = *.qml \
          *.js \
          content/*.qml \
          content/*.js
}

翻訳を展開する

.qm ファイルをデプロイする最も簡単な方法は、Qt リソースに埋め込むことです。qt_add_translationsCMake コマンドが自動的にそれを行います。.qm ファイルは":/i18n" リソースのプレフィックスでアクセスできます。

# Automatically embed generated .qm files.
qt_add_translations(myapplication)

あるいは、.qm ファイルをファイルシステムのディレクトリに配置することもできます。これは、利用可能なすべての翻訳をメモリに保持したくない大規模なアプリケーションに適しています。qt_add_translationsQM_FILES_OUTPUT_VARIABLE 引数を渡してください。このコマンドは、生成された.qm ファイルのリストを指定された変数に格納します。そのリスト内のファイル名に対して CMake の通常のインストールコマンドを使用します。

# Do not embed generated .qm files.
qt_add_translations(myapplication
    QM_FILES_OUTPUT_VARIABLE qm_files
)

# Install generated .qm files.
install(FILES ${qm_files} DESTINATION translations)

アプリケーションに必要な.qm ファイルを、QTranslator を使用するローダーコードが見つけられる場所に配置します。通常、QCoreApplication::applicationDirPath() からの相対パスを指定します。

アプリケーションの QM ファイルに加えて、アプリケーションで使用する Qt モジュールの QM ファイルを配置する必要があります。

QMファイルはモジュールごとに分割されており、すべてのモジュールのQMファイルを含む、いわゆるメタ・カタログ・ファイルがあります。しかし、アプリケーションで使用するモジュールの QM ファイルだけを配置する必要があります。

デプロイステップのlconvert ツールを使用して、必要なQMファイルをメタカタログファイルと一致する1つのファイルに連結することができます。例えば、Qt CoreQt GUIQt Quickモジュールを使用するアプリケーションのドイツ語翻訳ファイルを作成するには、次のように実行します:

lconvert -o installation_folder/qt_de.qm qtbase_de.qm qtdeclarative_de.qm

Qtモジュール翻訳を使用する

Qt モジュールには数千の文字列が含まれており、それらを対象とする言語に翻訳する必要があります。qttranslationsリポジトリに多くの TS ファイルがあります。Qt の翻訳を始める前に、wiki のTranslating Qt Into Other Languages を読んでください。

Qt の翻訳を探す

QLibraryInfo::path() を使って、アプリケーションが使用する Qt モジュールの翻訳を見つけることができます。この関数にQLibraryInfo::TranslationsPath を渡すことで、実行時に翻訳へのパスを要求することができます。

利用可能なカタログ

Qt 翻訳カタログはqttranslations リポジトリにあります。

警告 Qt 翻訳は Qt コミュニティによって寄稿されたものであり、いかなる保証もなく提供されています。翻訳が欠落していたり、古かったり、完全に間違っていたりする可能性があります。出荷する翻訳を監査することをお勧めします。

Qt 4では、1つのロケールに対して1つの大きな、モノリシックな.qm ファイルがあります。例えば、qt_de.qm というファイルには、すべてのライブラリのドイツ語翻訳が含まれています。

qt_ qt_ Qt 4 から Qt 5 へのアプリケーションの移植を簡単にするために作成されました。メタカタログは、不要なモジュールや非推奨のモジュールに属しているために存在しない翻訳に依存しており、翻訳の読み込みに失敗する可能性があります。Qt 5 以降の新しいモジュールをアプリケーションで使用する場合は、メタカタログを使用する場合でも、それらのモジュールのカタログ名を指定する必要があります。

次の表は、Qt のモジュールとツールで使用できる翻訳カタログの一覧です。

Qt モジュールまたはツールカタログ
Qt Bluetoothqtconnectivity
Qt コンカレントqtbase
Qt コアqtbase
Qt D-Busqtbase
Qt ウィジェットデザイナーdesigner
Qt GUIqtbase
Qt ヘルプqt_help
Qt 言語学者linguist
Qt 位置情報qtlocation
Qt マルチメディアqtmultimedia
Qt ネットワークqtbase
Qt NFCqtconnectivity
Qt 印刷サポートqtbase
Qt Qmlqtdeclarative
Qt Quickqtdeclarative
Qt Quick コントロールqtdeclarative
Qt クイックウィジェットqtdeclarative
Qt シリアルポートqtserialport
Qt SQLqtbase
Qt ウィジェットqtbase
Qt ウェブソケットqtsockets
Qt WebEngineqtwebengine

例必須 Qt モジュール

例えば、Qt Core、Qt GUI、Qt Network、Qt Widgets などの必須 Qt モジュールの翻訳を検索するには、main() 関数に次のコードを追加します:

    QTranslator qtTranslator;
    if (qtTranslator.load(QLocale::system(), u"qtbase"_s, u"_"_s,
                          QLibraryInfo::path(QLibraryInfo::TranslationsPath))) {
        app.installTranslator(&qtTranslator);
    }

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