2010-03-17 7 views
6

J'essaie actuellement de trouver comment localiser les messages d'erreur générés par MVC. Permettez-moi d'utiliser le classeur par défaut comme exemple, afin que je puisse expliquer le problème.Localisation MVC du lieur de modèle par défaut

En supposant que j'ai un formulaire, où un utilisateur entre leur âge. L'utilisateur entre alors "dix" dans le formulaire, mais au lieu d'obtenir l'erreur attendue de

"L'âge doit être compris entre 18 et 25."

le message

"La valeur 'dix' est pas valable pour l'âge."

est affiché.

propriété L'âge de l'entité est définie ci-dessous:

[Range(18, 25, ErrorMessageResourceType = typeof (Errors), 
     ErrorMessageResourceName = "Age", ErrorMessage = "Range_ErrorMessage")]  
    public int Age { get; set; } 

Après quelques recherches, je constate que ce texte d'erreur provient du System.Web.Mvc.Resources.DefaultModelBinder_ValueInvalid dans le fichier MvcResources.resx.

Maintenant, comment créer des versions localisées de ce fichier?

Comme solution, par exemple, devrais-je télécharger la source MVC et ajoutez MvcResources.en_GB.resx, MvcResources.fr_FR.resx, MvcResources.es_ES.resx et MvcResources.de_DE.resx, puis compiler ma propre version de MVC.dll?

Mais je n'aime pas cette idée. Quelqu'un d'autre sait-il un meilleur moyen?

+0

Un bon blog à ce sujet est aussi ici: http://bradwilson.typepad.com/blog/2010/01/input- validation-vs-model-validation-in-aspnet-mvc.html –

Répondre

5

Voir http://forums.asp.net/p/1512140/3608427.aspx, faites défiler vers le bas pour la réponse de Brad Wilson au bas de cette page (Sat, Jan 09 2010, 3:20 PM). Il existe des propriétés statiques sur DefaultModelBinder que vous pouvez définir pour localiser les messages d'erreur génériques.

La raison pour laquelle un message d'erreur générique est utilisé à la place de votre message [Range] est que [Range] fournit un message d'erreur de validation , mais ce cas particulier est un liant erreur. Il n'y a absolument aucun moyen que le framework puisse espérer convertir la chaîne "ten" en un Int32, donc il ne peut même pas déclencher le validateur [Range]. C'est ce que la clé "PropertyValueInvalid" mentionnée dans ce forum contrôle.

+0

Merci, c'est exactement ce que je cherche. –

+0

Les clés telles que "PropertyValueInvalid" sont-elles officiellement documentées quelque part? – Johnny5

0

Avez-vous essayé: IDataErrorInfo propriété

Cet article vous aidera

+0

Pour la validation, j'utilise Fluent Validation. Le problème ici n'est pas avec la validation, je pense? Le problème est que le MVC, ou dans ce cas, le classeur de modèle par défaut ne localise pas les messages d'erreur lorsqu'il ajoute son propre message d'erreur au dictionnaire ModelState.Error. Je veux utiliser exactement le même comportement que le classeur de modèle par défaut fournit, mais je veux localiser ces messages d'erreur dans d'autres langues –

3

Dans MVC3 procédez comme suit pour modifier les messages par défaut:

  1. ajouter le dossier App_GlobalResources à votre site ASP.NET
  2. ajouter un nouveau fichier de ressources, appelez f.ex. Mes ressources.resx
  3. ajouter ces clés
    • PropertyValueRequired: Une valeur est requise.
    • PropertyValueInvalid: La valeur '{0}' n'est pas valide pour {1}.
  4. dans Application_Start de Global.asax.cs ajouter la ligne DefaultModelBinder.ResourceClassKey = "MyResources";
Questions connexes