2011-02-03 14 views
8

私はXMLファイルを使用するQtプロジェクトを持っています。これらのXMLファイルには人間が読めるテキストが含まれており、このテキストはQtツール(lupdate、lrelease、QtLinguist)を使用して翻訳する必要があります。Qt非ソースファイルから文字列を翻訳する

QT_TR_NOOP()マクロとフレンドを使用して、ソースファイル内のXMLファイルから文字列を複製せずに、lupdate経由で.tsファイルにエントリを生成できるかどうかです。または、一般的に、Qtプロジェクトの非ソースファイルの文字列をどのように翻訳しますか?

+0

lupdateが単にファイルではなく文字列/コンテキストのペアを受け入れるといいでしょう。そのようなことを構築システムに含めることができます。 – Joey

+0

私は簡単な方法を見つけました。私の答えを確認してください:http://stackoverflow.com/questions/28166081/can-i-use-tr-and-lupdate-on-xml-files/28168782#28168782 –

答えて

5

人間が読める文字列を含むXMLファイルも同じ問題がありました。

私たちのソリューションは、XMLファイルの人間が読める文字列を簡単に抽出できるようにすることでした(我々はLABEL属性に入れました)。そして、XMLファイルを解析して文字列を抽出し、コンテクスト(XMLファイルからデータを抽出することにより)、そしてQT_TR_NOOP()のリストを含むCPPヘッダファイルを生成する。

このファイルは、lupdateによって使用されたプロジェクトファイル(.pro)に追加されました。

このソリューションは、私たちのために大丈夫だったが、我々は2つのことについては非常に慎重でなければならなかった:

  • このツールにXMLファイルの内容が変更されるたびに実行します。
  • XMLファイルがUTF-8でエンコードされていることを確認してください。
+0

これは普遍的なソリューションのように聞こえ、非XMLファイルにも当てはまります。私はそのようなことを考えます、ありがとう! – Sascha

+0

githubにツールを投稿した方がいいでしょう。これは、この答えを他の人にとってより便利にするでしょう。 – sashoalm

3

実行時に.qmファイルに一致する翻訳/コンテキストがある限り、tr()を使用して任意のものを翻訳できます。それはlupdateがそれを抽出したかどうかにかかわらず、何の違いもないはずです。

lupdateで任意のXMLから文字列を抽出する方法はわかりませんが、言語学者を使用できないわけではありません。

  1. .tsファイルもXMLです。 XMLを.tsファイルに変換するXSLTを作成するのは簡単です。 Qtだけでなく標準のものをターゲットにしたい場合は、lupdate(およびlinguist)もXLIFFファイルを処理できます。
  2. 複数.TSファイルを持つことができ、あなたが本当に翻訳者のための1つのファイルにすべてを持っているしたい場合は

を、(それを設定する際に何度もQTranslator ::負荷以上を呼び出す)あなたのXSLTのコピーを持っていますlupdateで生成されたファイルを出力します。

ソースコードで使用されているものと重複しないコンテキスト名を使用する限り、多くのアプリが各DLLに対して.qmをロードする方法とは異なる(Qtの観点から)それはGUIを持っています。

+0

XSLTのアイデアは素晴らしいです、ありがとう!しかし、私のプロジェクトは実際はもっと複雑で、XMLファイルを含む可能性のあるプラグインとユーザー定義の異なるスキーマを統合することができます。どのようにXSLTは人間が読解可能なものを今どのように変換するのでしょうか? (私はすべてのXMLファイルを自分のXSLTに提供することができるかどうかはわかりません...) – Sascha

+0

スキーマについて何も知らないのなら、どうすればlupdateが何を取得するのか分かりますか?すべての空白以外のテキストコンテンツ、あるいはすべての属性コンテンツとテキストノードを抽出することもできますが、それは翻訳者が選別するための多くのジャンクであるようです。ユーザーがこのテキストのコンテキストを指定する要素に特別な属性を追加して、そのような要素のテキストのみを抽出することがありますか? // * [@ tr:context]/text()はそのようなノードを選択します。 – puetzk

+0

はい、何らかの慣習を使用することを考えていました。あなたの提案は理にかなっています。 – Sascha

関連する問題