5

複数のクライアントに送信する Web サイトがあります。時々、クライアントはマイナーな変更を要求することがあります。私の手に負えない理由により、どんなに些細な要求であっても従わなければなりません。通常、これは問題ではありません。ユーザー コントロールまたはページのクライアント固有のバージョンを作成し、ビルド時にデフォルトのものを上書きするか、それを処理するための構成設定を行うだけです。

現在、サイトをローカライズしているため、言葉遣いを少し変更する最善の方法について知りたいと思っています。

Resources.resx300 個のリソースを含む という名前のリソース ファイルがあるとします。というリソースがありContinueます。英語の値は「Continue」、フランス語の値は「Continuez」です。

現在、1 人のクライアントが、何らかの理由で「次」と「アフター」と表示することを望んでおり、他のクライアントはそれを維持したいと考えています。このような要求に対応するにはどうすればよいでしょうか? (これは単なる例です)。

私が考えることができる唯一の2つの方法は

  • クライアントに固有の別の Resources.resx を作成し、ビルド時に .dll を置き換えます。dll を完全に置き換えるので、新しいリソース ファイルには 300 個の文字列すべてを含める必要があります。明らかな問題は、2 つのリソース ファイルがあり、それぞれに 300 個の文字列を維持する必要があることです。
  • カスタム ユーザー コントロール/ページを作成し、カスタム リソース ファイルを使用するように変更します。たとえば、SignIn.ascx はビルド中に置き換えられ、ClientName.resx代わりにからリソースを取得しResources.resxます。

他に試すことができることはありますか?ClientResources.resx指定されたリソース ファイルを実際に参照する前に、オーバーライドされた値をアプリケーションが常にファイル内で参照するように変更する方法はありますか?

4

2 に答える 2

1

次のテンプレートを使用できます。

#if ClientName1 
Continue="Next";
#elif ClientName2
    Continue="Apres";
#else 
Continue="Continue" 
#endif

これにより、同じファイル(および同じ領域の同じ変数)で可能なすべての値を指定でき、ビルド中にコマンドラインからシンボル「ClientName1」を簡単に定義できます。

于 2010-06-08T17:20:12.630 に答える
0

言いたくないのですが、最も簡単な方法は、インストール時にカスタム アクションを使用してアプリケーション リソース ファイルを変更することです。

ResXResourceWriter / ResXResourceReader を使用して、ターゲット カルチャの既存のリソース ファイルを開き、変更するタグを反復処理します。これは明らかに、特定の顧客にいくつかのマイナーな変更がある場合にのみ意味があります。これは、リソース ファイルがアセンブリに埋め込まれていないことも前提としています。

Windows インストーラーのカスタム アクションの作成は、インストールの完了後にそれらを実行しても問題がない限り、非常に簡単です。

別の方法は、デフォルトの ComponentResourceManager を、タグの値を選択的に変更する独自のバージョンに置き換えることです。これはまた、醜いものになる可能性があります。

私が考えることができる最後のハックは、すべてのデフォルトの翻訳を基本リソース ファイルに入れることです。カスタム リソース ファイルは、関心のあるタグのみを変更する必要があります。空白のままのタグは元の値を取得します。デフォルトの文化はおそらく英語なので、これがどれほど現実的かはわかりません...

編集:これはハックが少ない(まだハックです!)解決策かもしれません。ベルギー フランス語など、同じカルチャ内で別のリソース ファイルを作成できます。ベルギー フランス語のリソース ファイルは、基本的にフランス語のリソース ファイルを継承します。これにより、ほんの一握りのテキスト リソースのみを変更できます。次に、アプリケーション内で、現在のカルチャを "fr" ではなく "fr-BE" に変更します。顧客はおそらく決して知りません。

于 2010-06-08T17:52:35.750 に答える