Как запретить Thread.CurrentThread.CurrentCulture переключаться на значение браузера по умолчанию после его установки вручную? - PullRequest
1 голос
/ 26 августа 2010

В моем текущем приложении я хочу реализовать локализацию ASP.Net с глобальными ресурсами.У меня проблема в том, что после изменения CurrentThread.CurrentUICulture и CurrentThread.CurrentCulture и перехода на другую страницу эти значения перезаписываются значениями браузера по умолчанию.

У меня есть DropDownList, который позволяет выбирать между разными языками.В событии ItemChanged я сохраняю имя культуры в сеансе, перенаправляю на страницу по умолчанию и использую этот код

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

После переключения на другую страницу содержимого, которая не переопределяет InitializeCulture, я вернулся к языку браузера по умолчанию.Как я могу сделать это постоянным?

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

  • На каждой странице * .aspx я реализую InitializeCulture
  • Я создаю новый класс, который наследуется от System.Web.UI.Page и переопределяетInitializeCulture Eventhandler.Каждая * .aspx-страница, которую я использую, происходит от нее.

Нет ли более «встроенного» способа?ASP.net предлагает такую ​​хорошую поддержку локализации, поэтому я думаю, что должен быть более простой / более эффективный способ достижения моей цели.Кто там?

Ответы [ 3 ]

2 голосов
/ 26 августа 2010

Вам необходимо переустановить культуру в методе InitializeCulture вашей базовой страницы, как вы уже описали.Это должно быть сделано при каждом запросе.Значение CurrentCulture устанавливается на основе заголовка Accept-Languages, отправленного браузером, и всегда будет устанавливаться таким образом для каждого нового запроса.Нет другого выбора, кроме как установить его вручную после каждого нового запроса, и Page.InitializeCulture - хорошее место для этого.

1 голос
/ 26 августа 2010

Посмотрите на Модули Asp.Net или перехват событий в global.asax.

Использование базового класса, из которого все страницы наследуются, является еще одним хорошим вариантом, но сложнее повторно использовать базовый класс между проектами, которыми является модуль.

0 голосов
/ 26 августа 2010

Вы можете поместить культуру в свой web.config, в раздел system.web:

<globalization culture="de-DE"/>
...