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>
実行結果
リソースファイルの値(文字列)が自動的に反映されていることが確認できました。

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