Прямой ответ - «хватай через 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
из любого места.