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