アローパッドの例
Qt Linguist のコンテキストの概念を理解し、2つ以上の言語を使用する。

ここではフランス語とオランダ語の 2 つの翻訳を使用しますが、アプリケーションで使用できる翻訳の数に実質的な制限はありません。
qmake を使用する場合、arrowpad.pro 内の関連する行は次のとおりです:
HEADERS = arrowpad.h \
mainwindow.h
SOURCES = arrowpad.cpp \
main.cpp \
mainwindow.cpp
TRANSLATIONS = arrowpad_fr.ts \
arrowpad_nl.tsCMake を使用する場合、CMakeLists.txt 内の関連する行は次のとおりです:
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES fr nl)
qt6_add_translations(arrowpad
QM_FILES_OUTPUT_VARIABLE qm_files)
install(FILES ${qm_files} DESTINATION ${INSTALL_EXAMPLEDIR})lupdate を実行します。これにより、arrowpad_fr.ts とarrowpad_nl.ts という2つの同一のメッセージファイルが生成されます。これらのファイルには、tr() 呼び出しによって翻訳対象としてマークされたすべてのソーステキストとそのコンテキストが含まれます。
qmake を使用する場合、lupdate は手動で実行する必要があります:
lupdate arrowpad.proCMakeを使用する場合は、update_translations ターゲットをビルドしてlupdate を実行します:
cmake --build . --target update_translationsQtアプリケーションの翻訳に関する詳細については、『Qt Linguist マニュアル』を参照してください。
行ごとの解説
arrowpad.h では、QWidget のサブクラスであるArrowPad サブクラスを定義します。上のスクリーンショットで、4つのボタンを備えた中央のウィジェットはArrowPad です。
class ArrowPad : public QWidget
{
Q_OBJECTlupdate を実行すると、ソーステキストが抽出されるだけでなく、それらがコンテキストごとにグループ化されます。コンテキストとは、ソーステキストが出現するクラスの名前です。したがって、この例では「ArrowPad」がコンテキストとなります。これは、ArrowPad クラス内のテキストのコンテキストです。Q_OBJECT マクロは、ArrowPad 内で次のようにtr(x) を定義しています:
qApp->translate("ArrowPad", x)各ソーステキストがどのクラスに表示されるかを把握することで、 Qt Linguist 論理的に関連するテキストをまとめてグループ化できます。例えば、ダイアログ内のすべてのテキストは、そのダイアログのクラス名をコンテキストとして持ち、まとめて表示されます。テキストが表示されるコンテキストは翻訳の仕方に影響を与える可能性があるため、これは翻訳者にとって有用な情報となります。 翻訳によってはキーボードショートカットの変更が必要になる場合があり、特定のコンテキスト(クラス)内のすべてのソーステキストをまとめてグループ化しておくことで、翻訳者は競合を引き起こすことなく、ショートカットの変更を容易に行うことができます。
arrowpad.cpp では、ArrowPad クラスを実装しています。
upButton = new QPushButton(tr("&Up"));
downButton = new QPushButton(tr("&Down"));
leftButton = new QPushButton(tr("&Left"));
rightButton = new QPushButton(tr("&Right"));ラベルはユーザーに表示されるテキストであるため、各ボタンのラベルごとに `ArrowPad::tr() ` を呼び出します。

class MainWindow : public QMainWindow
{
Q_OBJECT上のスクリーンショットでは、ウィンドウ全体がMainWindow となっています。これはmainwindow.h ヘッダーファイルで定義されています。ここでもQ_OBJECT を使用しているため、MainWindow は Qt Linguist。
arrowPad = new ArrowPad;MainWindow (mainwindow.cpp )の実装では、ArrowPad クラスのインスタンスを作成します。
exitAct = new QAction(tr("E&xit"), this);
exitAct->setShortcut(QKeySequence(tr("Ctrl+Q", "Quit")));
connect(exitAct, &QAction::triggered, this, &MainWindow::close);また、MainWindow::tr() を 2 回呼び出します。1 回はアクション用、もう 1 回はショートカット用です。
tr() を使用することで、他の言語での異なるキーに対応できる点に注意してください。「Ctrl+Q」は英語の Quit には適した選択ですが、オランダ語の翻訳者は「Ctrl+A」(Afsluiten に対応)を、ドイツ語の翻訳者は「Strg+E」(Beenden に対応)を使用したい場合があるでしょう。tr() をCtrl のキーアクセラレータとして使用する場合は、2つの引数を持つ形式を使用し、2番目の引数にはそのアクセラレータが実行する関数を指定する必要があります。
main() 関数は、通常通りmain.cpp で定義されています。
QTranslator translator;
if (translator.load(locale, u"arrowpad"_s, u"_"_s))
app.installTranslator(&translator);使用する翻訳は、現在のロケールに応じて選択します。QLocale::system() は、たとえばLANG 環境変数を設定することで制御できます。.qm メッセージファイル(および TS ファイル)にロケールを組み込んだ命名規則を使用することで、ロケールに応じた翻訳ファイルの選択を容易に実装できることに注意してください。
選択されたロケールに対応する QM メッセージファイルが存在しない場合、元のソーステキストが使用され、エラーは発生しません。
フランス語およびオランダ語への翻訳
まず、サンプルアプリケーションをフランス語に翻訳してみましょう。 Qt Linguistarrowpad_fr.ts から始めます。7つのソーステキスト(「&Up」、「&Left」など)が、2つのコンテキスト(「ArrowPad」と「MainWindow」)にグループ化されているはずです。
次に、以下の翻訳を入力します。
ArrowPad- &Up - &Haut
- &Left - &Gauche
- &Right - &Droite
- &Down - &Bas
MainWindow- E&xit - &終了
- Ctrl+Q - Ctrl+Q
- &ファイル - &Fichier
「Done & Next 」ボタンをクリックすると、その翻訳が完了としてマークされ、次の原文に進みます。各翻訳を入力した後、ショートカット(「翻訳」メニューバーを参照)を使用する方が手っ取り早いです。
ファイルを保存し、arrowpad_nl.ts を使用してオランダ語の翻訳についても同様の操作を行います:
ArrowPad- &Up - &Omhoog
- &Left - &Links
- &Right - &Rechts
- &Down - Omlaa&g
MainWindow- E&xit - &終了
- Ctrl+Q - Ctrl+A
- ファイル - &Bestand
tt1_fr.ts およびtt1_nl.ts の翻訳ソースファイルをQMファイルに変換する必要があります。 Qt Linguist 以前と同様にこれを使用することも可能ですが、コマンドラインツール `lrelease ` を使用すれば、アプリケーション用のすべてのQM ファイルが確実に作成され、`File|Release ` から各ファイルを個別に読み込んで処理する手間が省けます Qt Linguist。
CMakeを使用する際は、
lrelease arrowpad.proと入力します。
cmake --build . --target release_translationsこれにより、arrowpad_fr.qm とarrowpad_nl.qm の両方が生成されるはずです。
arrowpad_fr.qm を使用するには、システムの言語設定をフランス語に変更してください。Unix では、次の 2 つのコマンドのいずれかが機能するはずです。
export LANG=fr
setenv LANG frWindows または Mac では、表示言語をフランス語に設定してください。
プログラムを実行すると、フランス語版が表示されるはずです:

オランダ語でも同様に試してみてください(UnixではLANG=nl を使用)。これでオランダ語版が表示されるはずです:

演習
翻訳のうち1つを Qt Linguist 「未完了」としてマークしてください(つまり、「完了」チェックボックスのチェックを外してください)。次に、lupdate を実行し、続いてlrelease を実行してから、サンプルプログラムを実行してください。この変更によってどのような影響がありましたか?
LANG=fr_CA (カナダ・フランス語)に設定し、サンプルプログラムを再度実行してください。結果がLANG=fr の場合と同じである理由を説明してください。
オランダ語の翻訳にあるアクセラレータの1つを変更し、&Bestandと&Boven の競合を解消してください。
© 2026 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.