Est-il possible d’utiliser une variable pour l’annotation de données “ dans MVC3

je ne sais pas pourquoi, mais les annotations de données dans MVC3 insistent pour que les valeurs soient constantes, ce que je ne comprends tout simplement pas, par exemple pour les messages d’erreur et les noms d’affichage. J’adore ces annotations, elles sont si faciles à utiliser et si puissantes, mais que faire si vous avez besoin de prendre en charge plusieurs langues?

Imaginez que j’ai le modèle suivant:

public class Person { public ssortingng First_Name { get; set; } } 

Si je ne change rien et utilise les vues CRUD que MVC3 construira pour moi, je reçois une étiquette à côté des champs de texte qui dit “First_Name”, donc j’ajoute l’annotation de données pour changer le nom d’affichage comme suit:

 public class Person { [Display(Name="First name")] public ssortingng First_Name { get; set; } } 

Ce qui fonctionne très bien. Mais je souhaite fournir un nom d’affichage différent en fonction de la langue de l’utilisateur, à l’aide d’une fonction précédemment GetDisplayName(ssortingng ToGet, ssortingng Language) qui ne fait que GetDisplayName(ssortingng ToGet, ssortingng Language) la chaîne qui m’intéresse, mais si je modifie mon annotation de données en ceci:

 public class Person { [Display(Name=GetDisplayName("First_Name", "English"))] public ssortingng First_Name { get; set; } } 

Ensuite, j’obtiens une erreur de compilation qui me dit que l’annotation nécessite des valeurs constantes, POURQUOI ????

Est-ce que quelqu’un connaît un moyen d’accomplir ce que j’essaie de faire? Merci

METTRE À JOUR

Ok, il semble que la meilleure façon de procéder consiste à .resx des fichiers de ressources .resx , comme .resx dans plusieurs réponses ci-dessous et dans d’autres publications. qui fonctionne très bien pour la plupart.

Est-ce que quelqu’un sait comment je peux demander une ressource avec un nom de variable? pas dans le contexte des atsortingbuts de données cette fois, mais seulement dans les contrôleurs et les vues.

En ce moment, je me lance dans les ressources avec @Resources.SomeKey mais j’aimerais pouvoir l’utiliser dans une fonction de @Resources["SomeOtherKey"]SomeOtherKey est une chaîne générée dynamicment.

Si vos noms de propriété traduits dans les fichiers de ressources sont pris en charge immédiatement, il n’est pas nécessaire d’étendre la structure.

Il suffit d’utiliser:

 [Display(Name = "Resource_Key", ResourceType = typeof(DataFieldLabels))] public ssortingng myProperty { get; set; } 

Où “Resource_Key” est la clé dans vos fichiers de ressources … et “DataFieldLabels” est le nom de votre fichier de ressources de base.

MODIFIER:

Pour accéder dynamicment aux fichiers de ressources, vous pouvez effectuer les tâches suivantes:

 ResourceSet resset = ResourceManager.GetResourceSet(culture, true, false); var translated = resset.GetSsortingng("myToken") 

Les valeurs de paramètre DataAnnotations nécessitent des constantes, c’est-à-dire des chaînes réelles.

Vous ne pouvez affecter que des constantes.

Vous pouvez créer une extension et y affecter des valeurs keyValues, puis l’extension est récupérée ailleurs, comme une firebase database, un fichier de ressources, un service Web ou autre.

Vous voudrez peut-être vérifier le post de Hanselman concernant l’internationalisation. Peut-être que cela pourrait aider

 [Display(Name = "strResourceSsortingng", ResourceType = typeof(Resourcefile.strResourceSsortingng))]