Partager via


ResourceManager et ASP.NET

ResourceManager est également accessible à partir d'applications Web utilisant ASP.NET. Le code pour cette petite application se trouve dans le sous-répertoire WorldDocs, et les routines importantes se trouvent dans deux fichiers : Global.asax et Default.aspx.

La première demande de l'utilisateur à l'application WorldDocs charge Global.asax et exécute la sous-routine Application_Onstart. À nouveau, cette sous-routine utilise la méthode CreateFileBasedResourceManager static afin de créer un gestionnaire de ressources pour charger les ressources texte à partir des fichiers plutôt qu'à partir des assemblys. (Les programmes exemples précédents en font également la démonstration). ResourceManager est ensuite assigné à la variable RM de l'Application. Chaque demande de l'utilisateur exécute également la sous-routine Application_BeginRequest, qui entraîne l'assignation de la culture de l'utilisateur (telle que spécifiée par la propriété Request.UserLanguages) au thread actuel en cours d'exécution sur le serveur Web, comme le montre le code suivant.

Listing 5. Ressources nommées avec ResourceManager (Global.asax)

void Application_OnStart() {
    Application["RM"] = 
        ResourceManager.CreateFileBasedResourceManager 
       ("mytext", Server.MapPath("resources") 
       + Path.DirectorySeparatorChar, null);
}

void Application_BeginRequest(Object sender, EventArgs args) {
    // For each request initialize the culture values with
    // the user language as specified by the browser.

    try {
        Thread.CurrentThread.CurrentCulture = new 
            CultureInfo(Request.UserLanguages[0]);
    }
    catch(Exception) {
        // provide fallback for not supported languages.
        Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    }

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

L'assignation des ressources dynamiques est gérée lors du chargement de la page, dans ce cas, dans les sous-routines Page_Init et Page_Load dans Default.aspx. Page_Init crée un ResourceManager à portée de page et lui assigne la variable RM de l'Application. La sous-routine Page_Load modifie de façon dynamique la culture en effectuant automatiquement une publication sur le serveur chaque fois que l'utilisateur modifie la sélection de la langue, comme le montre le code suivant.

Listing 6. Ressources nommées avec ResourceManager (Default.aspx)

void Page_Init(Object sender, EventArgs args) {
    // Get the ResourceManager from the Application object.
    rm = (ResourceManager) Application["RM"];
    ...
}

void Page_Load(Object sender, EventArgs args) {
    String SelectedCulture = MyUICulture.SelectedItem.Text;
    if(! SelectedCulture.StartsWith("Choose")) {
        // If another culture was selected, use that instead.
        Thread.CurrentThread.CurrentCulture = new  
            CultureInfo(SelectedCulture);
        Thread.CurrentThread.CurrentUICulture = new  
            CultureInfo(SelectedCulture);
    }
}

La dernière partie du code à examiner est celle qui retourne en fait les ressources image et chaîne.

    <img src="Flags/<%=CultureInfo.CurrentCulture%>.jpg">
    <%=rm.GetString("greeting")%>

La ressource image est déterminée de façon dynamique en créant une spécification de fichier basée sur le code de culture de l'utilisateur, et la ressource chaîne utilise ResourceManager pour charger une ressource chaîne à partir du fichier .resources approprié.