0

現在、翻訳エンジンを実装している WinForms アプリがあります。これまでのところ、次のような構文に従う一連のテキスト ドキュメントがあります。

messages.manualupdate="There is a manual update available for ProgName.\n\nDo you want to update to version {0}.{1}.{2}{3}?"
messages.errorcopy="Clicking OK will copy the error so you can paste it elsewhere!"
messages.error="Error"
messages.notsupported.title="Unsupported client"
messages.notsupported.message="This version is no long supported. Please wait for an update."

たとえば、さまざまな言語用にこれらがたくさんあります。

messages.manualupdate="é disponibile un'aggiornamento manuale del programma ProgName.\n\nVuoi aggiornare alla versione {0}.{1}.{2}{3}?"
messages.errorcopy="Cliccando OK eseguirete una copia degli errori visualizzati"
messages.error="Error"
messages.notsupported.title="Client non supportato"
messages.notsupported.message="Questa versione non è utilizzabile al momento. attendi il prossimo aggiornamento!"

DynamicObject次に、これを のようにアクセスできる に解析しますlanguage.messages.notsupported.error。私が知りたいのは、フォーム上のすべてのコントロールをリンクして、作成時に動的オブジェクトの変数を使用できるかどうかです。たとえば、フォームに「エラー」というテキストを入れたいボタンがあります。フォームが表示される前にlanguage、ユーザーが選択した言語に変数を設定し、フォームが表示されたら、language. すべてのボタンテキストを値に設定してからすべてを変更するのは少し無駄に思えるので、フォームコンストラクターで呼び出されるメソッドを記述する必要はなく、デザイナーでこれを行う方法はありますか?フォームがロードされたとき。私は一種のバインディングを探していますが、コントロールの Text パラメータに。

誰にもアイデアはありますか?

4

2 に答える 2

1

MSDNには、リンクに役立つ可能性のある文字列のローカリゼーションに関するウォークスルーがあります。

于 2012-12-21T07:35:46.720 に答える
0

正直なところ、あなたが避けようとしているアプローチは、私には最適に見えます。テキストを設定しようとしているコントロールのプロパティを作成することをお勧めします。[属性の設定] で、選択した言語を確認し、適切なテキストを取得します。

public string Error
{
    set { _errorLabel.Text = value; }
}

private void SetText()
{
    if(EnglishSelected)
        Error = "English";
}

時間の無駄に関しては、デザイナで何も設定せず、Lo​​ad フォームでプロパティを直接設定することをお勧めします。しかし、ここでもう 1 点付け加えておきたいのは、どのアプローチもアプリケーションの速度に影響を与えないということです。最初に、アプリケーションを拡張可能で保守可能にすること、次に高速にすることです。デザイナーで論理的なものを設定することは、常に悪い習慣です。あなたのアプリケーションが小さい/小さくない場合は、MVPのようないくつかの設計パターンに従って、これらすべての論理的なものを Presenter に移動することをお勧めします。説教しようとしているのではなく、ただ示唆しているだけです。

はい、私たちの会社では、チームの 1 つがアプリケーションのローカライズ部分に取り組んでいます。これを行うには、リソースを使用する方がよい場合があります。

それが役に立てば幸い。

于 2012-12-21T07:37:48.650 に答える