ASP.NET MVCでデータアノテーションを多言語化する

今日ちょっとなやんでしばやん先生に即答してもらったのでメモ。

まずリソースファイルをPublicにしておきます。要確認。
リソースファイルのプロパティでカスタムツールを PublicResXFileCodeGenerator にしてビルドアクションで”埋め込まれたリソース”にしておきます。

あとはデータアノテーションのところでリソース指定するだけ。

例:ASP.NET MVCで既定で生成されるAccountModelなど

[Display(ResourceType = typeof(YOURNAMESPACE.App_GlobalResources.StringResources), Name = "ResUserName")]
public string UserName { get; set; }

超簡単ですね。

ASP.NET MVC3での多言語対応はこちらも参照。

ただこれやって発行したりするとリソースDLLはできてるんだけど読み込めないみたいなんですよね。なんでだろ。。まだ調べてる途中なのでわかったら追記等します。

2011.02.23 追記

いろいろ見てると以下の事がわかりました。

  • データアノテーションで記載したリソースへのアクセスだと問題ない。
  • ビュー等で@HttpContext.GetGlobalResourceObject("StringResources", "String1") といった形式でアクセスするとNullが返る

ということでGetGlobalResourceObjectが問題。Webアプリケーションの発行先にApp_GlobalResourcesフォルダ(と.resxファイル)があれば問題なく動作しますが、埋め込みリソースとしてビルドするとアセンブリに埋め込まれて(あとサテライトアセンブリが出来て)発行先にはApp_GlobalResourcesフォルダは含まれません。

で、この状態でGetGlobalResourceObject呼び出すとNGと。嵌ってた状況はこんな感じです。

じゃぁどうやってアクセスするんだ?というと単純にリソースは既にPublic化されているわけですから

@MvcApplication1.App_GlobalResources.StringResources.String1

みたいにしてあげればいいわけですね。やぁ長かったよ。

参考にしたサイトはこちら。

ゼロから始めるといろいろ壁にあたりますね~。

ASP.NET MVCでデータアノテーションを多言語化する」への1件のフィードバック

  1. ピンバック: ASP.NET MVC でURLによる言語切り替え | たんたか

コメントを残す