2012-03-15 6 views
7

私はちょうど私のthis questionを少し伸ばしています。mvc3の@ Html.LabelFor()から来るコンテンツのローカライズ方法

私は私のMVC WebアプリケーションにApp_LocalResourcesを持っています(別のDLLにはありません)。

私は異なるアセンブリで私のモデルを持っています。モデルでは、私は2クラスCountryCityを持っている:

public class Country: MyContainer 
{ 
    public City city {get;set;} 
} 

public class City 
{ 
    public CityName {get;set;} 
} 

public class MyContainer 
{ 
    public Cid {get;set;} 
} 

だから私のアクションメソッドでは、私が作成し、私のviewmodelとして国のオブジェクトを渡します。

そして、私はこれを使用するビューで:

@Html.LabelFor(mdl=>mdl.City.CityName) 
@Html.LabelFor(mdl=>mdl.Cid) 

だから、これはうまく機能してテキストを持つラベルは英語でレンダリングされます。

しかし、これを変更して、Webアプリケーションのリソースファイルからテキストを読み込むにはどうすればよいですか?

public class LocalizedDisplayNameAttribute : DisplayNameAttribute 
{ 
    public LocalizedDisplayNameAttribute(string key): base(FormatMessage(key)) 
    { 
    } 

    private static string FormatMessage(string key) 
    { 
     // TODO: fetch the corresponding string from your resource file 
     throw new NotImplementedException(); 
    } 
} 

、その後:あなたはカスタム表示属性書くことができ

答えて

12

public class City 
{ 
    [LocalizedDisplayName("cityname")] 
    public string CityName { get; set; } 
} 

をまたfollowing localization guideをチェックアウトすることがあります。これは、サンプル属性の完全な実装を提供します。

+1

返信いただきありがとうございます、私はそのコードを持っています。しかし、問題は今私の国、都市、MyContainerのクラスが異なるプロジェクト(Location.Modelという名前)にあることです。私のリソースファイルは私のmvc3 Webアプリケーションプロジェクトにあります。 Location.Modelは私には思われるが、自動生成されたコード、csファイルのcozは "<自動生成された> //このコードはテンプレートから生成された"というコメントと、いくつかの.ttファイルその中に。だから私がどこでどのように変更を行うかを理解するのを助けてください。私は私のResourcesプロジェクトを分離する必要がありますか?助けてください。 – thinkmmk

+0

@thinkmmk、自動生成されたモデルをビューに渡すべきではありません。私はそれがいくつかのEF自動生成ドメインモデルだと思います。常に特定のビュー用に設計されたクラスであるビューモデルを定義する必要があります。 –

+0

私はあなたの意見を持っていましたが、このプロジェクトはかなり複雑で広大であるようです。だから私はどのように最小限の変更で前進する必要がありますか。新しいクラスの新しいオブジェクトを作成し、それをモデルとして渡す必要がありますか?しかし、これは重複したクラスを作成することです。 – thinkmmk

3

App_LocalResourcesは、リソースクラス(あなたの.resx)の名​​前であり、名前はあなたが参照する静的な文字列の名前ですあなたは[Display(ResourceType = typeof(App_LocalResources), Name = "AgreeTandCs")]を使用することができます。あなたのビューでいつものようにLabelForを使用すると、自動的にあなたのリソースを引き込みます。

私の例では、ラベルに変数名AgreeTandCsが格納された文字列が表示されます。英語で表示している場合は、ページに「これらの利用規約に同意します」と表示されます。

0

翻訳文字列内の{0}、{2}パラメータで翻訳を使用することもできます。 彼は私の例ですLocalize Compare attribute

+0

リンクの内容を要約できますか?ありがとう。 – rapvelopment

関連する問題