Программно установить культуру пользовательских элементов управления в ASP.NET - PullRequest
4 голосов
/ 02 февраля 2011

Я бы хотел программно установить культуру моего пользовательского элемента управления, которая определяет несколько меток, кнопок и текстовых полей ...

Обычно для aspx-страниц вы переопределяете метод InitializeCulture-Method и устанавливаете Культуру и UICulture для достижения этого, увы, ASCX-Controls не имеют этого метода, так как именно я это сделаю?

Я настроил локальные ресурсы mycontrol.ascx.de-DE.resx, mycontrol.ascx.resx и mycontrol.ascx.en-GB.resx, но только значения файла по умолчанию (mycontrol.ascx.resx ) используются.

Заранее спасибо.

Dennis

Ответы [ 3 ]

7 голосов
/ 20 ноября 2012

Я также потратил часы на эту проблему и, наконец, получил это решение.Вам нужно только переопределить FrameworkInitialize() вместо initilizeculture(), например:

protected override void FrameworkInitialize()
{
    String selectedLanguage = LanguageID;
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);

    base.FrameworkInitialize();
}

Jus Поместите этот код в ваш файл ascx.cs. Эту функцию переопределения вызывать не нужно.

5 голосов
/ 02 февраля 2011

Текущая культура является поточной: Page.Culture и Page.UICulture фактически устанавливают Thread.CurrentThread.CurrentCulture и Thread.CurrentThread.CurrentUICulture под капотом.

Если пользовательский элемент управления определен в разметке вашей страницы, я не будуНе думаю, что ты можешь что-то сделать.Если вы загрузите его с помощью LoadControl(), вы можете временно переопределить культуру текущего потока перед вызовом и восстановить его после, но это будет довольно неудобно:

protected void Page_Load(object sender, EventArgs e)
{
    // Some code...

    CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
    CultureInfo oldUICulture = Thread.CurrentThread.CurrentUICulture;
    Thread.CurrentThread.CurrentCulture = yourNewCulture;
    Thread.CurrentThread.CurrentUICulture = yourNewUICulture;

    try {
        Controls.Add(LoadControl("yourUserControl.ascx"));
    } finally {
        Thread.CurrentThread.CurrentCulture = oldCulture;
        Thread.CurrentThread.CurrentUICulture = oldUICulture;
    }

    // Some other code...
}
2 голосов
/ 14 января 2012

Я использовал следующий код для изменения языка asp.net mvc на странице моего проекта

public ActionResult ChangeCulture (Culture lang, string returnUrl)
     {
         if (returnUrl.Length> = 3)
         {
             returnUrl = returnUrl.Substring (3);
         }
         return redirect ("/" + lang.ToString () + returnUrl);
     }

также я использовал usercontrol (ascx) на той же странице. Когда я изменил язык с помощью actionlink, изменился язык просмотра, но событие загрузки пользовательского элемента управления не захватывает изменение, поэтому язык просмотра изменяется, но язык usercontrol не меняется

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