2011-04-06 7 views
4

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

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

<%@ 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>  

Спасибо

ответ

7

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

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 может быть унаследован на каждой странице.

+0

Вот страница [msdn] (http://msdn.microsoft.com/en-us/library/bz9tc508.aspx), которая показывает, как это сделать, а также объясняет трудности с использованием данных post –

0

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

+0

I «Я читал статьи и в книге. Они вообще не используют response.redirect и работают свои экзамены (вот если я могу поверить в книгу). Response.redirect - это то, что я добавил. Я попытался сохранить выбранную культуру в объекте профиля. –

1

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

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

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

+0

Благодарим вас за ответ , Я отдам это за минуту. –

+3

Это неправильно: культуру необходимо установить в начале жизненного цикла страницы, и это обычно делается в методе InitializeCulture. PreRender встречается слишком поздно в жизненном цикле страницы, чтобы использовать его. Я подозреваю, что вы, вероятно, намеревались сказать PreInit. – Joe

+0

@ Joe, извините, вы правы, я имел в виду PreInit, спасибо за ваше внимание. Я отредактировал свой главный ответ. –

1

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

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

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

  • Куки-файлы, отправленные клиенту с ответом.

  • В URL, к которому вы перенаправить (например, в строку запроса - например, языки = Ур-PK)

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

+0

Идеальный смысл. Как всегда есть несколько способов сделать почти то же самое в .NET. Я считаю, что сессия наиболее подходит для моих требований. спасибо –

Смежные вопросы