Каков наилучший способ переключения файлов языковых ресурсов на основе переменной строки запроса в mvc?

Я использую MVC 4 и бритвенные представления. У нас есть приложение, которое извлекает файлы ресурсов. В настоящее время существует только один набор файлов ресурсов, но у нас есть запрос на некоторые переводы в частях сайта, в которых появятся дополнительные файлы ресурсов для иностранных языков.

Часть приложения отправляет рефералы пользователям, и в этом реферале есть возможность установить язык для отображения (независимо от того, какой установлен пользователь-клиент). Это будет установлено в строке запроса как lang=ES. Мы ссылаемся на переменные ресурсов в представлении вот так @Resources.Templates.ReferralAcceptance.DefaultAcceptanceMessage. Если в строке запроса нет значения lang, мне нужно по умолчанию использовать CultureCode, отправленный от клиента, который, если он недоступен, вернется к стандартной английской версии, которая у нас есть.

Я новичок в файлах ресурсов, особенно в MVC. Как лучше всего справиться с этим?


person lloydphillips    schedule 17.07.2013    source источник


Ответы (2)


Вот что я сделал в прошлом:

В файле web.config добавьте следующий параметр:

  <system.web>
    <globalization enableClientBasedCulture="true" />
  </system.web>

Это обработает ваш резервный экземпляр, в котором в строке запроса не указан язык.


Теперь к контроллеру, чтобы использовать параметр строки запроса «lang»:

(Обычно у меня был бы следующий код в «BaseController», и мои контроллеры наследуются от него.)

Добавьте в контроллер следующий метод переопределения:

protected override IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state)
{
    var culture = requestContext.HttpContext.Request.QueryString["lang"];

    //!!Check to see if culture exists and is valid before setting the thread culture

    var cultureInfo = new CultureInfo(culture);
    Thread.CurrentThread.CurrentCulture = cultureInfo;
    Thread.CurrentThread.CurrentUICulture = cultureInfo;

    return base.BeginExecute(requestContext, callback, state);
}

Это позволяет вам прочитать значение "lang" в строке запроса, а затем использовать его для установки языка и региональных параметров потока. Это должно переопределить любую культуру, установленную настройкой enableClientBasedCulture.

person Oliver    schedule 17.07.2013

Вместо использования строки запроса для указания языка лучше определить новый маршрут, например http://MyHost/Culture/Controller/Action/Id.

Во второй части этой статьи есть хорошее объяснение того, что вам нужно сделать:

Создание двуязычного приложения asp.net MVC — Часть 1

Создание двуязычного приложения asp.net MVC — Часть 2

person ataravati    schedule 17.07.2013