web-dev-qa-db-ja.com

ASP.NET-MVC 3:ローカリゼーション

MVC3 Webアプリケーションのローカリゼーションを実装しようとしています。それを行うための多くの方法を調べて、これを実装する方法がわからなかった。私はそれを行う方法をいくつか見つけました:

最初に見つけたオプションは、App_GlobalResourcesとViewData、およびカルチャ選択をマップルーティングで使用することでした。 ( リンク

2つ目は、プロジェクトに別のResourcesフォルダーを作成し、ModelフォルダーやViewフォルダーのように構造化することでした。次に、それらのフォルダーにリソースファイルを作成します。これらのリソース文字列を使用するには、Viewbagを使用するのと同じです。次に、Global.asaxを編集してカルチャの変更を処理し、カルチャの変更を許可する部分ビューを作成します。これを行うための指示は非常に完全なので、これが最善の策かもしれません。 ( リンク

3番目は、DisplayAttributeとresx-filesを使用することでした。これは少し漠然としたものでしたが、実際にどのように実装されているのか、またどのような制限があるのか​​を把握するための情報が見つかりませんでした。 ( リンク

4つ目は、リソースを処理するカスタムクラスを作成することでした。これはかなり凝ったもので、実装と使用が簡単に見えましたが、実際に機能した場合、実際の情報は見つかりませんでした。 ( リンク

その後、App_GlobalResoucesとApp_LocalResourcesの使用について警告する投稿を見つけました。 ( リンク

ローカリゼーションを行うための可能な方法を経た後。普遍的に承認または受け入れられている方法を見つけることができませんでした。これにより、ASP.NET MVC3でローカリゼーションを実装するための最良の方法は、これらのうちどれか、または私が見つけられなかったもののどれであるかを考えさせられました。

36
Esa

次に、App_GlobalResoucesとApp_LocalResourcesの使用について警告する投稿を見つけました。 (リンク)

その投稿は非常に役に立ちました。そこに説明されている方法はとてもきれいです。これは、そのメソッドを使用して新しく作成したインデックスビューのスニペットです。

@using Resources.Index
@{
    ViewBag.Title = "Index";
}

<h1>@Index.Title</h1>

決定的なdo-it-this-way-or-elseメソッドがあるとは思えないので、最もクリーンな方法を採用することは、私にはかなりやりがいのあるように思えます。

6
Tjaart

リソースファイルや属性を使用する必要がない、ローカリゼーションを処理する簡単な方法を考え出しました。カスタムメタデータプロバイダーが含まれます。

MVC3は、メタデータプロバイダーを使用してすべてのテキスト文字列を取得します。私のアプローチでは、文字列テーブル、データベース、フラットファイル、またはその他のソースを使用して翻訳を提供できます。あなたがする必要があるのは2つのインターフェースを継承することです。

それについてここで読んでください: http://blog.gauffin.org/2011/09/easy-model-and-validation-localization-in-asp-net-mvc3/

編集

すべてがgithubに文書化され、nugetパッケージがあります: https://github.com/jgauffin/griffin.mvccontrib

6
jgauffin