Как получить пользовательскую культуру в расширении HtmlHelper для приложения MVC 3 .NET? - PullRequest
0 голосов
/ 07 октября 2011

Я создаю новое расширение HtmlHelper для моего приложения MVC 3.Мне нужно получить информацию о культуре пользователя, просматривающего страницу внутри моего нового помощника.

Как я могу его получить ??

public static class HtmlExtension
{
    public static string StringFor(this HtmlHelper html, string key)
    {
        ...
        //I need to get CultureInfo in here!
        ...
    }
}

1 Ответ

4 голосов
/ 07 октября 2011

Прямой ответ - «хватай через CultureInfo.CurrentCulture», но сам по себе он тебе не поможет.

Учтите, что ваше приложение не имеет понятия "культура пользователя" - пользователь общается с вами через браузер, а вы не в его системе.

Теперь браузер предоставляет вам заголовок Accept-Language, с которым вы можете работать (Google даст вам много просмотров), но не рекомендуется использовать этот параметр для определения языкового стандарта пользователя, поскольку на практике едва ли кто-либо знает об этом параметре и настроил его так, чтобы он отражал их предпочтения.

Наилучший подход, вероятно, состоит в том, чтобы в одностороннем порядке решить, какова культура пользователя (например, иметь en по умолчанию, и дать им возможность изменить его через пользовательский интерфейс), сохранить его где-нибудь (либо в состоянии сеанса, либо в виде переменная маршрута) и вставьте ее в CultureInfo.CurrentCulture внутри HttpApplication.AcquireRequestState. Вы можете сделать это внутри Global.asax (пример взят из MSDN ):

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    CultureInfo ci = (CultureInfo)this.Session["culture"];
    if (ci != null) {
        CurrentThread.CurrentUICulture = ci;
        CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
    }
}

В этот момент этот ответ становится самоисполняющимся пророчеством, и вы можете получить доступ к культуре через CultureInfo.CurrentCulture из любого места.

...