Resources in ASP.NET Applications

Une fois que vous avez créé les assemblys satellites d'une application ASP.NET, vous devez les placer dans des emplacements spécifiques où le Common Language Runtime est en mesure de les trouver et de les utiliser.La structure de répertoires des assemblys satellites des applications et des contrôles ASP.NET diffère de celle des assemblys satellites d'une application Windows.Les applications ASP.NET peuvent contenir des assemblys.Cependant, dans la mesure où les pages ASP.NET sont converties en assemblys dynamiquement, le nom de l'assembly n'est pas connu à l'avance et la configuration de l'assembly satellite standard ne s'applique pas.Cette section décrit l'utilisation des ressources dans des pages ASP.NET et des contrôles ASP.NET.

Notes

Les procédures de création et de compilation des ressources à utiliser dans une application ASP.NET sont les mêmes que celles d'une application Windows.Pour plus d'informations sur ce processus, consultez Création de fichiers de ressources, Empaquetage et déploiement de ressources et Création d'assemblys satellites.

Ressources dans les pages ASP.NET

Pour utiliser des ressources dans des pages ASP.NET, créez tout d'abord un assembly principal parallèle pour stocker les ressources de votre application.Cet assembly contient les ressources par défaut et neutres pour l'application.Ensuite, créez un assembly satellite contenant les ressources localisées pour chaque culture prise en charge par votre application.Installez l'assembly principal dans le répertoire bin de l'application, et les assemblys satellites dans les sous-répertoires prévus.

Notes

Lorsque vous déployez des ressources dans des applications ASP.NET en utilisant ce modèle, des copies fantômes de tous les assemblys sont placées dans le Global Assembly Cache, éliminant les problèmes de verrouillage potentiels.

L'exemple suivant, utilisé sur une page ASP.NET, montre comment créer un ResourceManager pour récupérer les ressources appropriées.

<%
    Dim a As Assembly = Assembly.Load("myApp")
    Dim rm As ResourceManager = New ResourceManager("myApp", a)
    Response.Write(rm.GetString("string"))
    %>
<%
    Assembly a = Assembly.Load("myApp");
    ResourceManager rm = new ResourceManager("myApp", a);
    Response.Write(rm.GetString("string"));
    %>

Vous pouvez spécifier explicitement la culture à utiliser pour récupérer les ressources dans une page .aspx, en ajoutant aux lignes de code de l'exemple précédent du code qui crée un objet CultureInfo à partir d'une culture que vous spécifiez et utilise la valeur de CultureInfo pour initialiser la propriété CurrentUICulture.L'exemple suivant montre comment forcer la récupération des ressources allemandes, car la propriété CurrentUICulture a la valeur de la culture parente allemande "de".

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de")
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

Bien que vous puissiez spécifier une culture neutre telle que "de" pour créer un objet CultureInfo qui peut être utilisé pour initialiser la propriété CurrentUICulture, vous devez spécifier une culture spécifique pour initialiser la propriété CurrentCulture.La propriété CurrentCulture attend une culture spécifique, c'est-à-dire une culture associée à une langue et une région, telle que ("de-AT") pour l'allemand en Autriche.La culture neutre "de" ne fonctionne pas, car elle est associée uniquement à une langue.Pour créer un objet CultureInfo au format attendu par la propriété CurrentCulture, utilisez la méthode CultureInfo.CreateSpecificCulture.Cette méthode crée un objet CultureInfo qui représente la culture spécifique associée à une culture neutre spécifique.L'exemple suivant montre comment utiliser la méthode CultureInfo.CreateSpecificCulture pour créer un objet CultureInfo qui représente la culture spécifique associée à la culture neutre "de" et l'utiliser pour initialiser la valeur de la propriété CurrentCulture.

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

Il est conseillé de définir explicitement les valeurs pour les propriétés CurrentUICulture et CurrentCulture dans votre page .aspx.L'exemple suivant montre comment définir CurrentCulture à "de", puis utiliser la valeur de CurrentCulture pour initialiser la propriété CurrentUICulture.

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

La méthode CultureInfo.CreateSpecificCulture vous permet également d'utiliser la langue actuelle du navigateur Web pour initialiser la propriété CurrentCulture dans une page .aspx.Dans l'exemple suivant, la propriété Request.UserLanguages retourne sous forme de chaîne la langue actuelle du navigateur Web.La méthode CultureInfo.CreateSpecificCulture analyse cette chaîne et retourne un objet CultureInfo au format qui peut être utilisé pour initialiser la valeur de la propriété CurrentCulture.

' Set the CurrentCulture property to the culture associated with the Web
' browser's current language setting.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0])

' It is good practice to explicitly set the CurrentUICulture property.
'Initialize the CurrentUICulture property
' with the CurrentCulture property.Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
// Set the CurrentCulture property to the culture associated with the Web
// browser's current language setting.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

// It is good practice to explicitly set the CurrentUICulture property.// Initialize the CurrentUICulture property
// with the CurrentCulture property.Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

Pour plus d'exemples sur l'utilisation des ressources dans les applications ASP.NET, consultez le didacticiel Comment : récupérer des valeurs de ressources par programmation.

Ressources dans les contrôles ASP.NET

Si votre application ASP.NET est développée à l'aide de contrôles ASP.NET, vous pouvez utiliser la même structure de répertoires que celle qui est décrite ci-dessus.Lorsque vous créez des contrôles, vous pouvez écrire du code qui utilise des ressources pour afficher des informations à l'utilisateur.Dans la mesure où les contrôles sont compilés, ils ont un assembly.Cela vous permet d'incorporer un ensemble de ressources par défaut dans cet assembly.Vous pouvez créer des assemblys satellites pour les ressources qui seront utilisés par le contrôle et les placer dans la structure de répertoires prévue pour les assemblys satellites.Pour plus d'informations, consultez Création d'assemblys satellites.Placez le contrôle et les ressources du contrôle dans le répertoire bin à la racine de l'application.L'illustration suivante fournit un exemple de la structure de répertoires correct.

Application ASP.NET avec un répertoire de contrôles ASP.NET

Répertoire ASP.NET principal défini sous forme d'AppRoot

Vous pouvez placer plusieurs instances de myControl, référencées dans l'illustration, sur myPage.aspx.Vous pouvez affecter une entrée de fichier de ressources différente à chaque version à référencer.L'exemple de code suivant ASP.NET illustre ce processus.

<Loc:myControl runat="server" Text="entry1" />
<Loc:myControl runat="server" Text="entry2" />

Dans cet exemple, ResourceManager utilise la propriété CultureInfo.CurrentUICulture de l'application pour déterminer les ressources à récupérer.

L'exemple suivant montre comment créer un contrôle Button.La variable Text fait référence à la valeur de la propriété qui est récupérée et qui est définie ensuite dans le contrôle à l'intérieur de la page .aspx.Cette valeur est utilisée pour déterminer le nom de l'entrée à récupérer.Dans cet exemple, il s'agit de la même propriété utilisée pour afficher le résultat à l'utilisateur.

Public Class myControl
Inherits Button

    Protected Overrides Sub Render(HtmlTextWriter writer)
        ' rm refers to the ResourceManager.Text = rm.GetString(Text)
        MyBase.Render(writer)
    End Sub
End Class
public class mycontrol : Button 
{
    protected override void Render(HtmlTextWriter writer) 
    {
        // rm refers to the ResourceManager.Text = rm.GetString(Text);      
        base.Render(writer);
    }
}

Voir aussi

Référence

System.Globalization.CultureInfo

Concepts

Ressources dans les applications

Création de fichiers de ressources

Empaquetage et déploiement de ressources

Création d'assemblys satellites

Autres ressources

Projets Web ASP.NET