Empaquetage et déploiement de ressources dans des applications de bureauPackaging and Deploying Resources in Desktop Apps

Les applications s’appuient sur le gestionnaire des ressources du .NET Framework, représenté par la classe ResourceManager, pour récupérer des ressources localisées.Applications rely on the .NET Framework Resource Manager, represented by the ResourceManager class, to retrieve localized resources. Le gestionnaire des ressources suppose qu’un modèle Hub and Spoke est utilisé pour empaqueter et déployer des ressources.The Resource Manager assumes that a hub and spoke model is used to package and deploy resources. Le hub est l’assembly principal qui contient le code exécutable non localisable et les ressources pour une culture unique, appelée culture neutre ou par défaut.The hub is the main assembly that contains the nonlocalizable executable code and the resources for a single culture, called the neutral or default culture. La culture par défaut est la culture de secours de l’application ; il s’agit de la culture dont les ressources sont utilisées si aucune ressource localisée ne peut être trouvée.The default culture is the fallback culture for the application; it is the culture whose resources are used if localized resources cannot be found. Chaque spoke se connecte à un assembly satellite qui contient les ressources d’une culture unique, mais ne contient pas de code.Each spoke connects to a satellite assembly that contains the resources for a single culture, but does not contain any code.

Ce modèle présente plusieurs avantages :There are several advantages to this model:

  • Vous pouvez ajouter de façon incrémentielle des ressources pour de nouvelles cultures après avoir déployé une application.You can incrementally add resources for new cultures after you have deployed an application. Comme le développement ultérieur de ressources spécifiques à une culture peut nécessiter du temps, cela vous permet de libérer d’abord votre application principale, puis de proposer des ressources spécifiques à une culture ultérieurement.Because subsequent development of culture-specific resources can require a significant amount of time, this allows you to release your main application first, and deliver culture-specific resources at a later date.

  • Vous pouvez mettre à jour et changer les assemblys satellites d’une application sans recompiler l’application.You can update and change an application's satellite assemblies without recompiling the application.

  • Une application doit charger uniquement les assemblys satellites qui contiennent les ressources nécessaires pour une culture particulière.An application needs to load only those satellite assemblies that contain the resources needed for a particular culture. Cela peut réduire considérablement l’utilisation des ressources système.This can significantly reduce the use of system resources.

Cependant, ce modèle présente également des inconvénients :However, there are also disadvantages to this model:

  • Vous devez gérer plusieurs ensembles de ressources.You must manage multiple sets of resources.

  • Le coût initial du test d’une application augmente, car vous devez tester plusieurs configurations.The initial cost of testing an application increases, because you must test several configurations. À longue échéance, il sera plus facile et moins coûteux de tester une application principale et plusieurs satellites que de tester et de tenir à jour en parallèle plusieurs versions internationales.Note that in the long term it will be easier and less expensive to test one core application with several satellites, than to test and maintain several parallel international versions.

Conventions d’affectation de noms pour les ressourcesResource Naming Conventions

Quand vous empaquetez les ressources de votre application, vous devez les nommer en utilisant les conventions d’affectation de noms pour les ressources que le Common Language Runtime attend.When you package your application's resources, you must name them using the resource naming conventions that the common language runtime expects. Le runtime identifie une ressource par son nom de culture.The runtime identifies a resource by its culture name. Chaque culture a un nom unique, qui est en général une combinaison d’un nom de culture à deux lettres en minuscules associé à une langue et, si nécessaire, un nom de sous-culture à deux lettres en majuscules associé à un pays ou une région.Each culture is given a unique name, which is usually a combination of a two-letter, lowercase culture name associated with a language and, if required, a two-letter, uppercase subculture name associated with a country or region. Le nom de la sous-culture suit le nom de la culture, séparés par un tiret (-).The subculture name follows the culture name, separated by a dash (-). Les exemples incluent ja-JP pour le japonais tel qu’il est parlé au Japon, en-US pour l’anglais tel qu’il est parlé aux États-Unis, de-DE pour l’allemand tel qu’il est parlé en Allemagne ou de-AT pour l’allemand tel qu’il est parlé en Autriche.Examples include ja-JP for Japanese as spoken in Japan, en-US for English as spoken in the United States, de-DE for German as spoken in Germany, or de-AT for German as spoken in Austria. Consultez Informations de référence sur l’API NLS (National Language Support) sur le centre de développement Go Global pour obtenir une liste complète des noms de cultures.See the National Language Support (NLS) API Reference at the Go Global Developer Center for a complete list of culture names.

Note

Pour plus d’informations sur la création de fichiers de ressources, consultez Création de fichiers de ressources et Création d’assemblys satellites.For information about creating resource files, see Creating Resource Files and Creating Satellite Assemblies.

Processus de secours pour les ressourcesThe Resource Fallback Process

Le modèle Hub and Spoke pour l’empaquetage et le déploiement de ressources utilise un processus de secours pour localiser les ressources appropriées.The hub and spoke model for packaging and deploying resources uses a fallback process to locate appropriate resources. Si l’utilisateur d’une application demande une ressource localisée qui n’est pas disponible, le Common Language Runtime recherche dans la hiérarchie des cultures une ressource de secours appropriée, la plus proche de celle demandée par l’utilisateur, et lève une exception uniquement en dernier ressort.If an application requests a localized resource that is unavailable, the common language runtime searches the hierarchy of cultures for an appropriate fallback resource that most closely matches the user's application's request, and throws an exception only as a last resort. À chaque niveau de la hiérarchie, si une ressource appropriée est trouvée, le runtime l’utilise.At each level of the hierarchy, if an appropriate resource is found, the runtime uses it. Si la ressource est introuvable, la recherche se poursuit au niveau suivant.If the resource is not found, the search continues at the next level.

Pour améliorer les performances de recherche, appliquez l’attribut NeutralResourcesLanguageAttribute à votre assembly principal et passez-lui le nom de la langue neutre à utiliser avec votre assembly principal.To improve lookup performance, apply the NeutralResourcesLanguageAttribute attribute to your main assembly, and pass it the name of the neutral language that will work with your main assembly.

Conseil

Vous pouvez peut-être utiliser l’élément de configuration <relativeBindForResources> pour optimiser le processus de secours pour les ressources et le processus selon lequel le runtime recherche des assemblys de ressources.You may be able to use the <relativeBindForResources> configuration element to optimize the resource fallback process and the process by which the runtime probes for resource assemblies. Pour plus d’informations, consultez la section Optimisation du processus de secours pour les ressources.For more information, see the Optimizing the Resource Fallback Process section.

Le processus de secours pour les ressources comprend les étapes suivantes :The resource fallback process is involves the following steps:

  1. Le runtime recherche d’abord dans le Global Assembly Cache un assembly qui correspond à la culture demandée pour votre application.The runtime first checks the global assembly cache for an assembly that matches the requested culture for your application.

    Le Global Assembly Cache peut stocker des assemblys de ressources partagés par de nombreuses applications.The global assembly cache can store resource assemblies that are shared by many applications. Cela vous évite d’avoir à inclure des ensembles de ressources spécifiques dans la structure de répertoires de chaque application que vous créez.This frees you from having to include specific sets of resources in the directory structure of every application you create. Si le runtime trouve une référence à l’assembly, il recherche la ressource demandée dans cet assembly.If the runtime finds a reference to the assembly, it searches the assembly for the requested resource. S’il trouve l’entrée dans l’assembly, il utilise la ressource demandée.If it finds the entry in the assembly, it uses the requested resource. S’il ne trouve pas l’entrée, il continue la recherche.If it doesn't find the entry, it continues the search.

  2. Le runtime vérifie ensuite le répertoire de l’assembly en cours d’exécution à la recherche d’un répertoire qui correspond à la culture demandée.The runtime next checks the directory of the currently executing assembly for a directory that matches the requested culture. S’il trouve le répertoire, il y recherche un assembly satellite valide pour la culture demandée.If it finds the directory, it searches that directory for a valid satellite assembly for the requested culture. Le runtime recherche ensuite dans l’assembly satellite la ressource demandée.The runtime then searches the satellite assembly for the requested resource. S’il trouve la ressource dans l’assembly, il l’utilise.If it finds the resource in the assembly, it uses it. S’il ne trouve pas la ressource, il continue la recherche.If it doesn't find the resource, it continues the search.

  3. Le runtime interroge ensuite Windows Installer pour déterminer si l’assembly satellite doit être installé à la demande.The runtime next queries the Windows Installer to determine whether the satellite assembly is to be installed on demand. Dans ce cas, il gère l’installation, charge l’assembly et y recherche la ressource demandée.If so, it handles the installation, loads the assembly, and searches it or the requested resource. S’il trouve la ressource dans l’assembly, il l’utilise.If it finds the resource in the assembly, it uses it. S’il ne trouve pas la ressource, il continue la recherche.If it doesn't find the resource, it continues the search.

  4. Le runtime déclenche l’événement AppDomain.AssemblyResolve pour indiquer qu’il lui est impossible de trouver l’assembly satellite.The runtime raises the AppDomain.AssemblyResolve event to indicate that it is unable to find the satellite assembly. Si vous choisissez de gérer l’événement, le gestionnaire d’événements peut retourner une référence à l’assembly satellite dont les ressources seront utilisées pour la recherche.If you choose to handle the event, your event handler can return a reference to the satellite assembly whose resources will be used for the lookup. Sinon, le gestionnaire d’événements retourne null et la recherche se poursuit.Otherwise, the event handler returns null and the search continues.

  5. Le runtime effectue ensuite une nouvelle recherche dans le Global Assembly Cache, cette fois pour trouver l’assembly parent de la culture demandée.The runtime next searches the global assembly cache again, this time for the parent assembly of the requested culture. Si l’assembly parent existe dans le Global Assembly Cache, le runtime recherche la ressource demandée dans cet assembly.If the parent assembly exists in the global assembly cache, the runtime searches the assembly for the requested resource.

    La culture parente est définie comme culture de secours appropriée.The parent culture is defined as the appropriate fallback culture. Considérez les parents comme des candidats de secours, car n’importe quelle ressource est préférable à la levée d’une exception.Consider parents as fallback candidates, because providing any resource is preferable to throwing an exception. Ce processus vous permet également de réutiliser les ressources.This process also allows you to reuse resources. Vous devez inclure une ressource donnée au niveau parent uniquement si la culture enfant n’a pas besoin de localiser la ressource demandée.You should include a particular resource at the parent level only if the child culture doesn't need to localize the requested resource. Par exemple, si vous fournissez des assemblys satellites pour en (anglais neutre), en-GB (anglais tel qu’il est parlé au Royaume-Uni) et en-US (anglais tel qu’il est parlé aux États-Unis), le satellite en contient la terminologie commune et les satellites en-GB et en-US fournissent les substitutions uniquement pour les termes qui diffèrent.For example, if you supply satellite assemblies for en (neutral English), en-GB (English as spoken in the United Kingdom), and en-US (English as spoken in the United States), the en satellite would contain the common terminology, and the en-GB and en-US satellites could provide overrides for only those terms that differ.

  6. Le runtime vérifie ensuite le répertoire de l’assembly en cours d’exécution à la recherche d’un répertoire parent.The runtime next checks the directory of the currently executing assembly to see if it contains a parent directory. Si un répertoire parent existe, le runtime y recherche un assembly satellite valide pour la culture parente.If a parent directory exists, the runtime searches the directory for a valid satellite assembly for the parent culture. S’il trouve l’assembly, le runtime y recherche la ressource demandée.If it finds the assembly, the runtime searches the assembly for the requested resource. S’il trouve la ressource, il l’utilise.If it finds the resource, it uses it. S’il ne trouve pas la ressource, il continue la recherche.If it doesn't find the resource, it continues the search.

  7. Le runtime interroge ensuite Windows Installer pour déterminer si l’assembly satellite parent doit être installé à la demande.The runtime next queries the Windows Installer to determine whether the parent satellite assembly is to be installed on demand. Dans ce cas, il gère l’installation, charge l’assembly et y recherche la ressource demandée.If so, it handles the installation, loads the assembly, and searches it or the requested resource. S’il trouve la ressource dans l’assembly, il l’utilise.If it finds the resource in the assembly, it uses it. S’il ne trouve pas la ressource, il continue la recherche.If it doesn't find the resource, it continues the search.

  8. Le runtime déclenche l’événement AppDomain.AssemblyResolve pour indiquer qu’il lui est impossible de trouver une ressource de secours appropriée.The runtime raises the AppDomain.AssemblyResolve event to indicate that it is unable to find an appropriate fallback resource. Si vous choisissez de gérer l’événement, le gestionnaire d’événements peut retourner une référence à l’assembly satellite dont les ressources seront utilisées pour la recherche.If you choose to handle the event, your event handler can return a reference to the satellite assembly whose resources will be used for the lookup. Sinon, le gestionnaire d’événements retourne null et la recherche se poursuit.Otherwise, the event handler returns null and the search continues.

  9. Le runtime effectue ensuite des recherches dans les assemblys parents, comme aux trois étapes précédentes, dans les différents niveaux.The runtime next searches parent assemblies, as in the previous three steps, through many potential levels. Chaque culture n’a qu’un seul parent, qui est défini par la propriété CultureInfo.Parent, mais un parent peut avoir son propre parent.Each culture has only one parent, which is defined by the CultureInfo.Parent property, but a parent might have its own parent. La recherche des cultures parentes s’arrête quand la propriété Parent d’une culture retourne CultureInfo.InvariantCulture ; pour la culture de secours pour les ressources, la culture indifférente n’est pas considérée comme une culture parente ou une culture qui peut avoir des ressources.The search for parent cultures stops when a culture's Parent property returns CultureInfo.InvariantCulture; for resource fallback, the invariant culture is not considered a parent culture or a culture that can have resources.

  10. Si la culture spécifiée à l’origine et tous les parents ont fait l’objet de la recherche et que la ressource est toujours introuvable, la ressource de la culture par défaut (de secours) est utilisée.If the culture that was originally specified and all parents have been searched and the resource is still not found, the resource for the default (fallback) culture is used. En règle générale, les ressources de la culture par défaut sont incluses dans l’assembly d’application principal.Typically, the resources for the default culture are included in the main application assembly. Toutefois, vous pouvez spécifier la valeur Satellite pour la propriété Location de l’attribut NeutralResourcesLanguageAttribute pour indiquer que l’emplacement de secours ultime pour les ressources est un assembly satellite, plutôt que l’assembly principal.However, you can specify a value of Satellite for the Location property of the NeutralResourcesLanguageAttribute attribute to indicate that the ultimate fallback location for resources is a satellite assembly, rather than the main assembly.

    Note

    La ressource par défaut est la seule ressource qui peut être compilée avec l’assembly principal.The default resource is the only resource that can be compiled with the main assembly. Sauf si vous spécifiez un assembly satellite à l’aide de l’attribut NeutralResourcesLanguageAttribute, il s’agit du secours ultime (parent final).Unless you specify a satellite assembly by using the NeutralResourcesLanguageAttribute attribute, it is the ultimate fallback (final parent). Par conséquent, nous vous recommandons de toujours inclure un ensemble de ressources par défaut dans votre assembly principal.Therefore, we recommend that you always include a default set of resources in your main assembly. Vous empêchez ainsi la levée d’exceptions.This helps prevent exceptions from being thrown. En incluant un fichier de ressources par défaut, vous fournissez une solution de secours pour toutes les ressources et garantissez qu’au moins une ressource est toujours présente pour l’utilisateur, même si elle n’est pas spécifique à une culture.By including a default resource file you provide a fallback for all resources, and ensure that at least one resource is always present for the user, even if it is not culturally specific.

  11. Enfin, si le runtime ne trouve pas une ressource pour une culture par défaut (de secours), une exception MissingManifestResourceException ou MissingSatelliteAssemblyException est levée pour indiquer que la ressource est introuvable.Finally, if the runtime doesn't find a resource for a default (fallback) culture, a MissingManifestResourceException or MissingSatelliteAssemblyException exception is thrown to indicate that the resource could not be found.

Par exemple, supposons que l’application demande une ressource localisée en espagnol (Mexique) (la culture es-MX).For example, suppose the application requests a resource localized for Spanish (Mexico) (the es-MX culture). Le runtime recherche d’abord dans le Global Assembly Cache l’assembly qui correspond à es-MX, mais ne le trouve pas.The runtime first searches the global assembly cache for the assembly that matches es-MX, but doesn't find it. Le runtime recherche ensuite un répertoire es-MX dans le répertoire de l’assembly en cours d’exécution.The runtime then searches the directory of the currently executing assembly for an es-MX directory. En cas d’échec, le runtime effectue une nouvelle recherche dans le Global Assembly Cache pour trouver un assembly parent qui reflète la culture de secours appropriée, ici es (Espagnol).Failing that, the runtime searches the global assembly cache again for a parent assembly that reflects the appropriate fallback culture — in this case, es (Spanish). Si l’assembly parent est introuvable, le runtime recherche dans tous les niveaux potentiels des assemblys parents la culture es-MX jusqu’à ce qu’il trouve une ressource correspondante.If the parent assembly is not found, the runtime searches all potential levels of parent assemblies for the es-MX culture until it finds a corresponding resource. Si aucune ressource n’est trouvée, le runtime utilise la ressource pour la culture par défaut.If a resource isn't found, the runtime uses the resource for the default culture.

Optimisation du processus de secours pour les ressourcesOptimizing the Resource Fallback Process

Dans les conditions suivantes, vous pouvez optimiser le processus par lequel le runtime recherche des ressources dans les assemblys satellites.Under the following conditions, you can optimize the process by which the runtime searches for resources in satellite assemblies

  • Les assemblys satellites sont déployés au même emplacement que l’assembly de code.Satellite assemblies are deployed in the same location as the code assembly. Si l’assembly de code est installé dans le Global Assembly Cache, les assemblys satellites sont également installés dans le Global Assembly Cache.If the code assembly is installed in the Global Assembly Cache, satellite assemblies are also installed in the global assembly cache. Si l’assembly de code est installé dans un répertoire, les assemblys satellites sont installés dans des dossiers spécifiques à la culture de ce répertoire.If the code assembly is installed in a directory, satellite assemblies are installed in culture-specific folders of that directory.

  • Les assemblys satellites ne sont pas installés à la demande.Satellite assemblies are not installed on demand.

  • Le code d’application ne gère pas l’événement AppDomain.AssemblyResolve.Application code does not handle the AppDomain.AssemblyResolve event.

Vous optimisez la recherche des assemblys satellites en incluant l’élément <relativeBindForResources> et en affectant à son attribut enabled la valeur true dans le fichier de configuration de l’application, comme indiqué dans l’exemple suivant.You optimize the probe for satellite assemblies by including the <relativeBindForResources> element and setting its enabled attribute to true in the application configuration file, as shown in the following example.

<configuration>  
   <runtime>  
      <relativeBindForResources enabled="true" />  
   </runtime>  
</configuration>  

La recherche optimisée des assemblys satellites est une fonctionnalité d’abonnement.The optimized probe for satellite assemblies is an opt-in feature. Autrement dit, le runtime suit la procédure décrite dans Processus de secours pour les ressources, sauf si l’élément <relativeBindForResources> est présent dans le fichier de configuration de l’application et que son attribut enabled a la valeur true.That is, the runtime follows the steps documented in The Resource Fallback Process unless the <relativeBindForResources> element is present in the application's configuration file and its enabled attribute is set to true. Dans ce cas, le processus de recherche d’un assembly satellite est modifié comme suit :If this is the case, the process of probing for a satellite assembly is modified as follows:

  • Le runtime utilise l’emplacement de l’assembly de code parent pour rechercher l’assembly satellite.The runtime uses the location of the parent code assembly to probe for the satellite assembly. Si l’assembly parent est installé dans le Global Assembly Cache, le runtime effectue la recherche dans le cache, mais pas dans le répertoire de l’application.If the parent assembly is installed in the global assembly cache, the runtime probes in the cache but not in the application's directory. Si l’assembly parent est installé dans un répertoire de l’application, le runtime effectue la recherche dans le répertoire de l’application, mais pas dans le Global Assembly Cache.If the parent assembly is installed in an application directory, the runtime probes in the application directory but not in the global assembly cache.

  • Le runtime n’interroge pas Windows Installer pour l’installation à la demande des assemblys satellites.The runtime doesn't query the Windows Installer for on-demand installation of satellite assemblies.

  • Si la recherche d’un assembly de ressource particulier échoue, le runtime ne déclenche pas l’événement AppDomain.AssemblyResolve.If the probe for a particular resource assembly fails, the runtime does not raise the AppDomain.AssemblyResolve event.

Secours ultime pour l’assembly satelliteUltimate Fallback to Satellite Assembly

Vous pouvez éventuellement supprimer des ressources de l’assembly principal et spécifier que le runtime doit charger les ressources de secours ultime depuis un assembly satellite qui correspond à une culture spécifique.You can optionally remove resources from the main assembly and specify that the runtime should load the ultimate fallback resources from a satellite assembly that corresponds to a specific culture. Pour contrôler le processus de secours, vous utilisez le constructeur NeutralResourcesLanguageAttribute.NeutralResourcesLanguageAttribute(String, UltimateResourceFallbackLocation) et fournissez une valeur pour le paramètre UltimateResourceFallbackLocation qui spécifie si le gestionnaire des ressources doit extraire les ressources de secours à partir de l’assembly principal ou d’un assembly satellite.To control the fallback process, you use the NeutralResourcesLanguageAttribute.NeutralResourcesLanguageAttribute(String, UltimateResourceFallbackLocation) constructor and supply a value for the UltimateResourceFallbackLocation parameter that specifies whether Resource Manager should extract the fallback resources from the main assembly or from a satellite assembly.

L’exemple suivant utilise l’attribut NeutralResourcesLanguageAttribute pour stocker les ressources de secours d’une application dans un assembly satellite pour la langue Français (fr).The following example uses the NeutralResourcesLanguageAttribute attribute to store an application's fallback resources in a satellite assembly for the French (fr) language. L’exemple comprend deux fichiers de ressources textuels qui définissent une ressource de type chaîne unique nommée Greeting.The example has two text-based resource files that define a single string resource named Greeting. Le premier, resources.fr.txt, contient une ressource de langue française.The first, resources.fr.txt, contains a French language resource.

Greeting=Bon jour!  

Le second, resources.ru.txt, contient une ressource de langue russe.The second, resources,ru.txt, contains a Russian language resource.

Greeting=Добрый день  

Ces deux fichiers sont compilés en fichiers .resources en exécutant le Générateur de fichiers de ressources (Resgen.exe) à partir de la ligne de commande.These two files are compiled to .resources files by running the resource file generator (Resgen.exe) from the command line. Pour la ressource de langue française, la commande est :For the French language resource, the command is:

resgen.exe resources.fr.txtresgen.exe resources.fr.txt

Pour la ressource de langue russe, la commande est :For the Russian language resource, the command is:

resgen.exe resources.ru.txtresgen.exe resources.ru.txt

Les fichiers .resources sont incorporés dans des bibliothèques de liens dynamiques en exécutant Assembly Linker (Al.exe) à partir de la commande de ligne pour la ressource de langue française comme suit :The .resources files are embedded into dynamic link libraries by running assembly linker (Al.exe) from the command line for the French language resource as follows:

al /t:lib /embed:resources.fr.resources /culture:fr /out:fr\Example1.resources.dllal /t:lib /embed:resources.fr.resources /culture:fr /out:fr\Example1.resources.dll

et pour la ressource de langue russe comme suit :and for the Russian language resource as follows:

al /t:lib /embed:resources.ru.resources /culture:ru /out:ru\Example1.resources.dllal /t:lib /embed:resources.ru.resources /culture:ru /out:ru\Example1.resources.dll

Le code source de l’application réside dans un fichier nommé Example1.cs ou Example1.vb.The application source code resides in a file named Example1.cs or Example1.vb. Il inclut l’attribut NeutralResourcesLanguageAttribute pour indiquer que la ressource d’application par défaut se trouve dans le sous-répertoire fr.It includes the NeutralResourcesLanguageAttribute attribute to indicate that the default application resource is in the fr subdirectory. Il instancie le gestionnaire des ressources, récupère la valeur de la ressource Greeting et l’affiche dans la console.It instantiates the Resource Manager, retrieves the value of the Greeting resource, and displays it to the console.

using System;
using System.Reflection;
using System.Resources;

[assembly:NeutralResourcesLanguage("fr", UltimateResourceFallbackLocation.Satellite)]

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("resources", 
                                               typeof(Example).Assembly);
      string greeting = rm.GetString("Greeting");
      Console.WriteLine(greeting); 
   }
}
Imports System.Reflection
Imports System.Resources

<Assembly:NeutralResourcesLanguage("fr", UltimateResourceFallbackLocation.Satellite)>
Module Example
   Public Sub Main()
      Dim rm As New ResourceManager("resources", GetType(Example).Assembly)
      Dim greeting As String = rm.GetString("Greeting")
      Console.WriteLine(greeting) 
   End Sub
End Module

Vous pouvez ensuite compiler le code source C# à partir de la ligne de commande comme suit :You can then compile C# source code from the command line as follows:

csc Example1.cs

La commande pour le compilateur Visual Basic est très semblable :The command for the Visual Basic compiler is very similar:

vbc Example1.vb

Comme aucune ressource n’est incorporée dans l’assembly principal, il est inutile de compiler à l’aide du commutateur /resource.Because there are no resources embedded in the main assembly, you do not have to compile by using the /resource switch.

Quand vous exécutez l’exemple à partir d’un système dont la langue est autre que le russe, la sortie suivante s’affiche :When you run the example from a system whose language is anything other than Russian, it displays the following output:

Bon jour!  

Autre empaquetage suggéréSuggested Packaging Alternative

Des contraintes de temps ou de budget peuvent vous empêcher de créer un ensemble de ressources pour chaque sous-culture que votre application prend en charge.Time or budget constraints might prevent you from creating a set of resources for every subculture that your application supports. À la place, vous pouvez créer un seul assembly satellite pour une culture parente qui peut être utilisé par toutes les sous-cultures apparentées.Instead, you can create a single satellite assembly for a parent culture that all related subcultures can use. Par exemple, vous pouvez fournir un seul assembly satellite anglais (en) qui est récupéré par les utilisateurs qui demandent des ressources anglaises spécifiques à une région et un seul assembly satellite allemand (de) pour les utilisateurs qui demandent des ressources allemandes spécifiques à une région.For example, you can provide a single English satellite assembly (en) that is retrieved by users who request region-specific English resources, and a single German satellite assembly (de) for users who request region-specific German resources. Par exemple, les demandes pour l’allemand tel qu’il est parlé en Allemagne (de-DE), en Autriche (de-AT) et en Suisse (de-CH) reviennent à l’assembly satellite allemand (de).For example, requests for German as spoken in Germany (de-DE), Austria (de-AT), and Switzerland (de-CH) would fall back to the German satellite assembly (de). Comme les ressources par défaut représentent les ressources de secours final et doivent dont être les ressources qui seront demandées par la majorité des utilisateurs de votre application, choisissez-les avec précaution.The default resources are the final fallback and therefore should be the resources that will be requested by the majority of your application's users, so choose these resources carefully. Cette solution déploie des ressources qui sont moins spécifiques à une culture, mais peut réduire de manière significative les coûts de localisation de votre application.This approach deploys resources that are less culturally specific, but can significantly reduce your application's localization costs.

Voir aussiSee Also

Ressources dans des applications de bureauResources in Desktop Apps
Global Assembly CacheGlobal Assembly Cache
Création de fichiers de ressourcesCreating Resource Files
Création d’assemblys satellitesCreating Satellite Assemblies