MVC および検証属性で Westwind.Globalization を確実に使用できます。MVC 検証は厳密に型指定されたリソースと型マッピングに依存しているため、これを機能させるには、厳密に型指定されたリソースを dbResource ファイルからエクスポートします。これにより、db リソース内の ResourceSet ごとに厳密に型指定されたカスタム クラスが作成されます。
厳密に型指定されたリソース クラスは次のようになります。
public class Resources
{
public static System.String NameIsRequired
{
get
{
if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.AspNetResourceProvider)
return (System.String) HttpContext.GetGlobalResourceObject("Resources","NameIsRequired");
if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.Resx)
return ResourceManager.GetString("NameIsRequired");
return DbRes.T("NameIsRequired","Resources");
}
}
public static System.String AddressIsRequired
{
get
{
if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.AspNetResourceProvider)
return (System.String) HttpContext.GetGlobalResourceObject("Resources","AddressIsRequired");
if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.Resx)
return ResourceManager.GetString("AddressIsRequired");
return DbRes.T("AddressIsRequired","Resources");
}
}
... any others in the same resource set
}
これは、同じクラス (DbRes ResourceManager、dbRes ASP.NET ResourceProvider、またはプレーンな Resx.
その後、ASP.NET MVC モデルの検証属性で標準の Resx の厳密に型指定されたリソースを参照するのと同じ方法で、厳密に型指定されたリソースを参照できます。
public class ViewModelWithLocalizedAttributes
{
[Required(ErrorMessageResourceName = "NameIsRequired", ErrorMessageResourceType = typeof(Resources))]
public string Name { get; set; }
[Required(ErrorMessageResourceName = "AddressIsRequired", ErrorMessageResourceType = typeof(Resources))]
public string Address { get; set; }
}
サンプル プロジェクトに例があります。モデル フォルダーを開くと、モデルと、そのビューをローカライズされた値で使用する ModelAttributesFromResources.cshtml ビューが表示されます。
これについても説明している wiki のトピックがあります。
https://github.com/RickStrahl/Westwind.Globalization/wiki/Model-Validation-Message-for-ASP.NET-and-EntityFramework