まず、次のようにメッセージを Resources ファイルに保存する必要があります。
Resources/ErrorMessages.resx // default messages
Resources/ErrorMessages.fr.resx // for french
サーバー側では簡単に変更でき、モデルに属性を追加することでそれを行うことができます。そのようにします:
[Required(ErrorMessageResourceType = typeof(Resources.ErrorMessages), ErrorMessageResourceName = "FieldRequired")]
「 FieldRequired 」は、 Resources.ErrorMessagesのフィールドの 1 つです。
注意が必要なのは、クライアント側の検証も機能させたい場合です。属性の1つを拡張し、 IClientValidatableも実装する独自の属性クラスを作成する必要があります。
あなたはそのようにします:
public class CustomRequiredAttribute : RequiredAttribute, IClientValidatable
{
public override string FormatErrorMessage(string name)
{
return String.Format(ErrorMessages.FieldRequired, name);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRequiredRule(String.Format(ErrorMessages.FieldRequired, metadata.DisplayName));
return new[] { rule };
}
}
これからは、モデルで Required の代わりに CustomRequired を使用します。また、毎回メッセージを指定する必要はありません。
編集
SynerCoder の回答に対するあなたのコメントを見ました。メッセージを自分で翻訳したくないということです。まあ、私はそれが正しいアプローチだとは思わない。標準メッセージを翻訳するものを見つけたとしても、カスタム メッセージは翻訳されないため、おそらく 2 つのアプローチを混在させることになります。これは通常、噛む方法がわからない魔法のエラーにつながります。自分で翻訳を行うことを強くお勧めします (それほど多くのことはありません - 20 かそこらくらいですか?)。利点は、予期しないエラーのない柔軟なソリューションになります。