QTranslator Class
QTranslator クラスは、テキスト出力の国際化サポートを提供します。詳細...
Header: | #include <QTranslator> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Inherits: | 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()
関数の例です:
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(); }
トランスレータはアプリケーションのウィジェットの前に作成する必要があることに注意してください。
ほとんどのアプリケーションでは、このクラスで他のことをする必要はありません。このクラスが提供する他の関数は、トランスレータファイルを扱うアプリケーションに便利です。
翻訳の検索
tr() やQCoreApplication::translate() のように)translate() を使って翻訳を検索することができます。translate() 関数は3つまでのパラメータを取ります:
- コンテキスト- 通常、tr() の呼び出し元のクラス名。
- ソース・テキスト- 通常、tr() の引数。
- 曖昧性解消- オプションの文字列で、同じコンテキストで同じテキストが異なる用途に使用されていることを判別し やすくします。
例えば、ダイアログの "Cancel "は、プログラムがポーランド語で実行されている場合、"Anuluj "となることがあります(この場合、ソース・テキストは "Cancel "となります)。コンテキストは(通常は)ダイアログのクラス名で、通常はコメントはなく、翻訳されたテキストは "Anuluj "となります。
しかし、必ずしもそう単純ではありません。両面印刷と製本の設定があるプリンターダイアログのスペイン語版では、おそらく「有効」の翻訳として「Activado」と「Activada」の両方が必要になるでしょう。この場合、原文はどちらも "Enabled "となり、文脈はダイアログのクラス名となりますが、2つの項目には、一方は "両面印刷"、他方は "製本 "といった曖昧性解消が必要です。この曖昧性解消により、翻訳者はスペイン語版の適切な性別を選択することができ、Qt は翻訳を区別することができます。
複数の翻訳を使う
アプリケーションに複数の翻訳ファイルをインストールすることができます。翻訳ファイルの検索は、インストールされた順番と逆の順番で行われるため、最も最近インストールされた翻訳ファイルが最初に検索され、最も古い翻訳ファイルが最後に検索されます。一致する文字列を含む翻訳が見つかり次第、検索は終了します。
この仕組みにより、特定の翻訳を「選択」したり、他の翻訳より優先させたりすることができます。QCoreApplication::removeTranslator() 関数に渡してアプリケーションから翻訳をアンインストールし、QCoreApplication::installTranslator() で再インストールするだけです。すると、マッチする文字列を検索する最初の翻訳になります。
QCoreApplication::installTranslator(),QCoreApplication::removeTranslator(),QObject::tr(),QCoreApplication::translate(),I18N の例,Hello tr() の例,Arrow Pad の例,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() のように)。
このtranslatorオブジェクトの以前の内容は破棄されます。
ファイル名が存在しない場合、他のファイル名が次の順序で試される:
- suffix が付加されていないファイル名。
- search_delimiters の文字以降のテキストを取り除いたファイル名(search_delimiters が空文字列の場合、"_." がデフォルト)、およびsuffix 。
- suffix が付加されずに取り除かれたファイル名。
- ファイル名をさらに取り除いたものなど。
例えば、fr_CAロケール(フランス語圏のカナダ)で動作するアプリケーションは、load("foo.fr_ca", "/opt/foolib")を呼び出すかもしれない:
/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 &)関数を使用する方が良いでしょう。これは、単にロケール名ではなく、QLocale::uiLanguages()を使用するからです。 は、日付や数値の書式を参照しており、必ずしもUI言語を参照しているわけではありません。
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言語部分がさらに取り除かれたファイル名など。
たとえば、locale で実行されているアプリケーションで、ui languages - "es", "fr-CA", "de" を使用している場合、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())
この関数はload()をオーバーロードする。
長さlen の QM ファイルデータdata をトランスレータにロードします。
データはコピーされません。呼び出し元は、data が削除されたり変更されたりしないことを保証できなければならない。
directory は、QM ファイルの依存関係をロードするときに、ベース ディレクトリを指定するためにのみ使用されます。ファイルが依存関係を持たない場合、この引数は無視されます。
[virtual]
QString QTranslator::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const
キー (context,sourceText,disambiguation) の翻訳を返します。見つからない場合は、(context,sourceText, "") も試します。それでも見つからない場合は、NULL文字列を返します。
注意: 翻訳が不完全な場合、予期しない動作をすることがあります:(context,sourceText, "") の翻訳が提供されていない場合、このメソッドは実際には別のdisambiguation の翻訳を返すかもしれません。
(n, , "") の翻訳が提供されていない場合、このメソッドは実際には異なる の翻訳を返すかもしれません。 が -1 でない場合、翻訳の適切な形式を選択するために使用されます (例えば、"%n file found" 対 "%n files found")。
QTranslator にプログラムで翻訳を挿入する必要がある場合、この関数を再実装することができます。
load()も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。