ASP.NET MVC: когда устанавливать Thread.CurrentThread.CurrentUICulture? - PullRequest
28 голосов
/ 28 октября 2009

Я только начинаю локализовать приложение ASP.NET MVC. Большая часть строк будет определена в файлах ресурсов и получена с помощью Matt's 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"/>

Ответы [ 2 ]

13 голосов
/ 28 октября 2009

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

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

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

6 голосов
/ 28 октября 2009

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

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

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

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

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

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

...