Я схожу с ума от локализации приложения MVC.
После моего недавнего вопроса я последовал следующему подходу:
- Язык хранится в сеансе ["lang"].
- Каждый контроллер наследуется от моего собственного BaseController, который переопределяет OnActionExecuting, и в этом методе считывает сеанс и устанавливает CurrentCulture и CurrentUICulture.
Это отлично работает, пока не появится уровень аннотации данных. Кажется, что он вызывается ДО того, как будет выполнено само действие, и поэтому он всегда получает сообщения об ошибках на языке по умолчанию!
Объявления полей выглядят так:
[Required(ErrorMessageResourceName = "validazioneRichiesto", ErrorMessageResourceType = typeof(Resources.Resources))]
public string nome { get; set; }
Итак, есть ли какое-нибудь разумное место, куда я могу позвонить?
Я инициализирую связыватель модели аннотации данных в своем конструкторе контроллера.
public CardController() : base() {
ModelBinders.Binders.DefaultBinder =
new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
}
Итак, поскольку Session всегда имеет значение NULL в конструкторе контроллера, а переопределение действия вызывается ПОСЛЕ того, как аннотация данных проверила поля, где я могу установить CurrentCulture и CurrentUICulture для получения локализованных ошибок?
Я попытался поместить CurrentCulture и CurrentUiCulture в Application_ * (например, Application_AcquireRequestState или Application_PreRequestHandlerExecute), похоже, не имеет никакого эффекта ...