私はちょうど私のthis questionを少し伸ばしています。mvc3の@ Html.LabelFor()から来るコンテンツのローカライズ方法
私は私のMVC WebアプリケーションにApp_LocalResourcesを持っています(別のDLLにはありません)。
私は異なるアセンブリで私のモデルを持っています。モデルでは、私は2クラスCountry
とCity
を持っている:
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();
}
}
、その後:あなたはカスタム表示属性書くことができ
返信いただきありがとうございます、私はそのコードを持っています。しかし、問題は今私の国、都市、MyContainerのクラスが異なるプロジェクト(Location.Modelという名前)にあることです。私のリソースファイルは私のmvc3 Webアプリケーションプロジェクトにあります。 Location.Modelは私には思われるが、自動生成されたコード、csファイルのcozは "<自動生成された> //このコードはテンプレートから生成された"というコメントと、いくつかの.ttファイルその中に。だから私がどこでどのように変更を行うかを理解するのを助けてください。私は私のResourcesプロジェクトを分離する必要がありますか?助けてください。 – thinkmmk
@thinkmmk、自動生成されたモデルをビューに渡すべきではありません。私はそれがいくつかのEF自動生成ドメインモデルだと思います。常に特定のビュー用に設計されたクラスであるビューモデルを定義する必要があります。 –
私はあなたの意見を持っていましたが、このプロジェクトはかなり複雑で広大であるようです。だから私はどのように最小限の変更で前進する必要がありますか。新しいクラスの新しいオブジェクトを作成し、それをモデルとして渡す必要がありますか?しかし、これは重複したクラスを作成することです。 – thinkmmk