ASP.NET MVC:Когда устанавливать поток.currentThread.Текущая культура?

StackOverflow https://stackoverflow.com/questions/1633980

Вопрос

Я только начинаю локализовывать приложение ASP.NET MVC.Большинство строк будут определены в файлах ресурсов и извлечены с помощью Помощники Мэтта по Локализации.Другие строки должны храниться в базе данных.

Мой Вопрос: Должен ли я установить CurrentUICulture на ранней стадии конвейера запросов и используйте это во всем приложении или непосредственно используйте Request.UserLanguages[0] когда это будет необходимо?

Прямо сейчас Я думаю, что мне следует установить CurrentUICulture в Application_BeginRequest.Реализация будет выглядеть примерно так:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var cultureName = HttpContext.Current.Request.UserLanguages[0];
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
}

Это лучшее место для съемок CurrentUICulture и является Request.UserLanguages[0] лучшее место для получения этой информации?


Обновить:

Ариэль сообщение показывает, что это может быть определено без кода, используя web.config

<system.web>
  <!--If enableClientBasedCulture is true, ASP.NET can set the UI culture and culture for a Web page automatically, based on the values that are sent by a browser.-->
  <globalization enableClientBasedCulture="true" culture="auto:en-US" uiCulture="auto:en"/>
Это было полезно?

Решение

Вот пример использования HttpModule:

http://weblogs.manas.com.ar/smedina/2008/12/17/internationalization-in-aspnet-mvc/

Другие варианты: создайте базовый класс контроллера и реализуйте там логику локализации.Или используйте атрибут action filter, но вам нужно будет не забыть добавить его на каждый контроллер или объединить этот подход с базовым классом контроллера.

Другие советы

Запрос.Пользовательские языки [0] могут быть только подсказкой, какой язык пользователи хотят видеть.Большинство пользователей не знают, где сменить язык браузера.

Еще один момент:Не будьте уверены, что запрос выполнен.UserLanguages[0] является допустимым языком.Оно даже может быть нулевым.(Не уверен, что там есть у ботов)

Обычно у вас есть кнопка выбора языка на странице.Как только пользователь выбирает там язык, он сохраняется в файле cookie, сеансе или URL-адресе.Мне нравится использовать url, потому что я думаю, что это выглядит красиво.

Если пользователь видит вашу страницу, не установив язык на вашей странице, вам следует проверить, есть ли запрос.UserLanguages[0] - это язык, который вы поддерживаете, и задать поток.currentThread.Современная культура.

Я использую фильтр для установки потока.currentThread.CurrentUICulture.Это нормально, пока ни один другой фильтр не использует Thread.currentThread.CurrentUICulture.В противном случае вам нужно было бы установить правильный порядок выполнения фильтров.

Я также использую Matts helper, и до сих пор это работало очень хорошо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top