Подтвердить что ты не робот

ASP.NET MVC: Когда устанавливать Thread.CurrentThread.CurrentUICulture?

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

Мой вопрос: должен ли я установить 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"/>
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Если пользователь видит вашу страницу без установки языка на своей странице, вы должны проверить, поддерживает ли Request.UserLanguages ​​[0] язык, который вы поддерживаете, и установите Thread.CurrentThread.CurrentUICulture.

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

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