Hello tr()の例
小さなHello Worldプログラムをラテン語に翻訳する。
スクリーンショットは英語版です。
Qtアプリケーションの翻訳についての詳細は、Qt Linguist マニュアルを参照してください。
行ごとのチュートリアル
#include <QTranslator>
この行にはQTranslator クラスの定義が含まれています。このクラスのオブジェクトは、ユーザーから見えるテキストの翻訳を提供します。
QTranslator translator;
親を持たないQTranslator オブジェクトを作成します。
Q_UNUSED(translator.load("hellotr_la"));
プログラムで使用されるソース・テキストのラテン語翻訳を含むhellotr_la.qm
というファイル(.qm
ファイル拡張子は暗黙の了解です)のロードを試みます。ファイルが見つからなくてもエラーは発生しません。この例はデスクトップ・プラットフォームで最適に動作します。AndroidやiOSのようなプラットフォームでは、.qmファイルはアプリバンドルに含まれている必要があります。通常、.qm ファイルを Qt リソースにバンドルします。
app.installTranslator(&translator);
hellotr_la.qm
からの翻訳をプログラムで使用する翻訳のプールに追加します。
QPushButton hello(QPushButton::tr("Hello world!"));
Hello world!"と表示するプッシュボタンを作成します。hellotr_la.qm
が見つかり、"Hello world!" の翻訳が含まれていれば、その翻訳が表示され、含まれていなければソーステキストが表示されます。
QObject を継承するすべてのクラスはtr()
関数を持つ。QObject クラスのメンバ関数の内部では、QPushButton::tr("Hello world!")
やQObject::tr("Hello world!")
の代わりにtr("Hello world!")
と記述します。
英語版アプリケーションの実行
翻訳ファイルhellotr_la.qm
を作成していないので、アプリケーションを実行すると原文が表示されます:
ラテン語メッセージファイルの作成
最初のステップは、プロジェクトのすべてのソースファイルをリストしたプロジェクトファイルを作成することです。
qmakeを使う場合、hellotr.pro
の該当行は次のようになります:
SOURCES = main.cpp TRANSLATIONS = hellotr_la.ts
TRANSLATIONS
で、メンテナンスしたいメッセージファイルを指定します。この例では、ラテン語という1セットの翻訳を管理するだけです。
CMakeを使う場合、CMakeLists.txt
の該当行は次のようになります:
find_package(Qt6 REQUIRED COMPONENTS LinguistTools) qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES la) qt6_add_translations(hellotr QM_FILES_OUTPUT_VARIABLE qm_files) install(FILES ${qm_files} DESTINATION ${INSTALL_EXAMPLEDIR})
ファイルの拡張子は.qm
ではなく.ts
であることに注意してください。.ts
翻訳ソースフォーマットは、アプリケーションの開発中に使用するように設計されています。プログラマまたはリリース・マネージャは、lupdate
プログラムを実行して、ソース・コードから抽出されたソース・テキストを含む TS ファイルを生成し、更新します。翻訳者はTSファイルを読み、更新します。 Qt Linguistを使用してTSファイルを読み、更新します。
TSフォーマットは人間が読めるXMLで、直接電子メールで送ることができ、バージョン管理下に置くのも簡単です。このファイルを手動で編集する場合、XMLのデフォルトのエンコーディングはLatin1(ISO 8859-1)ではなく、UTF-8であることに注意してください。ø」(スラッシュ付きのノルウェー語の「o」)のようなLatin1文字を入力する1つの方法は、XMLエンティティを使用することです:"ø "を使用することです。これは、Unicode 4.0の文字であれば何でも使えます。
翻訳が完了したら、lrelease
プログラムを使って TS ファイルを QM Qt メッセージファイル形式に変換します。QMフォーマットはコンパクトなバイナリ・フォーマットで、非常に高速なルックアップ性能を実現するように設計されています。lupdate
とlrelease
は、プロジェクトのすべてのソースファイルとヘッダーファイル(プロジェク トファイルの HEADERS 行と SOURCES 行で指定されています)を読み込み、tr()
関数呼び出しに現れる文字列を抽出します。
lupdate
は、メッセージ・ファイル(この場合は )の作成と更新に使用され、ソース・コードとの同期を保つ。 は情報を削除しないので、いつでも を実行しても安全です。hellotr_la.ts
lupdate
lupdate
今すぐlupdate
。
qmakeを使う場合は、lupdate
を手動で実行しなければならない:
lupdate -verbose hellotr.pro
(-verbose
オプションは、lupdate
に、何をしているかを説明するメッセージを表示するように指示します)。
CMakeを使う場合は、lupdate
を実行するためにupdate_translations
ターゲットをビルドする:
cmake --build . --target update_translations
これで、ソース・ディレクトリにhellotr_la.ts
:
<!DOCTYPE TS><TS> <context> <name>QPushButton</name> <message> <source>Hello world!</source> <translation type="unfinished"></translation> </message> </context> </TS>
このファイルはツールを使って読み込まれ、更新されるので、ファイル・フォーマットを理解する必要はない(lupdate
、 Qt Linguistlrelease
) を使って読み込まれ、更新されるので、ファイル形式を理解する必要はありません。
でラテン語に翻訳するQt Linguist
を使ってラテン語に翻訳します。 Qt Linguistを使用して翻訳を提供しますが、TSファイルに翻訳を入力するには、XMLまたはプレーンテキストエディタを使用することができます。
開始するには Qt Linguistと入力してください。
linguist hellotr_la.ts
左上のペインに "QPushButton "というテキストが表示されているはずです。それをダブルクリックして、"Hello world!"をクリックし、Translation (ウィンドウの右中央)のペインに "Orbis, te saluto!"と入力してください。感嘆符をお忘れなく!
Done のチェックボックスをクリックし、メニューバーからFile|Save を選択します。TSファイルには
<translation type='unfinished'></translation>
代わりに
<translation>Orbis, te saluto!</translation>
ラテン語でアプリケーションを実行する
アプリケーションをLatinで実行するためには、TSファイルからQMファイルを生成する必要があります。QMファイルの生成は、次のいずれかの方法で行うことができます。 Qt Linguist(1つのTSファイルに対して)または、コマンドライン・プログラムlrelease
、プロジェクト・ファイルにリストされた各TSファイルに対して1つのQMファイルを生成します。からFile|Release を選択し、hellotr_la.ts
を押して、 からhellotr_la.qm
を生成する。 Qt Linguistを選択し、表示されるファイル保存ダイアログでSave を押します。hellotr
プログラムをもう一度実行する。今度はボタンが "Orbis, te saluto!"と表示されます。
© 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.