Поделиться через


Практическое руководство. Установка значений Culture и UICulture для глобализации веб-страниц ASP.NET

Обновлен: Ноябрь 2007

На веб-странице ASP.NET можно установить два региональных и языковых параметра: свойства Culture и UICulture. Языковые и региональные параметры Culture обуславливают результат соответствующих функций, таких как формат даты, чисел, денежных единиц и пр. Значение UICulture определяет, какие ресурсы будут загружаться.

bz9tc508.alert_note(ru-ru,VS.90).gifПримечание.

Свойства 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

  1. Переопределите метод InitializeCulture для страницы.

  2. В методе переопределения укажите, какой язык и региональные параметры будут установлены для страницы.

    bz9tc508.alert_note(ru-ru,VS.90).gifПримечание.

    Метод InitializeCulture вызывается очень рано в жизненном цикле страницы, до создания элементов управления и установки свойств страницы. Таким образом, для чтения значений, переданных в страницу элементами управления, необходимо получать их непосредственно из запросов, используя коллекцию Form.

  3. Установите язык и региональные параметры следующим образом:

    • Установите свойства 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>
    

См. также

Другие ресурсы

Глобализация и локализация ASP.NET