ASP.NET Core Razor Pages データアノテーションのローカライゼーション
ASP.NET Core Razor Pages でデータアノテーションのローカライゼーションを行ってみましょう。
ローカライゼーションサービスを登録
データアノテーション用のローカライゼーションサービスを登録します。
public void ConfigureServices(IServiceCollection services){ services.AddRazorPages() // 追加ここから .AddDataAnnotationsLocalization(o => { o.DataAnnotationLocalizerProvider = (type, factory) => { return factory.Create(typeof(SharedResource)); }; });// 追加ここまで}リソースファイルの準備
リソースファイル(resx)を束ねるための、ダミークラスを用意します。中身は空のままで大丈夫です。
SharedResource.cs
namespace ASPNET_Core_MVC_Localization.Resources{ public class SharedResource { }}続いて、リソースファイル(resx)を用意し、名前(キー名)と値をそれぞれ設定します。
SharedResource.ja-jp.resx

モデルクラスの Display 属性
モデルクラスのプロパティに Display 属性を付与します。Name プロパティにはリソースファイルの名前(キー名)と一致するように記述します。
public class User{ [Display(Name="Id")] public int Id { get; set; } [Display(Name = "Password")] public string Password { get; set; }}ビューの実装
モデルクラスのインスタンスを作成し、ビューにバインドします。
Index.cshtml.cs
public class IndexModel : PageModel{ public User User { get; set; } private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger) { _logger = logger;
//ダミーデータ this.User = new User { Id = 101, Password = "abcde" }; }
...}Index.cshtml
@page@model IndexModel@{ ViewData["Title"] = "Home page";}
<div> @Html.LabelFor(model => model.User.Id) @Html.DisplayFor(model => model.User.Id)</div><div> @Html.LabelFor(model => model.User.Password) @Html.DisplayFor(model => model.User.Password)</div>実行結果
リソースファイルの値(文字列)が自動的に反映されていることが確認できました。

今回は日本語リソースを用いてローカライゼーションを行いましたが、他のカルチャに対応するリソースを用意することで、他言語へのローカライゼーションを行うこともできます。
ASPNET_Core_MVC_Localization.zip
💬 コメント