2012-01-12 16 views
1

私はこれがこの質問をする正しいフォーラムであることを望みます。そうでない場合は、より適切なフォーラムにリダイレクトしてください。Qt言語学者の翻訳ファイル(TSファイル)でメッセージを識別する

Qt Linguist TSファイルの形式を理解しようとしています。私はファイルを修正しました。そのファイルを開こうとすると、 "Duplicate messages found in ..."というエラーメッセージが表示されます。ソースコードは、ファイルが実際に

  • 同じソース
  • 同じファイル名が異なる行番号
  • 異なる翻訳ここ

と場所を持っている二つのメッセージであるコンテキストが含まれていますこのエラーが発生する最小限のファイル:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE TS> 
<TS version="2.0" language="es"> 
<context> 
    <name>MyContext</name> 
    <message> 
     <location filename="../../../../../MyFile.cpp" line="605"/> 
     <source>Delete</source> 
     <translatorcomment>Menu option</translatorcomment> 
     <translation type="unfinished">&amp;Borrar</translation> 
    </message> 
    <message> 
     <location filename="../../../../../MyFile.cpp" line="1572"/> 
     <source>Delete</source> 
     <translation>Eliminar</translation> 
    </message> 
</context> 
</TS> 

私の知る限り、各メッセージは次のとおりです。コンテキスト、ソース、ロケーションによって識別されるので、行番号が異なるため、これは問題ではありません。また、2つのメッセージ要素が異なる翻訳テキストを含んでいるため、メッセージ要素を1つにまとめることはできません。

エラーメッセージが表示される原因はわかりません。 Qtバージョン4.6.2を使用しています。 Qt Linguist Manual: TranslatorQt Linguist Manual: ProgrammersLinguist TS file format私は探している情報、すなわち各メッセージがどのように識別されているか、そしてQt言語学者のエラーメッセージを引き起こす可能性のある情報を見つけました。

この質問に対する回答がわからない場合は、TS形式に関するさらに詳しい情報へのリンクも役立ちます。私はオプションのタグを使用してTS /コンテキスト/メッセージ/ することが可能であるコメントことを見出した

UPDATE

は、例えば、同じコンテキスト/メッセージ/ソースの異なる翻訳テキストを持っています

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE TS> 
<TS version="2.0" language="es"> 
<context> 
    <name>MyContext</name> 
    <message> 
     <location filename="../../../../../MyFile.cpp" line="605"/> 
     <source>Delete</source> 
     <comment>Comment 1</comment> 
     <translatorcomment>Menu option</translatorcomment> 
     <translation type="unfinished">&amp;Borrar</translation> 
    </message> 
    <message> 
     <location filename="../../../../../MyFile.cpp" line="1572"/> 
     <source>Delete</source> 
     <comment>Comment 2</comment> 
     <translation>Eliminar</translation> 
    </message> 
</context> 
</TS> 

上記のファイルはエラーなしで開くことができます。

これは私の問題を解決すると思われますが、この形式についての正確な文書を用意することは良いことです。

+0

Qtバージョン? – menjaraz

+0

Qt 4.6.2。この情報を質問に追加します。 – Giorgio

+0

あなたはXML技術を使い快適になっていますか? – menjaraz

答えて

3

Qt言語学者によって報告されたエラーメッセージは意味があります。

は、あなたのTSファイルのこの修正版をお試しください:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE TS> 

<TS version="2.0" language="es"> 
    <context> 
    <name>MyContext</name> 
     <message> 
      <location filename="../../../../../MyFile.cpp" line="605"/> 
      <source>Delete</source> 
      <translatorcomment>Menu option</translatorcomment> 
      <translation type="unfinished">&amp;Borrar</translation> 
     </message> 
    </context> 
    <context> 
    <name>MyOtherContext</name> 
     <message> 
      <location filename="../../../../../MyFile.cpp" line="1572"/> 
      <source>Delete</source> 
      <translation>Eliminar</translation> 
     </message> 
    </context> 
</TS> 

重複が文脈によって識別されます(すなわちあるMyContextMyOtherContext)とソース(を削除します)。

編集:私はQtの言語学者のソースコードを精査している

。私が知る限り、検証目的のためにts.dtdを使用することは決してありません。すべてがハードコードされています(ts.cppのTSReaderクラスを参照してください)。

教訓は次のとおりです。そして得られたtsファイルは、Qtの言語学者によって再びロードされ、LUPDATE(アプリケーションを再同期する)が受け入れ可能な場合にだけ、あなたがしたいすべての操作を行うことができます。

+0

あなたは正しいですが、同じ文脈、同じ出所、異なる翻訳テキストを持つことは可能です。私はオプションのコメントタグがあることを知りました:TS/context/message/comment。 2つのメッセージに異なるコメントがある場合は、それが受け入れられるようです。少なくとも私はエラーメッセージを受け取りません。 – Giorgio

+0

時間をかけてソースコードを調べてくれてありがとう!あなたはあなたの答えに上記のコメントを移すことができますか?それから私はそれを受け入れることができます。 – Giorgio

+0

ようこそ。あなたを助けてうれしい。 – menjaraz

1

翻訳のための完全なルックアップキーが

コンテキスト+ソース文字列と、存在する場合、曖昧さ回避の文字列

が、これはまただったので、曖昧さ回避の文字列はコメント欄に格納されてhttp://qt-project.org/doc/qt-4.8/i18n-source-translation.html#disambiguation

を参照してくださいです、古いQtバージョンでは、開発者のコ​​メントを挿入する方法(Qt言語学者によってまだ認識されているので、新しいコメント(.tsファイルのコメントはhttp://qt-project.org/doc/qt-4.8/i18n-source-translation.html#translator-commentsを参照))です。

あなたが気づいたように、異なる曖昧さ回避文字列を持つ限り(またはどちらか一方には矛盾文字列がないかぎり)、同じコンテキストとソース文字列を持つ2つの文字列を持つことができます。

関連する問題