3

私は、他のコンパイルされた C# アプリケーション (.exe) を読み込んで、EXE からフォームを表示できる翻訳アシスタントを構築しようとしています。現在の英語の単語を表示する英語の列が隣にあるテーブルとともに、個別に表示されます。表示され、翻訳者が入力できる値の別の列。翻訳が完了すると、翻訳者は翻訳を resx ファイルにエクスポートしてプロジェクトに追加したり、記録目的で Excel ファイルとしてエクスポートしたりできます。

私はC#を初めて使用するため、構造が正しいかどうかわかりません。コンパイラー中にdllが.exeに挿入されるように設計し、このdllを使用して、翻訳アプリケーションが文字列を抽出できます。これはほとんどの文字列で機能しますが、複数の文字列が異なる時間に同じテキスト ボックスに表示される場合 [切断、接続など] でスタックします。どこでも検索してみましたが、アプリケーションを作成するために、アプリケーションからすべての文字列を引き出し、それらがどのフォームに属しているかを特定する方法に関する情報を見つけることができません。

私が直面している他の問題は、実際に翻訳された文字列を表示することです。翻訳された文字列がどのように見えるかの例を表示できれば、私が構築しているアプリケーションは非常に有益です。しかし、コンパイルされたアプリケーションの側面を読み取ってインスタンスを作成することしかできないことがわかりましたが、それを翻訳することはできません。

Reflection を使用して exe を読み込んでいますが、オンラインで、reflection.emit を使用してフォームを変更する必要があることを理解しました。しかし、フォームから識別され、インスタンスとして抽出されるすべての文字列を見つけているため、文字列を変更すると文字列のインスタンスのみが変更され、フォーム自体のインスタンスは変更されません。したがって、私は正しい表示ができません。

私はこれらの最後の 2 つの質問を解決するために 3 週間試みてきました。これを解決するのを手伝ってくれてありがとう。

4

1 に答える 1

0

テキストボックスに表示される可能性のあるテキストに関する問題の一般的な解決策を見つけることができないと思います。理由は次のとおりです。
テキストがリソース ファイルにある場合、それらを読むことはできますが、それらがどこで使用されているかはまだわかりません。テキストがどこに表示されているかを知るには、ソース コードを複雑に分析する必要があります。この小さなシナリオを想像してみてください:

textBox.Text = GetCorrectText(connection.State);

GetCorrectText は次のようになります。

string GetCorrectText(ConnectionState state)
{
    return string.Format(Resources.ConnectionState, state);
}

Resources.ConnectionState は、「接続の状態は {0} です」の可能性があります。

これは単純な例ですが、多くのことを知ったり抽出したりする必要があります。

  1. TextBox クラスの text プロパティは、ユーザーに表示される文字列です。
  2. メソッド GetCorrectText はテキストを返すので、それを解析する必要があります。
  3. メソッド string.Format はテキストを返します。ここで、string.Format に対してそれをハードコードする必要があります。最初のパラメーターを表示されるテキストとして使用するか、string.Format を解析してその事実を知る必要があります。

この例は別のことを示しています。表示されている文字列全体を翻訳することはできません。これは、その一部が列挙値の名前であるためです。

私がお見せしたいのは、トレードオフを行う必要があるということです。

于 2011-02-17T10:57:27.803 に答える