Partager via


Ressources dans les applications .NET

Presque toutes les applications d'une qualité de niveau "production" doivent utiliser des ressources. Une ressource est une donnée non exécutable déployée logiquement avec une application. Une ressource peut être affichée dans une application sous la forme de messages d'erreur ou comme faisant partie de l'interface utilisateur. Les ressources peuvent contenir des données sous plusieurs formes, telles que des chaînes, des images et des objets rendus persistants. (Pour écrire des objets persistants dans un fichier de ressources, les objets doivent être sérialisables.) Le stockage de vos données dans un fichier de ressources vous permet de modifier les données sans recompiler l’ensemble de votre application. Il vous permet également de stocker des données dans un emplacement unique, et élimine la nécessité d'avoir recours à des données codées en dur stockées dans plusieurs emplacements.

.NET fournit une prise en charge complète pour la création et la localisation des ressources. De plus, .NET prend en charge un modèle simple pour la compression et le déploiement de ressources localisées.

Créer et localiser des ressources

Dans une application non localisée, vous pouvez utiliser des fichiers de ressources comme référentiel pour les données d'application, notamment pour les chaînes qui auraient pu être codées en dur dans plusieurs emplacements de code source. En règle générale, vous créez des ressources sous forme de fichier texte (.txt) ou de fichiers XML (.resx), et vous utilisez Resgen.exe (Resource File Generator) pour les compiler dans des fichiers binaires .resources. Ces fichiers peuvent être incorporés dans le fichier exécutable de l'application par un compilateur de langage. Pour plus d’informations sur la création des ressources, consultez Créer des fichiers de ressources.

Vous pouvez également localiser les ressources de votre application pour des cultures spécifiques. Cela vous permet de générer des versions localisées (traduites) de vos applications. Lorsque vous développez une application qui utilise des ressources localisées, vous indiquez une culture qui sert de culture neutre ou de secours dont les ressources sont utilisées si aucune ressource appropriée n'est disponible. En général, les ressources de la culture neutre sont stockées dans le fichier exécutable de l'application. Les ressources restantes pour les cultures individuelles localisées sont stockées dans des assemblys satellites autonomes. Pour plus d’informations, consultez Création d’assemblys satellites.

Empaqueter et déployer des ressources

Vous déployez des ressources localisées d’application dans les assemblys satellites. Un assembly satellite contient les ressources d'une culture unique ; il ne contient aucun code d'application. Dans le modèle de déploiement d'assembly satellite, vous créez une application avec un assembly par défaut (qui est généralement l'assembly principal) et un assembly satellite pour chaque culture que l'application prend en charge. Dans la mesure où les assemblys satellites ne font pas partie de l'assembly principal, vous pouvez facilement remplacer ou mettre à jour les ressources correspondant à une culture spécifique sans remplacer l'assembly principal de l'application.

Il est important de déterminer avec précision les ressources qui composent l'assembly de ressources par défaut d'une application. Dans la mesure où il fait partie de l’assembly principal, toute modification apportée vous contraint à remplacer cet assembly. Si vous ne fournissez pas une ressource par défaut, une exception sera levée au moment où le processus de secours pour les ressources tente de la localiser. Dans une application bien conçue, l'utilisation de ressources ne doit pas renvoyer d'exception.

Pour plus d’informations, consultez l’article Empaquetage et déploiement de ressources.

Récupérer des ressources

Au moment de l'exécution, une application charge les ressources localisées appropriées sur une base par thread, selon la culture spécifiée par la propriété CultureInfo.CurrentUICulture. Cette valeur de propriété est dérivée comme suit :

  • En assignant directement un objet CultureInfo qui représente la culture localisée à la propriété Thread.CurrentUICulture.

  • Si une culture n'est pas explicitement assignée, en extrayant la culture d'interface utilisateur par défaut du thread de la propriété CultureInfo.DefaultThreadCurrentUICulture.

  • Si une culture d’interface utilisateur par défaut du thread n’est pas explicitement assignée, en extrayant la culture de l’utilisateur actuel sur l’ordinateur local. Les implémentations de .NET s’exécutant sur Windows le font en appelant la fonction Windows GetUserDefaultUILanguage.

Pour plus d'informations sur la façon dont la culture d'interface utilisateur actuelle est définie, consultez les pages de référence CultureInfo et CultureInfo.CurrentUICulture.

Vous pouvez ensuite extraire des ressources pour la culture de l'interface utilisateur actuelle ou pour une culture spécifique en utilisant la classe System.Resources.ResourceManager. Bien que la classe ResourceManager soit la plus fréquemment utilisée pour extraire des ressources, l’espace de noms System.Resources contient des types supplémentaires que vous pouvez utiliser pour récupérer des ressources. Il s’agit notamment des paramètres suivants :

  • La classe ResourceReader, qui vous permet d'énumérer des ressources incorporées dans un assembly ou stockées dans un fichier .resources binaire. C'est utile lorsque vous ne connaissez pas les noms exacts des ressources disponibles au moment de l'exécution.

  • La classe ResXResourceReader, qui permet d'accéder aux ressources d'un fichier XML (.resx).

  • La classe ResourceSet, qui vous permet de récupérer les ressources d'une culture spécifique sans observer les règles de secours. Les ressources peuvent être stockées dans un assembly ou un fichier .resources binaire. Vous pouvez également développer une implémentation de IResourceReader qui vous permet d'utiliser la classe ResourceSet pour récupérer les ressources d'une autre source.

  • La classe ResXResourceSet, qui permet de récupérer tous les éléments dans un fichier de ressources XML en mémoire.

Voir aussi