Невозможно изменить культуру страницы .aspx - PullRequest
4 голосов
/ 06 апреля 2011

Я не могу изменить культуру страницы .aspx.

Когда я указываю язык с помощью директивы страницы вверху:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="VideoPlayerPrototype.Index" Culture="ur-PK" UICulture="ur-PK" %>

Все работает как положено.

Что я хотел бы сделать, так это уметь изменять локализацию, когда пользователь нажимает на ссылку.

Ссылка:

<asp:ImageButton ID="lang_ur-PK" 
                            ImageUrl="~/content/image/flag-of-pakistan.png" 
                            runat="server" 
                            CssClass="language" 
                            Height="64px" 
                            Width="64px"
                            OnClick="setLanguage" />

метод setLanguage:

        protected void setLanguage(Object sender, EventArgs e)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ur-PK");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ur-PK");
            Response.Redirect(Request.Path);
        }

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

У меня есть файлы .resx, хранящиеся в App_LocalResources и App_GlobalResources:

Index.aspx.resx, Index.aspx.en.resx, Index.aspx.ur-PK.resx, Index.aspx.ur.resx и т. Д.

Вот пример элемента управления, который должен быть локализован:

 <asp:Label id="lblInfoWelcomeMsg" runat="server" 
                            Text="<%$ Resources:LocalizedText, Summary_Info_WelcomeMsg %>"></asp:Label>       

Спасибо

Ответы [ 4 ]

7 голосов
/ 06 апреля 2011

Вы должны добавить этот метод в ваш код:

protected override void InitializeCulture()
    {
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ur-PK");
        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ur-PK");
        base.InitializeCulture();
    }

Было бы лучше, если бы вы могли сделать BasePage классом и добавить его тут же, а затем BasePage можно наследовать на каждой странице.

1 голос
/ 06 апреля 2011

Ваш обработчик кликов просто меняет культуру потока для текущего запроса - это было давно забыто, когда страница обновляется после вашего Response.Redirect.

Вам нужно где-то сохранить новую культуру, затем прочитать ее иустановить культуру в начале каждого последующего запроса (например, в Page.InitializeCulture).Обычные места для сохранения:

  • База данных на сервере.

  • Файл cookie, отправленный клиенту с ответом.

  • В URL-адресе, на который вы перенаправляете (например, в строке запросов - например,? Lang = ur-PK)

  • Сеанс (но он будет забыт, еслисеанс истекает)

1 голос
/ 06 апреля 2011

Вы должны сделать это в Page_PreInit, потому что локализация может быть изменена только в этом событии.

Обратите внимание, что где бы вы ни изменили локаль, декларативная страница переопределит ее, но вы можете изменить ее в Page_PreInit

Установите только флаг в вашем imageButton_Click (), а затем в Page_PreInit измените локаль на основе значения флага.

0 голосов
/ 06 апреля 2011

Перенаправляя ответ, вы запускаете новую тему. Возьмите нужную культуру, сохраните ее в сеансе, а затем при загрузке страницы установите значение культуры в сеансе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...