Для многоязычного веб-приложения ASP.NET MVC 3 я определяю Thread.CurrentThread.CurrentCulture и Thread.CurrentThread.CurrentUICulture на контроллере factory следующим образом:
public class MyControllerFactory : DefaultControllerFactory {
    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) {
        //Get the {language} parameter in the RouteData
        string UILanguage;
        if (requestContext.RouteData.Values["language"] == null)
            UILanguage = "tr";
        else
            UILanguage = requestContext.RouteData.Values["language"].ToString();
        //Get the culture info of the language code
        CultureInfo culture = CultureInfo.CreateSpecificCulture(UILanguage);
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
        return base.GetControllerInstance(requestContext, controllerType);
    }
}
Приведенный выше код уже почти год! Итак, я открываю для предложений.
И я зарегистрирую это в файле Global.asax, например:
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
Это работает хорошо, но я не уверен, что это лучшая практика и лучшее место для этого типа действий.
Я не врывался в основную роль ControllerFactory, и я не могу сравнить его с ActionFilterAttribute.
Что вы думаете о лучшем месте для этого типа действий?