web-dev-qa-db-ja.com

ASP.NETのグローバルリソースとローカルリソース

Resxファイルを使用して、Webアプリケーションをローカライズします。通常、1つのページだけが特定のフレーズを使用する場合は(特定のページにマップする)ローカルresxファイルを作成し、複数のページがフレーズを必要とする場合はグローバルresxファイルを作成します。
しかし、グローバルresxファイルの良い点は、それらがクラスであること、そしてクラスのプロパティを呼び出すようなフレーズを呼び出すことができることです。

Resource.UI.iNotFound

だから私は考えていました-なぜローカルのresxファイルがあるのですか?アプリケーション全体で1つのグローバルresxファイルを使用して、存在しないフレーズを呼び出すことによるランタイムエラーを回避するのはなぜですか?

きっと良い答えがあると思いますが、それが何なのかわかりません。

37
Lea Cohen

私はガイドラインを探し続け、これを [〜#〜] msdn [〜#〜] で見つけました:

グローバルリソースファイルとローカルリソースファイルの選択

Webアプリケーションでは、グローバルリソースファイルとローカルリソースファイルの任意の組み合わせを使用できます。通常、ページ間でリソースを共有する場合は、リソースをグローバルリソースファイルに追加します。グローバルリソースファイル内のリソースも、プログラムでファイルにアクセスする場合に強く型付けされます。

ただし、ローカライズされたすべてのリソースを格納すると、グローバルリソースファイルが大きくなる可能性があります。複数の開発者が1つのリソースファイルでさまざまなページに取り組んでいる場合は、グローバルリソースファイルの管理も難しくなる可能性があります。

ローカルリソースファイルを使用すると、単一のASP.NET Webページのリソースを管理しやすくなります。ただし、ページ間でリソースを共有することはできません。さらに、多くの言語にローカライズする必要のあるページが多数ある場合は、多数のローカルリソースファイルを作成する可能性があります。サイトが多くのフォルダと言語を含む大規模な場合、ローカルリソースはアプリケーションドメイン内のアセンブリの数をすぐに増やすことができます。

ローカルまたはグローバルの既定のリソースファイルに変更を加えると、ASP.NETはリソースを再コンパイルし、ASP.NETアプリケーションを再起動します。これはサイトの全体的なパフォーマンスに影響を与える可能性があります。サテライトリソースファイルを追加しても、リソースの再コンパイルは行われませんが、ASP.NETアプリケーションは再起動します。

したがって、各メソッドの長所と短所を比較検討し、それらに適したものを選択するのは、プログラミングチームの責任であるようです。

50
Lea Cohen

Joe90-私の経験では、プロジェクト全体に散在する多数のローカルリソースファイルを管理する方が、1つのグローバルリソースファイルを管理するよりも簡単であることに同意できません。同じ翻訳の繰り返しを何度も停止することは何もありません。それらを追跡することは非常に困難です。グローバルリソースファイルへのアクセスは、チーム内で調整するのが非常に簡単で、複数のユーザーは、必要な翻訳が既に行われているかどうかを一目で確認できます。

私はLeaとまったく同じポリシーから始めました。つまり、ローカルリソースファイルから始めて、それが複数回参照されている場合は、これをグローバルリソースファイルに移動します。これはすぐに管理の面倒な負担になり、それ以来、毎回グローバルリソースファイルを使用するようになりました。

ベストプラクティスとは何か、または2つの方法を実装して推測を危険にさらす方法については、Microsoftによる明確なガイドラインはないようです。

私は推測比較/見返りは、ローカルリソースファイルは関連するファイルの再コンパイルのみを必要とするのに対し、グローバルリソースファイルを変更すると、Webサイト全体の再コンパイルが必要になるようです-セッション状態などの固有の損失のため、更新中に安全のためにサイトをオフラインにする必要があります。

15
user74207

1つの製品について少なくとも10人の開発者からなる開発チームがあり、サイトごとに1つのグローバルresxを使用しています。

この大きなresxファイルのマージに関する問題は、私の意見では問題ではないはずです。

サイトで自分で言語を設定した開発者が10人いる場合、サイトで自分を表現する統一された方法をどのように取得しますか?開発者は、文法的な表現ではなく、コードが得意になる傾向があります。 (私自身も開発者です。)

言語の専門家はresxファイルを編集して、開発者のためにロックする必要があります。

7

グローバルリソースファイルは、翻訳に最適な方法です。重要なのは、文字列名の最初の数文字のページ名の省略形などの命名規則を使用して、Webページごとにリソースを簡単に見つけられるようにすることです。複数のページで多くのフレーズを再利用しようとすると、翻訳者の混乱がさらに大きくなります。

「はい」、「いいえ」、「BTN_OK」、「BTN_Cancel」、「QTN_AreYouSure」などのように、ページの命名規則がないこと(最初の数文字にはページ名の省略形がない)を使用して、再利用可能なフレーズを好きなだけ定義できます。 RESXの大部分の行は各ページに固有であり、可能な限り再利用を試みることに集中するべきではありません。ファイル全体で1つのフレーズを変更するには、必要に応じてテキスト検索/置換を使用して数分で慎重に行うことができます。

2
Michael Urvan