5

たとえば、この既定の ASP.NET MVC 4 検証メッセージThe value 'qsdqsdqs' is not valid for Montantをフランス語で表示したいと考えています。

このパッケージhttp://nuget.org/packages/Microsoft.AspNet.Mvc.fr/を見つけてインストールしましたが、どうすれば動作しますか?

web.configに追加<globalization culture="fr-FR" uiCulture="auto:fr" />して dll を参照しましたが、メッセージはまだ英語です

4

2 に答える 2

11

まず、次のようにメッセージを 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 かそこらくらいですか?)。利点は、予期しないエラーのない柔軟なソリューションになります。

于 2013-02-05T14:24:18.247 に答える