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);
            }
        }

Вроде работает. Я не беспокоюсь о проверке, когда пользователь переключает свой язык, и теперь кажется, что он выбирает текущий язык и переводит ошибки на стороне сервера.

Но это приемлемый способ решения этой проблемы, или я должен делать что-то еще. Благодарю.

0 ответов

Другие вопросы по тегам