Comment : définir la culture et la culture d’interface utilisateur pour la globalisation des pages web ASP.NET
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 des fonctions qui dépendent de la culture, comme la mise en forme des dates, des nombres, des devises, etc. La valeur UICulture détermine les ressources qui sont chargées pour la page.
Notes
Les propriétés Culture et UICulture sont définies à l’aide de chaînes standard sur 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). Voici quelques exemples : 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 l’exemple d’un site de vente aux enchères. La propriété UICulture peut changer pour chaque navigateur web, alors que la propriété Culture reste constante. Les prix sont donc toujours affichés dans la même devise et selon 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 vous évite de devoir identifier le symbole monétaire à utiliser pour en, dans la mesure 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 leur langue de préférence. 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 bonne pratique. Les utilisateurs se servent fréquemment de navigateurs qui ne sont pas définis selon leurs préférences (par exemple, dans un cybercafé). Vous devez donc leur fournir une méthode leur 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, 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 actuels du navigateur, affectez auto à UICulture et à Culture. Vous pouvez également affecter à cette valeur **auto:**nom_info_culture, où nom_info_culture 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 programmation 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.
Notes
La méthode InitializeCulture est appelée très tôt dans le cycle de vie de la page, avant la création des contrôles ou la définition des propriétés de la page. Par conséquent, pour lire des valeurs passées à la page par des 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.
Un projet de site web Visual Studio avec le code source est disponible pour accompagner cette rubrique : Télécharger.
<%@ 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 runat="server"> 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" runat="server"> <div> <asp:ListBox ID="ListBox1" runat="server"> <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" runat="server" Text="Set Language" meta:resourcekey="Button1" /> <br /> <asp:Label ID="Label1" runat="server" Text="" meta:resourcekey="Label1" /> </div> </form> </body> </html>
<%@ Page Language="C#" uiculture="auto" %> <%@ Import Namespace="System.Threading" %> <%@ Import Namespace="System.Globalization" %> <script runat="server"> 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" runat="server"> <div> <asp:ListBox ID="ListBox1" runat="server"> <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" runat="server" Text="Set Language" meta:resourcekey="Button1" /> <br /> <asp:Label ID="Label1" runat="server" Text="" meta:resourcekey="Label1" /> </div> </form> </body> </html>