Griffin.MvcContrib Локализация с помощью FluentValidation
Я работал над своим первым проектом по локализации для mvc и использовал отличный Griffin.MvcContrib, чтобы начать работу.
Я использую Griffin для обработки изменения языка и просмотра страниц, и у меня есть настраиваемая настройка провайдера для обработки моделей и проверки с помощью ресурсов базы данных.
Проверка выполняется с помощью FluentValidation следующим образом:
RuleFor(x => x.Bin)
.Length(0, 50)
.WithMessage(localizationService.GetResource("Inspection.Bin.Length"));
Казалось, все работало замечательно, пока я не понял, что ошибки на стороне сервера не переводятся, а только на стороне клиента. После длительного расследования мне кажется, что проблема заключается в том, что культура потоков устанавливается после проверки на стороне сервера - я полагаю, что то же самое происходило в этом другом посте:
Глобализация MVC3 не установлена для ModelState.Value.Culture
Что я сделал, чтобы заставить это работать до сих пор, просто поместил следующее в файл Global.asax.
protected void Application_BeginRequest(object sender, EventArgs e)
{
string CookieName = "GriffinLanguageSwitcher";
HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
if (currentContext.Request.Cookies[CookieName] != null)
{
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture =
new CultureInfo(currentContext.Request.Cookies[CookieName].Value);
}
}
Вроде работает. Я не беспокоюсь о проверке, когда пользователь переключает свой язык, и теперь кажется, что он выбирает текущий язык и переводит ошибки на стороне сервера.
Но это приемлемый способ решения этой проблемы, или я должен делать что-то еще. Благодарю.