ASP.NET MVC:Когда устанавливать поток.currentThread.Текущая культура?
-
06-07-2019 - |
Вопрос
Я только начинаю локализовывать приложение 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, и до сих пор это работало очень хорошо.