web-dev-qa-db-fra.com

Ressource globale vs ressource locale dans ASP.NET

Nous utilisons des fichiers resx pour localiser nos applications Web. Nous créons généralement des fichiers resx locaux (qui correspondent à une page spécifique) lorsqu'une seule page utilise une certaine phrase, et un fichier resx global lorsque plusieurs pages ont besoin de la phrase.
Mais la bonne chose à propos des fichiers resx globaux est qu'ils sont une classe, et vous pouvez appeler les phrases comme vous appelez les propriétés d'une classe:

Resource.UI.iNotFound

Je pensais donc - pourquoi avoir des fichiers resx locaux? pourquoi ne pas utiliser un fichier resx global pour toute l'application, et ainsi éviter les erreurs d'exécution en appelant des phrases inexistantes?

Je suis sûr qu'il y a une bonne réponse à cela, je ne sais pas ce que c'est ...

37
Lea Cohen

J'ai continué à chercher des directives et j'ai trouvé cela dans MSDN :

Choix entre les fichiers de ressources globaux et locaux

Vous pouvez utiliser n'importe quelle combinaison de fichiers de ressources globaux et locaux dans l'application Web. En règle générale, vous ajoutez des ressources à un fichier de ressources global lorsque vous souhaitez partager les ressources entre les pages. Les ressources des fichiers de ressources globales sont également fortement typées lorsque vous souhaitez accéder aux fichiers par programme.

Cependant, les fichiers de ressources globaux peuvent devenir volumineux si vous y stockez toutes les ressources localisées. Les fichiers de ressources globaux peuvent également être plus difficiles à gérer si plusieurs développeurs travaillent sur des pages différentes mais dans un seul fichier de ressources.

Les fichiers de ressources locaux facilitent la gestion des ressources pour une seule page Web ASP.NET. Mais vous ne pouvez pas partager les ressources entre les pages. En outre, vous pouvez créer de nombreux fichiers de ressources locaux si vous disposez de plusieurs pages qui doivent être localisées dans de nombreuses langues. Si les sites sont volumineux avec de nombreux dossiers et langues, les ressources locales peuvent rapidement augmenter le nombre d'assemblys dans le domaine d'application.

Lorsque vous apportez une modification à un fichier de ressources par défaut, local ou global, ASP.NET recompile les ressources et redémarre l'application ASP.NET. Cela peut affecter les performances globales de votre site. Si vous ajoutez des fichiers de ressources satellites, cela ne provoque pas une recompilation des ressources, mais l'application ASP.NET redémarrera.

Il semble donc que c'est vraiment à l'équipe de programmation de peser le pour et le contre de chaque méthode et de choisir ce qui est bon pour elle.

50
Lea Cohen

Joe90 - Je dois dire que d'après mon expérience, je ne peux pas convenir que la gestion de nombreux fichiers de ressources locaux dispersés tout au long de votre projet est plus facile que la gestion d'un seul fichier de ressources global. Il n'y a rien pour arrêter la répétition des mêmes traductions encore et encore et elles sont très difficiles à retrouver. L'accès au fichier de ressources globales est très facile à coordonner au sein d'une équipe et plusieurs utilisateurs peuvent voir en un coup d'œil si la traduction requise a déjà été effectuée.

J'ai commencé avec exactement la même politique que Lea - c'est-à-dire commencer avec un fichier de ressources local, puis le déplacer vers un fichier de ressources global s'il a été référencé plusieurs fois. Cela est vite devenu une charge de travail à gérer et depuis, je suis passé à l'utilisation de fichiers de ressources globales à chaque fois.

Il ne semble pas y avoir de directives claires de Microsoft quant à la meilleure pratique, ni même à la façon dont les deux méthodes sont mises en œuvre afin que nous puissions deviner!

Je suis deviner la comparaison/gain est que les fichiers de ressources locaux nécessitent uniquement une recompilation du fichier auquel ils se rapportent, tandis que la modification d'un fichier de ressources global semble nécessiter une recompilation de l'ensemble du site Web - avec un la perte inhérente de l'état de session, etc. nécessite donc de mettre le site hors ligne pendant la mise à jour pour être sûr.

15
user74207

J'ai une équipe de développement d'au moins 10 développeurs sur un seul produit et nous utilisons un resx global pour chaque site.

À mon avis, le problème de la fusion de ce gros fichier resx ne devrait pas être un problème.

Si vous avez 10 développeurs qui définissent eux-mêmes la langue sur le site, comment obtenir une manière uniforme de s'exprimer sur le site? Les développeurs ont souvent tendance à être bons en code et non en expression grammaticale. (Je suis moi-même développeur.)

Un expert en langue devrait éditer le fichier resx et le verrouiller pour les développeurs!

7
Anders Lundsgard

Un fichier de ressources globales est la meilleure méthode de traduction. La clé est d'utiliser une convention de dénomination, comme les abréviations de nom de page pour les premières lettres d'un nom de chaîne afin que vous puissiez localiser facilement les ressources par page Web. Essayer de réutiliser de nombreuses phrases sur plusieurs pages provoquera plus de confusion pour les traducteurs.

Vous pouvez définir des phrases réutilisables autant ou aussi peu que vous le souhaitez, comme Oui, Non, BTN_OK, BTN_Cancel, QTN_AreYouSure, etc. en utilisant un manque de convention de dénomination de page (pas d'abréviations de nom de page pour les premières lettres). La majorité de vos lignes de RESX seront spécifiques à chaque page et vous ne devriez pas vous concentrer sur la réutilisation autant que possible. La modification d'une phrase dans l'ensemble du fichier peut être effectuée avec soin en quelques minutes en utilisant la recherche/remplacement de texte si nécessaire.

2
Michael Urvan