GetLocalResourceObject внутри контроллера - PullRequest
2 голосов
/ 23 октября 2011

У меня есть вызов ajax, который возвращает локализованное сообщение об успехе на основе httpcontext,

        public ActionResult ReportViolation(string DiscussID) {

        Enumeration.Lang rLang = (Request.Cookies["MAKANI.Localization.CurrentUICulture"].Value.Equals("ar-EG")) ?
                        Enumeration.Lang.Arabic : Enumeration.Lang.English;


        if (Session["sId"] == null) return Json(false,
                                                HttpContext.GetLocalResourceObject("~/Views/Home/Index.cshtml", "msgDiscussViolationRegister").ToString(), 
                                                0, 
                                                null);
        else {
            long userId = AuthenticationModule.GetUserId(Convert.ToInt32(Session["sId"]));
            bool rReport = Discuss_BL.ReportViolation(Convert.ToInt32(DiscussID), userId);
            string rError = rReport 
                        ? HttpContext.GetLocalResourceObject("~/Views/Home/Index.cshtml", "msgDiscussViolationSuccess").ToString() 
                        : HttpContext.GetLocalResourceObject("~/Views/Home/Index.cshtml", "msgDiscussViolationExist").ToString();
            return Json(rReport, rError, 0, null);            
        }

    }

Однако ресурсы всегда отправляют обратно английскую версию, это правильный способ использования HttpContext с контроллера?

- С уважением.

Yehia A.Salam

Ответы [ 2 ]

3 голосов
/ 23 октября 2011

HttpContext работает как контекст server , по умолчанию он возвращает локаль операционной системы (точнее, CultureInfo.CurrentUICulture). Вам нужно как-то прочитать языковой стандарт пользователя - либо запросив HttpContext.Current.Request.UserLanguages, который может быть пустым, либо явно запросив у пользователя эту информацию.

Как пишет Скотт Хансельман в своей превосходной статье о глобализации , ASP.Net может фактически установить для вас культуру рабочих потоков (Thread.Current.UICulture и Thread.Current.Culture), анализируя HTTP-заголовок Accept-Languages. Просто добавьте этот фрагмент к вашему web.config для <globalization>:

<system.web>
  <globalization enableclientbasedculture="true" uiculture="auto" culture="auto">
...snip...</globalization></system.web>

Просто имейте в виду, что пользователь мог неправильно настроить свой браузер, поэтому у него всегда должна быть возможность переопределить языковые настройки.

0 голосов
/ 18 апреля 2012

По умолчанию значения Thread.Current.UICulture и Thread.Current.Culture не изменяются ASP.NET и, следовательно, относятся к контексту серверов - и, таким образом, вызовы типа GetLocalResourceObject не будут реагировать на настройки браузера пользователя. .

Однако ASP.NET может проанализировать HTTP-заголовок Accept-Languages ​​и установить соответствующие значения Culture и UICulture.

<system.web>
  <globalization enableclientbasedculture="true" culture="auto" uiCulture="auto" />
</system.web>

Эта статья хорошо читается: Глобализация, интернационализация и локализация в ASP.NET MVC 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...