2012-03-18 7 views
0

ASP.NET MVC 3プロジェクトでのローカリゼーションの作成方法は?ローカリゼーションの作成方法

私のアプリでは2つの言語を使いたいと思っています。私はそれがResoursesファイルと関係があると聞いていましたが、どういう仕組みか分かりません。

答えて

2

あなたはこのような何かを行うことができます:

  1. Resource.resxと呼ばれるリソースファイルを追加するには、ローカライズされたリソース
  2. のためのクラスライブラリプロジェクトを作成します。
  3. ファイルを開き、Access ModifierのドロップダウンをPublicに変更します。ここでファイルのプロパティを見ると、Custom ToolプロパティはPublicResXFileCodeGeneratorに設定されます。これにより、コンパイル時にと呼ばれるstaticclassが作成され、追加するすべての文字列名が作成されます。
  4. デフォルト言語のためにName/Value個のペアをここに追加してください。
  5. たとえば、Resource.fr-FR.resxという2番目のリソースファイルを追加します。
  6. フランス語で以前のリソースファイルに追加した名前を追加します。Values
  7. このクラスライブラリへの参照をMVCアプリケーションから追加します。
  8. アプリケーションで必要に応じてカルチャを変更し、Resource.NameOfPropertyを使用して、さまざまなローカライズされた文字列にアクセスします。設定されたカルチャに基づいて正しい値を得ることを処理するResourceManagerclassがあります。リソースファイルの命名規則に従うだけです。 Resource.{culture-code}.resx

上記のようなクラスライブラリプロジェクトを作成した後、ここにあなたのMVCアプリケーションでの培養を切り替えるための一つの選択肢です。

あなたの文化がURL経由で

routes.MapRoute(
    "DefaultCultureRoute", 
    "{culture}/{controller}/{action}/{id}", 
    new 
    { 
     culture = "en", 
     controller = "Home", 
     action = "Index", 
     id = UrlParameter.Optional 
    } 
); 

を渡すことができるように、コントローラ

public class ApplyCulture : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
    } 

    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var culture = new System.Globalization.CultureInfo(filterContext.RouteData.GetRequiredString("culture")); 

     System.Threading.Thread.CurrentThread.CurrentCulture = culture; 
     System.Threading.Thread.CurrentThread.CurrentUICulture = culture; 
    } 
} 
に適用することができ文化を設定するための属性を作成し、このような何かをルートを追加します。

すべてのコントローラが継承するベースコントローラにこの属性を追加します

01リソースへのアクセス
[ApplyCulture] 
public class BaseController : Controller { } 

この

Resource.NameOfProperty 
のと同じくらい簡単です
関連する問題