IHttpModule для установления локализации

Дали сайт, с кучей страниц, где каждая страница унаследована от System.Web.UI.Page, а необходимо реализовать многоязычность. Таким образом – овверайдить для каждой страницы определение локали – невозможно, а ходить по всем страницам и менять базовый класс – как-то не хотелось.
Потому решил создать HttpModule, т.к. они вызываются для каждого запроса.

1. создаем класс, инмплементируем интерфейсом IHttpModule, не забывая удалить эксепшн в методе Dispose()

2. функция public void Init(HttpApplication context)вызывается при старте Application и через HttpApplication можем навесить обработчик на начало запроса от пользователя:
context.BeginRequest += (o, e) => { наш код }

context.BeginRequest += (o, e) =>
{
if (context.Context.Request["ui"] != null
)
LanguageUtility.SetCurrentCulture(context.Context.Request["ui"
]);
 
else // выглядит не ахти, но это правильно
LanguageUtility.SetCurrentCulture(LanguageUtility
.CurrentCulture);
};

3. устанавливаем локаль:


А в LanguageUtility уже запоминаем локаль, в моем случае – в кукисы
Имейте ввиду – устанавливать локаль необходимо постоянно


4. Установка культуры потока:

Thread.CurrentThread.CurrentCulture =
               
CultureInfo
.CreateSpecificCulture(culture);

Thread.CurrentThread.CurrentUICulture =
new CultureInfo(culture);

5. Чтобы модуль заработал – необходимо его зарегистрировать в файле web.config:


<system.web>
  <httpModules>
    <add name="CultureModule" type="HttpModules.CultureModule" />
  </
httpModules>
</system.web>


6. собственно – установите бряки и отлаживайте


Имейте ввиду, что подобное можно было сделать и без создания HttpModule, а всего лишь использовать событие Application_BeginRequest класса Global : System.Web.HttpApplication


Но с другой стороны – если придется реализовывать не одну логику проверки на реквесте, а допустим несколько, и возможно – переносить логику на другое приложение, то HttpModule довольно-таки удобная вещь

Комментариев нет:

Отправить комментарий

Можете оставить свой комментарий