QTranslator Class
QTranslator クラスは、テキスト出力に対する国際化サポートを提供します。詳細...
| ヘッダー: | #include <QTranslator> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 継承元: | QObject |
パブリック関数
| QTranslator(QObject *parent = nullptr) | |
| virtual | ~QTranslator() |
| QString | filePath() const |
| virtual bool | isEmpty() const |
| QString | language() const |
| bool | load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString()) |
| bool | load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString()) |
| bool | load(const uchar *data, int len, const QString &directory = QString()) |
| virtual QString | translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const |
詳細な説明
このクラスのオブジェクトには、ソース言語からターゲット言語への一連の翻訳が含まれます。QTranslator は、翻訳ファイルから翻訳を検索するための関数を提供します。翻訳ファイルは、 Qt Linguist.
QTranslatorの最も一般的な用途は、翻訳ファイルを読み込み、QCoreApplication::installTranslator() を使用してそれをインストールすることです。
以下に、QTranslator を使用したmain() 関数の例を示します。
// Required for using the '_L1' string literal.
using namespace Qt::StringLiterals;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTranslator translator;
// look up e.g. :/i18n/myapp_de.qm
if (translator.load(QLocale(), "myapp"_L1, "_"_L1, ":/i18n"_L1))
QCoreApplication::installTranslator(&translator);
QPushButton hello(QCoreApplication::translate("main", "Hello world!"));
hello.resize(100, 30);
hello.show();
return app.exec();
}なお、翻訳オブジェクトはアプリケーションのウィジェットよりも前に作成する必要があります。
ほとんどのアプリケーションでは、このクラスを使ってこれ以外の操作を行う必要はありません。このクラスが提供するその他の関数は、翻訳ファイルを扱うアプリケーションで役立ちます。
翻訳の検索
translate() を使用して翻訳を検索することができます(tr() やQCoreApplication::translate() と同様に)。translate() 関数は最大 3 つのパラメータを受け取ります:
- コンテキスト— 通常はtr() を呼び出す側のクラス名です。
- ソーステキスト— 通常はtr() の引数です。
- 曖昧性解消情報 — 同じコンテキスト内で同じテキストが異なる意味で使用されている場合の曖昧性を解消するのに役立つ、オプションの文字列。
たとえば、ダイアログ内の「Cancel」は、プログラムがポーランド語で実行されている場合、「Anuluj」となる可能性があります(この場合、ソーステキストは「Cancel」となります)。 コンテキストは(通常)ダイアログのクラス名になります。通常、コメントはなく、翻訳されたテキストは「Anuluj」となります。
しかし、必ずしもこれほど単純とは限りません。両面印刷や製本に関する設定があるプリンタダイアログのスペイン語版では、「Enabled」の翻訳として「Activado」と「Activada」の両方が必要になるでしょう。 この場合、どちらの場合もソーステキストは「Enabled」となり、コンテキストはダイアログのクラス名になりますが、2つの項目には、一方には「両面印刷」、もう一方には「製本」といった曖昧さを解消する説明が付きます。 この曖昧さ解消により、翻訳者はスペイン語版に適した性(masculino/femenino)を選択できるようになり、Qtも翻訳を区別できるようになります。
複数の翻訳の使用
1つのアプリケーションに複数の翻訳ファイルをインストールすることができます。翻訳の検索は、インストールされた順の逆順で行われます。つまり、最後にインストールされた翻訳ファイルが最初に検索され、最初にインストールされた翻訳ファイルが最後に検索されます。一致する文字列を含む翻訳が見つかり次第、検索は終了します。
この仕組みにより、特定の翻訳を「選択」したり、他の翻訳よりも優先させたりすることが可能になります。アプリケーションから翻訳ファイルをアンインストールするには、QCoreApplication::removeTranslator() 関数にその翻訳ファイルを引数として渡し、QCoreApplication::installTranslator() で再インストールするだけです。そうすることで、その翻訳ファイルが一致する文字列の検索において最初に参照されるようになります。
セキュリティ上の考慮事項
信頼できるソースからの翻訳ファイルのみをインストールしてください。
翻訳ファイルは、テキストベースの翻訳ソースファイルから生成されるバイナリファイルです。これらのバイナリファイルの形式は Qt によって厳密に定義されており、バイナリファイル内のデータをいじると、ファイルの読み込み時にアプリケーションがクラッシュする可能性があります。さらに、形式が正しい翻訳ファイルであっても、誤解を招くような翻訳や悪意のある翻訳が含まれている可能性があります。
関連項目: QCoreApplication::installTranslator()、QCoreApplication::removeTranslator()、QObject::tr()、QCoreApplication::translate()、ローカライズされた時計の例、矢印パッドの例、およびTroll Print の例。
メンバ関数のドキュメント
[explicit] QTranslator::QTranslator(QObject *parent = nullptr)
親がparent で、どのファイルにも接続されていない空のメッセージファイルオブジェクトを作成します。
[virtual noexcept] QTranslator::~QTranslator()
オブジェクトを破棄し、割り当てられたリソースをすべて解放します。
QString QTranslator::filePath() const
読み込まれた翻訳ファイルのパスを返します。
まだ翻訳が読み込まれていない場合、読み込みに失敗した場合、またはファイルから翻訳が読み込まれなかった場合は、ファイルパスは空になります。
[virtual] bool QTranslator::isEmpty() const
このトランスレータが空の場合は `true ` を返し、それ以外の場合は `false` を返します。
QString QTranslator::language() const
翻訳ファイルに保存されている対象言語を返します。
bool QTranslator::load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())
filename およびsuffix (suffix が指定されていない場合は ".qm")を読み込みます。これらは絶対ファイル名でも、directory からの相対パスでも構いません。翻訳が正常に読み込まれた場合はtrue を返し、そうでない場合はfalse を返します。
directory が指定されていない場合は、現在のディレクトリが使用されます(つまり、currentPath()として扱われます)。
このトランスレータオブジェクトの以前の内容は破棄されます。
ファイル名が存在しない場合、以下の順序で他のファイル名が試されます。
- suffix を付加していないファイル名。
- search_delimiters の末尾に付加された文字以降のテキストを削除したファイル名(空文字列の場合、search_delimiters ではデフォルトで「_.」が使用されます)およびsuffix 。
- 「suffix 」が追加されていない状態で、ファイル名から不要な部分を削除したもの。
- さらにファイル名から文字列を削除するなど。
たとえば、fr_CA ロケール(フランス語圏のカナダ)で実行されているアプリケーションが、load("foo.fr_ca", "/opt/foolib") を呼び出す場合、load() はこのリストから最初に存在する読み取り可能なファイルを開こうとします:
/opt/foolib/foo.fr_ca.qm/opt/foolib/foo.fr_ca/opt/foolib/foo.fr.qm/opt/foolib/foo.fr/opt/foolib/foo.qm/opt/foolib/foo
通常は、代わりに QTranslator::load(constQLocale &, constQString &, constQString &, constQString &, constQString &) 関数を使用することをお勧めします。これは、単にロケール名(日付や数値の書式指定を指し、必ずしも UI 言語を指すとは限らない)ではなく、QLocale::uiLanguages() を使用するためです。
bool QTranslator::load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())
filename +prefix +ui language name +suffix (suffix が指定されていない場合は「.qm」)を読み込みます。これらは絶対ファイル名でも、directory からの相対パスでも構いません。翻訳の読み込みに成功した場合はtrue を返し、失敗した場合はfalse を返します。
この翻訳オブジェクトの以前の内容は破棄されます。
ファイル名が存在しない場合、以下の順序で他のファイル名が試されます:
- 「suffix 」が末尾に付加されていないファイル名。
- 「_」文字の後に続く UI 言語部分を削除したファイル名に、suffix を付加したもの。
- UI言語部分が削除され、suffix が追加されていないファイル名。
- UI言語部分をさらに削除したファイル名、など。
たとえば、以下のui languages (「es」、「fr-CA」、「de」)を持つlocale で実行されているアプリケーションは、load(QLocale(), "foo", ".", "/opt/foolib", ".qm") を呼び出す可能性があります。 load() は、UI 言語の '-' (ダッシュ) を '_' (アンダースコア) に置き換え、その後、以下のリストから最初に存在する読み取り可能なファイルを開こうとします:
/opt/foolib/foo.es.qm/opt/foolib/foo.es/opt/foolib/foo.fr_CA.qm/opt/foolib/foo.fr_CA/opt/foolib/foo.fr.qm/opt/foolib/foo.fr/opt/foolib/foo.de.qm/opt/foolib/foo.de/opt/foolib/foo.qm/opt/foolib/foo./opt/foolib/foo
ファイルシステムが大文字と小文字を区別するオペレーティングシステムでは、QTranslator はロケール名の大文字を小文字に変換したバージョンも読み込もうとします。
bool QTranslator::load(const uchar *data, int len, const QString &directory = QString())
長さlen のQMファイルデータ「data 」をトランスレータに読み込みます。
データはコピーされません。呼び出し元は、data が削除または変更されないことを保証できる必要があります。
directory は、QM ファイルの依存関係を読み込む際のベースディレクトリを指定するためにのみ使用されます。ファイルに依存関係がない場合、この引数は無視されます。
この関数は、QTranslator::load() をオーバーロードしています。
[virtual] QString QTranslator::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const
キー (context 、sourceText 、disambiguation) に対応する翻訳を返します。該当する翻訳が見つからない場合は、(context 、sourceText 、"") についても検索を試みます。それでも見つからない場合は、空文字列を返します。
注: 翻訳が不完全な場合 、予期しない動作が生じる可能性があります。(context,sourceText, "") に対する翻訳が提供されていない場合、このメソッドは実際には別のdisambiguation に対する翻訳を返すことがあります。
n が -1 以外の場合、その値は翻訳の適切な形式(例: "%n ファイルが見つかりました" 対 "%n ファイルが見つかりました")を選択するために使用されます。
QTranslator に翻訳をプログラムで挿入する必要がある場合は、この関数を再実装することができます。
注: この関数はスレッドセーフです。
load()も参照してください 。
© 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.