今日ちょっとなやんでしばやん先生に即答してもらったのでメモ。
まずリソースファイルをPublicにしておきます。要確認。
リソースファイルのプロパティでカスタムツールを PublicResXFileCodeGenerator にしてビルドアクションで”埋め込まれたリソース”にしておきます。
あとはデータアノテーションのところでリソース指定するだけ。
例:ASP.NET MVCで既定で生成されるAccountModelなど
[Display(ResourceType = typeof(YOURNAMESPACE.App_GlobalResources.StringResources), Name = "ResUserName")] public string UserName { get; set; }
超簡単ですね。
ASP.NET MVC3での多言語対応はこちらも参照。
- ASP.NET MVC 3 の Razor でも多言語対応を試してみる (まめしば雑記)
ただこれやって発行したりするとリソース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 でURLによる言語切り替え | たんたか