Hello tr()の例

小さなHello Worldプログラムをラテン語に翻訳する。

スクリーンショットは英語版です。

Qt アプリケーションの翻訳についての詳細はQt Linguist Manualを参照してください。

行ごとのチュートリアル

#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 ファイルを生成し、更新します。翻訳者は、Qt Linguist を使用して TS ファイルを読み、翻訳を追加・編集して更新します。

TS形式は人間が読めるXMLで、直接電子メールで送ることができ、バージョン管理も簡単です。このファイルを手動で編集する場合、XMLのデフォルトエンコーディングはUTF-8であり、Latin1 (ISO 8859-1)ではないことに注意してください。ø」(スラッシュ付きのノルウェー語の「o」)のようなLatin1文字を入力する1つの方法は、XMLエンティティを使用することです:"&#xf8; "を使用することです。これは、Unicode 4.0の文字であれば何でも使えます。

翻訳が完了したら、lrelease プログラムを使って TS ファイルを QM Qt メッセージ・ファイル・フォーマットに変換します。QMフォーマットはコンパクトなバイナリ・フォーマットで、非常に高速なルックアップ性能を実現するように設計されています。lupdatelrelease は、プロジェクトのすべてのソースファイルとヘッダーファイル(プロジェク トファイルの 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 Linguist,lrelease) を使って読み込まれ、更新されるので、理解する必要はありません。

Qt Linguistでラテン語に翻訳する

Qt Linguistを使って翻訳を行いますが、XMLやプレーンテキストエディタを使ってTSファイルに翻訳を入力することもできます。

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ファイルに対して)行うか、コマンドライン・プログラムlreleaseQt LinguistのメニューバーからFile|Release を選択し、表示されるファイル保存ダイアログでSave を押して、hellotr_la.ts からhellotr_la.qm を生成します。hellotr プログラムをもう一度実行してください。今度はボタンが "Orbis, te saluto!"と表示されます。

プロジェクト例 @ code.qt.io

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