2012-01-19 10 views
3

Qt lupdateとQTranslatorは、ソース文字列を排他コンテキストにグループ化します。つまり、あるコンテキストで定義された変換は、別のコンテキストではアクセスできません。カスタムQTranslatorコンテキストの自動化

C++内のデフォルトのコンテキストは、QObject::tr()をオーバーライドしたクラスの名前です。宣言的なQMLの中のデフォルトのコンテキストは、拡張子のない現在のファイル名です。翻訳コンテキストをオーバーライドするには、C++またはQMLでqApp->translate("context", "source")またはqsTranslate("context", "source")を使用します。

大きなプロジェクトで共通の翻訳コンテキストを使用したいと思っています。私は、すべての翻訳機能で翻訳コンテキストを指定するのは非常に面倒です。このタスクを簡略化する既存または将来のQt翻訳フレームワーク拡張はありますか? tr("source")qsTr("source")のような単純なものを探していますが、システム全体またはプロジェクト全体のデフォルトコンテキストを使用しています。何か案は?

答えて

0

これより簡単なことがあります。 tr/qsTrの代わりにqtTrId/qsTrId(Qt/QML)を使用し、あなたの流出呼び出しに-idベースのパラメータを追加します。 IDベースの翻訳には文脈が全くありません。

+0

これはうまくいくようです、ありがとう! 「ID」は、空白と句読点を含む複雑な文字列ですが、言語学者には表示されません。代わりに、 'qtTrId()'/'qsTrId()'が呼び出される前に特別な '//%"ソーステキスト "コメントを追加する必要があります。 ...またはID文字列をソースタグに自動的にコピーするスクリプトを記述します。 :)うまくいけば、私は道のりで文脈上の分離を必要としないだろう。 – Igor

2

あなたは(Q_DECLARE_TR_FUNCTIONSを使用することができます)マクロは、単にコンテキストとして動作するクラス定義に適用される:

CONTEXT_CLASSは、あなたが好きな限り短くするのは(期待してXを言わせてでき
class CONTEXT_CLASS { 
    Q_DECLARE_TR_FUNCTIONS(CONTEXT_CLASS) 
}; 

コード内の他のものと競合しません)。それはそれは翻訳ツールによってピックアップ得ることはありませんよう、TR :: X短縮するために何かを#defineしないでください、あなたのTR()文

X::tr("source"); 

になるだろう。

+0

ありがとう!これはC++コンポーネントに最適です。これをQMLに拡張する方法はありますか? – Igor