Практическое руководство. Установка значений Culture и UICulture для глобализации веб-страниц ASP.NET
Обновлен: Ноябрь 2007
На веб-странице ASP.NET можно установить два региональных и языковых параметра: свойства Culture и UICulture. Языковые и региональные параметры Culture обуславливают результат соответствующих функций, таких как формат даты, чисел, денежных единиц и пр. Значение UICulture определяет, какие ресурсы будут загружаться.
![]() |
---|
Свойства Culture и UICulture устанавливаются при помощи стандартных для данного языка строк (например en в случае английского языка, es для испанского и de для немецкого) и региональных параметров (например US для США, GB для Великобритании, MX для Мексики, и DE для Германии). Некоторые примеры: en-US Английский/США, en-GB Английский/Великобритания, и es-MX Испанский/Мексика. Дополнительные сведения см. в разделе CultureInfo. |
Эти два параметра не обязательно должны иметь совпадающие значения. В некоторых приложениях может оказаться целесообразным задавать их поодиночке. Примером может служить веб-узел веб-аукциона. Свойство UICulture может быть различным в различных обозревателях, но Culture остается неизменным. Таким образом, цены всегда отображаются в одной валюте и в одинаковом формате.
Значение Culture может устанавливаться только для отдельных региональных параметров, например en-US или en-GB. Таким образом исчезает проблема с определением правильного символа валюты для en, так как в en-US и en-GB символы валют различны.
Пользователи могут устанавливать язык и региональные параметры в обозревателе. Например, в Microsoft Internet Explorer в меню Сервис пользователь переходит в Параметры Интернета, затем на вкладку Общие затем Язык и устанавливает региональные параметры. Если атрибут enableClientBasedCulture в элементе globalization в файле Web.config file установлен в значение true, ASP.NET может установить язык и региональные параметры автоматически, основываясь на значениях, переданных браузером.
При установке языка и региональных параметров не рекомендуется целиком полагаться на параметры в браузере пользователя. Пользователи нередко используют другие обозреватели с неустановленными параметрами (например в интернет-кафе). Необходимо предоставить пользователям возможности изменения языка или региональных параметров (CultureInfo) на странице.
Декларативная установка языка и региональных параметров на веб-странице ASP.NET
Чтобы установить язык и региональные параметры для всех страниц, добавьте раздел globalization в файл Web.config, затем установите атрибуты uicultureculture, как показано в следующем примере:
<globalization uiCulture="es" culture="es-MX" />
Чтобы установить язык и региональные параметры для отдельной страницы, задайте атрибуты Culture и UICulture директивы @ Page, как показано в следующем примере:
<%@ Page UICulture="es" Culture="es-MX" %>
Чтобы позволить ASP.NET установить кодировки и региональные параметры к значениям для первого из языков, указанных в параметрах обозревателя, установите UICulture и Culture в значение auto. Можно также установить это значение в auto: culture_info_name, где culture_info_name является именем языка. Список имен языков и региональных параметров см. в описании класса CultureInfo. Можно изменить этот параметр позже, непосредственно в @ Page или в файле Web.config.
Программная установка языка и региональных параметров на веб-странице ASP.NET
Переопределите метод InitializeCulture для страницы.
В методе переопределения укажите, какой язык и региональные параметры будут установлены для страницы.
Примечание.
Метод InitializeCulture вызывается очень рано в жизненном цикле страницы, до создания элементов управления и установки свойств страницы. Таким образом, для чтения значений, переданных в страницу элементами управления, необходимо получать их непосредственно из запросов, используя коллекцию Form.
Установите язык и региональные параметры следующим образом:
Установите свойства Culture и UICulture на странице (например en-US). Эти свойства являются внутренними по отношению к странице и используются только на ней.
Установите свойства CurrentUICulture и CurrentCulture текущего потока в значения выбранного языка и кодировки соответственно. Свойство CurrentUICulture получает строку с информацией о языке и региональных параметрах. Для установки свойства CurrentCulture необходимо создать экземпляр класса CultureInfo и вызвать его метод CreateSpecificCulture.
В следующем примере кода показана веб-страница ASP.NET, которая позволяет пользователям выбирать язык в выпадающем списке. Страница импортирует два пространства имен (для удобства работы с классами потоков и глобализации).
<%@ 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>