2015-11-18 1 views
0

Je construis une application MVC multilingue et j'ai une série de fichiers de ressources avec des chaînes traduites pour les messages qui seront affichés à l'utilisateur."Interface" pour les fichiers de ressources .Net

Est-il possible de s'assurer que tous les fichiers de ressources ajoutés à l'avenir contiennent toutes les clés requises et sont correctement orthographiés? Par analogie, si le fichier de ressources était une classe régulière, vous pourriez fournir une interface pour vous assurer que toutes les méthodes et propriétés requises étaient présentes dans la classe d'implémentation. Existe-t-il un concept similaire pour les fichiers de ressources?

+0

Je crois que les fichiers de ressources ont une valeur de repli par défaut. Par exemple, si vous définissez les valeurs dans 'Resources.resx', toutes les clés manquantes dans' Resources.es.resx' reviendraient au premier fichier. Cela ne garantit pas qu'ils seront mis en œuvre, mais assure que quelque chose sera là. –

+1

Une meilleure analogie pour les fichiers de ressources .NET serait une classe de base avec des méthodes virtuelles, qui peuvent (ne doivent pas) être remplacées dans les classes dérivées –

+0

@MaxHampton true, mais j'aimerais quand même avoir une validation si possible. – Steve

Répondre

1

Je n'ai pas réussi à trouver une méthode prise en charge pour appliquer un contrat explicite sur un fichier .resx. Puisque votre but est finalement d'attraper les erreurs d'implémentation avant qu'elles n'apparaissent au moment de l'exécution (et que la vérification de la compilation ne soit pas possible), je recommande de retomber dans l'analyse de code statique. Heureusement, .NET rend ce trivialement facile:

  • Utilisez la classe System.Resources.ResXResourceReader pour lire le contenu des fichiers resx à valider.
  • Implémentez un test qui s'affirme contre toutes les clés requises dans le "contrat" ​​que vous souhaitez appliquer sur le resx.
  • Le test doit être exécuté dans le cadre d'une suite de tests existante, et l'échec avertira un développeur du contrat implicite avant de rencontrer le problème lors de l'exécution.
  • Étant donné que vos fichiers de ressources existent dans un emplacement connu, vous pouvez vérifier de manière triviale que les tests s'exécutent sur tous les fichiers resx de ce répertoire. De cette façon, vous n'avez même pas besoin de mettre à jour le test lorsque de nouveaux fichiers de ressources sont ajoutés, uniquement si le contrat est modifié.

J'ai utilisé une approche similaire pour aider à la maintenance des noms de procédures stockées conservées dans (un grand nombre de) fichiers resx. Puisque les fichiers de ressources sont répartis sur des dizaines de projets, la maintenance manuelle est fastidieuse et sujette aux erreurs - en d'autres termes, elle ne se fait pas. L'approche de l'analyse statique du code a donné quelques inconvénients, et je pense que cela fonctionnerait bien dans votre cas également.

System.Resources.ResXResourceReader nécessite une référence à System.Windows.Forms. Il est disponible sur .NET et Mono.

+0

C'est ce à quoi je m'attendais. Cela, ou avoir un morceau de code qui vérifie chaque clé contre une liste "maître", ou quelque chose qui vérifie le XML lui-même. Si personne ne propose une autre réponse, je la marquerai comme acceptée. – Steve