Comment : définir la culture et la culture de l'interface utilisateur pour la globalisation des pages Web ASP.NET
Mise à jour : novembre 2007
Dans une page Web ASP.NET, vous pouvez affecter à deux valeurs de culture les propriétés Culture et UICulture. La valeur Culture détermine les résultats de fonctions spécifiques à une culture, comme la mise en forme de la date, des nombres et de la monnaie, etc. La valeur UICulture détermine les ressources qui sont chargées pour la page.
Remarque : |
---|
Les propriétés Culture et UICulture sont définies à l'aide de chaînes de norme Internet qui identifient la langue (par exemple, en pour l'anglais, es pour l'espagnol et de pour l'allemand) et la culture (par exemple, US pour les États-Unis, GB pour la Grande-Bretagne, MX pour le Mexique et DE pour l'Allemagne). Certains exemples indiquent en-US pour anglais/États-Unis, en-GB pour anglais/Grande-Bretagne et es-MX pour espagnol/Mexique. Pour plus d'informations, consultez CultureInfo. |
Les deux paramètres de culture ne doivent pas forcément être identiques. Dans certaines applications, il peut être important de les distinguer. Prenons comme exemple un site de vente aux enchères sur le Web. La propriété UICulture peut changer pour chaque navigateur Web, alors que Culture reste constant. Par conséquent, les prix sont toujours affichés dans la même monnaie et respectent la même mise en forme.
Seules des cultures spécifiques, telles que en-US ou en-GB peuvent être affectées à la valeur Culture. Cela empêche l'identification du symbole monétaire correct à utiliser pour en, où en-US et en-GB ont des symboles monétaires différents.
Les utilisateurs peuvent définir la culture et la culture d'interface utilisateur dans leurs navigateurs. Par exemple, dans le menu Outils de Microsoft Internet Explorer, les utilisateurs peuvent cliquer sur Options Internet sous l'onglet Général, puis sur Langue et définir leurs préférences de langue. Si l'attribut enableClientBasedCulture de l'élément globalization dans le fichier Web.config a la valeur true, ASP.NET peut définir la culture et la culture d'interface utilisateur d'une page Web automatiquement, selon les valeurs envoyées par un navigateur.
Compter exclusivement sur les paramètres du navigateur pour déterminer la culture d'interface utilisateur d'une page ne constitue pas une méthode conseillée. Les utilisateurs utilisent fréquemment des navigateurs qui ne sont pas définis selon leurs préférences (par exemple, dans un cybercafé). Vous devez fournir aux utilisateurs une méthode permettant de choisir explicitement une langue, ou une langue et une culture (nom CultureInfo) pour la page.
Pour définir de manière déclarative la culture et la culture d'interface utilisateur d'une page Web ASP.NET
Pour définir la culture et la culture d'interface utilisateur de chaque page, ajoutez une section globalization au fichier Web.config, puis définissez les attributs uiculture et culture, comme indiqué dans l'exemple suivant :
<globalization uiCulture="es" culture="es-MX" />
Pour définir la culture et la culture d'interface utilisateur d'une page individuelle, définissez les attributs Culture et UICulture de la directive @ Page, comme indiqué dans l'exemple suivant :
<%@ Page UICulture="es" Culture="es-MX" %>
Pour que ASP.NET affecte à la culture et à la culture d'interface utilisateur la première langue spécifiée dans les paramètres du navigateur actuels, affectez auto à UICulture et Culture. Vous pouvez également définir la valeur auto:culture_info_name, où culture_info_name est un nom de culture. Pour obtenir la liste des noms de cultures, consultez CultureInfo. Vous pouvez définir ce paramètre dans la directive @ Page ou dans le fichier Web.config.
Pour définir par programme la culture et la culture d'interface utilisateur d'une page Web ASP.NET
Substituez la méthode InitializeCulture de la page.
Dans la méthode substituée, déterminez la langue et la culture à affecter à la page.
Remarque : La méthode InitializeCulture est appelée très tôt dans le cycle de vie de la page, avant que les contrôles soient créés ou que les propriétés de la page soient définies. Par conséquent, pour lire des valeurs passées à la page par les contrôles, vous devez les obtenir directement à partir de la demande à l'aide de la collection Form.
Définissez la culture et la culture d'interface utilisateur de l'une des façons suivantes :
Affectez aux propriétés Culture et UICulture de la page la chaîne de langue et de culture (par exemple, en-US). Ces propriétés sont internes à la page et peuvent être utilisées uniquement dans une page.
Affectez aux propriétés CurrentUICulture et CurrentCulture du thread actuel la culture et la culture d'interface utilisateur, respectivement. La propriété CurrentUICulture prend une chaîne de langue et d'informations de culture. Pour définir la propriété CurrentCulture, créez une instance de la classe CultureInfo et appelez sa méthode CreateSpecificCulture.
L'exemple de code suivant affiche une page Web ASP.NET qui permet aux utilisateurs de sélectionner leur langue par défaut dans une liste déroulante. La page importe deux espaces de noms pour faciliter l'utilisation des classes de thread et de globalisation.
<%@ Page Language="VB" uiculture="auto" %> <%@ Import Namespace="System.Threading" %> <%@ Import Namespace="System.Globalization" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <script > Protected Overrides Sub InitializeCulture() If Request.Form("ListBox1") IsNot Nothing Then Dim selectedLanguage As String = _ Request.Form("ListBox1") UICulture = Request.Form("ListBox1") Culture = Request.Form("ListBox1") Thread.CurrentThread.CurrentCulture = _ CultureInfo.CreateSpecificCulture(selectedLanguage) Thread.CurrentThread.CurrentUICulture = New _ CultureInfo(selectedLanguage) End If MyBase.InitializeCulture() End Sub </script> <html> <body> <form id="form1" > <div> <asp:ListBox ID="ListBox1" > <asp:ListItem Value="en-US" Selected="True">English</asp:ListItem> <asp:ListItem Value="es-MX">Español</asp:ListItem> <asp:ListItem Value="de-DE">Deutsch</asp:ListItem> </asp:ListBox><br /> <asp:Button ID="Button1" Text="Set Language" meta:resourcekey="Button1" /> <br /> <asp:Label ID="Label1" Text="" meta:resourcekey="Label1" /> </div> </form> </body> </html>
<%@ Page Language="C#" uiculture="auto" %> <%@ Import Namespace="System.Threading" %> <%@ Import Namespace="System.Globalization" %> <script > protected override void InitializeCulture() { if (Request.Form["ListBox1"] != null) { String selectedLanguage = Request.Form["ListBox1"]; UICulture = selectedLanguage ; Culture = selectedLanguage ; Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); } base.InitializeCulture(); } </script> <html> <body> <form id="form1" > <div> <asp:ListBox ID="ListBox1" > <asp:ListItem Value="en-US" Selected="True">English</asp:ListItem> <asp:ListItem Value="es-MX">Español</asp:ListItem> <asp:ListItem Value="de-DE">Deutsch</asp:ListItem> </asp:ListBox><br /> <asp:Button ID="Button1" Text="Set Language" meta:resourcekey="Button1" /> <br /> <asp:Label ID="Label1" Text="" meta:resourcekey="Label1" /> </div> </form> </body> </html>