10

標準アプリケーションでは、次のものがあります。

[Required]
[DisplayName("Email Address")]
public string EmailAddress { get; set; }

...これにより、このフォーム フィールドのラベルが自動的に英語で生成されます。

アプリで 5 つの言語をサポートする必要がある場合、これを処理するための ASP.NET MVC アプリケーションからの最適なアプローチは何ですか?

適用範囲は約 400 ~ 600 データ フィールドです。

更新: ページ名や各フォームの紹介 (小さな段落) など、アプリケーション内のテキストの小さなセクションを更新するためのサポートも必要です。

4

3 に答える 3

9

実際の値を属性プロパティに割り当てる代わりに、リソース文字列のキーを割り当てます。ModelMetadataProvider次に、ローカリゼーション コンテキストを認識し、適切な文字列を提供するカスタムを使用できます。より良い解決策を得るために、カスタムModelMetadataProvider推論規則を作成できます (これにより、詳細な属性の必要性が削減されます)。

Phil Haack のブログ記事Model Metadata and Validation Localization using Conventionsで、これがどのように機能するかを説明しています。また、 https://github.com/Haacked/mvc-metadata-conventionsの github で入手可能なソース コードを含む、 ModelMetadataExtensionsと呼ばれる対応する NuGet パッケージもあります。

補足として、私の古い質問である「Effective Strategies for Localization in .NET」に対して得た素晴らしい回答のいくつかを確認することをお勧めします。彼らはあなたの質問に具体的に答えているわけではありませんが、多言語の .NET アプリで作業している場合は非常に役に立ちます。

于 2012-10-09T23:50:17.933 に答える
-1

ローカライズの最善の方法は、次の場合を除き、文字列をリソース ファイルではなくデータベースに格納することです。

  1. あなたのアプリは非常に静的です
  2. あなたの言語セットは非常に静的です

リソースのデフォルトの文字列とDB IDを設定するカスタム属性でモデルを装飾できます。

[MyResource("email", 123)]

カスタム http 委任ハンドラーを記述して、キャッシュからリソースを取得できます (たとえば)。クライアントを認証すると、クライアントの言語要求とリソース ID がわかります。したがって、スペイン語でリソース ID = 1 のクライアントは「Si」を取得し、英語のクライアントは「Yes」を取得します。リソース ID は、言語固有の文字列にマップされます。

于 2012-10-12T20:45:28.527 に答える
-1

[MyDisplayName("Section", "Key")]のようなカスタム属性を作成する と、選択した言語に基づいて翻訳が提供されます。また、 http://www.west-wind.com/presentations/wwDbResourceProvider/などのデータベース駆動型リソース マネージャーも確認してください。

于 2012-10-09T20:25:30.690 に答える