2011-10-17 6 views
1

とローカライズ:ASP MVC 3 - 誰かが私はこのコードで間違ってやっている何を教えてもらえますLocalizationDisplayNameAttribute

public class LocalizationDisplayNameAttribute : DisplayNameAttribute 
    { 


    public LocalizationDisplayNameAttribute(string resourceKey) 
    { 
     ResourceKey = resourceKey; 
    } 


    public override string DisplayName 
    { 
     get 
     { 
      string displayName = App_GlobalResources.Global.ResourceManager.GetString(ResourceKey); 

      return string.IsNullOrEmpty(displayName) 
       ? string.Format("[[{0}]]", ResourceKey) 
       : displayName; 
     } 
    } 

    private string ResourceKey { get; set; } 


} 

文化は、CSに設定されています。私は2つのリソースがありますGlobal.resxとGlobal.cs.resxを、私は、このアプリケーションを実行すると、私はいつもGlobal.resxから文字列を取得(それはGlobal.cs.resxする必要があります)

+0

アプリケーションをデバッグし、スレッドのカルチャとUIカルチャが何であるかを確認できますか? – marcind

答えて

1

以下は、私のために正常に動作します:

public class LocalizationDisplayNameAttribute : DisplayNameAttribute 
{ 
    public LocalizationDisplayNameAttribute(string resourceKey) 
    { 
     ResourceKey = resourceKey; 
    } 

    public override string DisplayName 
    { 
     get 
     { 
      string displayName = Global.ResourceManager.GetString(ResourceKey); 
      return string.IsNullOrEmpty(displayName) 
       ? string.Format("[[{0}]]", ResourceKey) 
       : displayName; 
     } 
    } 
    private string ResourceKey { get; set; } 
} 

ビューモデル:

public class MyViewModel 
{ 
    [LocalizationDisplayName("foo")] 
    public string Foo { get; set; } 
} 

コントローラー:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel()); 
    } 
} 

ビュー:

@model MyViewModel 
@Html.LabelFor(x => x.Foo) 
@Html.EditorFor(x => x.Foo) 

資源:

~/App_GlobalResources/Global.resx

foo: foo 

~/App_GlobalResources/Global.cs.resx

foo: localized foo 

~/web.config

<system.web> 
    <globalization culture="cs" uiCulture="cs"/> 
    ... 
</system.web> 

は、正しいローカライズされた値を出力します。

関連する問題