Культура локализации MVC в httpmodule - PullRequest
0 голосов
/ 13 января 2012

Я реализовал локализацию в своем приложении MVC3.

Я ищу решение для настройки текущей культуры перед выполнением атрибута ActionFilterAttribute.

Я хотел бы узнать текущую культуру из URL:

routes.MapRoute(
                "Language",
                "{culture}/{controller}/{action}/{id}",
                new { culture = "en", controller = "Page", action = "Index", id = UrlParameter.Optional }
                );

в базовом контроллере я могу сделать:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var culture = filterContext.RouteData.Values["culture"] ?? ConfigurationSettings.AppSettings["DefaultCulture"];
            var cultureInfo = CultureInfo.GetCultureInfo((string)culture);
            Thread.CurrentThread.CurrentCulture = cultureInfo;
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
            base.OnActionExecuting(filterContext);
        }

Я хотел бы обновить приложение и настроить текущую культуру в httpmodule

на данный момент мой код выглядит так:

public void Init(HttpApplication httpApplication)
        {
            httpApplication.BeginRequest += (sender, eventArgs) =>
            {
                var defaultCulture = ConfigurationSettings.AppSettings["DefaultCulture"];
                CultureInfo cultureInfo = CultureInfo.GetCultureInfo(defaultCulture);
                try
                {
                    Thread.CurrentThread.CurrentCulture = cultureInfo;
                    Thread.CurrentThread.CurrentUICulture = cultureInfo;
                }
                catch { }
            };
        }

как настроить текущую культуру, используя filterContext.RouteData.Values ​​["culture"] в модуле http?

Спасибо заранее за любую помощь

Ori

1 Ответ

1 голос
/ 01 марта 2012

Вы должны использовать пользовательский обработчик маршрута, чтобы установить культуру в соответствии с информацией о маршруте.Смотрите пример ниже:

public class CultureMvcRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        if (requestContext == null)
        {
            throw new ArgumentNullException("requestContext");
        }

        string culture = requestContext.RouteData.Values["culture"] as string ?? "";
        CultureInfo ci = CreateCultureInfo(culture);
        Thread.CurrentThread.CurrentUICulture = ci;

        return base.GetHttpHandler(requestContext);
    }

    private CultureInfo CreateCultureInfo(string culture)
    {
        if (culture == null)
        {
            throw new ArgumentNullException("culture");
        }

        CultureInfo ci = null;

        try
        {
            ci = new CultureInfo(culture);
        }
        catch (CultureNotFoundException)
        {
            ci = CultureInfo.InvariantCulture;
        }

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