Ответ 1
Эта статья (связанная с archive.org, поскольку исходная ссылка сейчас мертва) может быть полезна при автоматическом обнаружении настроек языка браузера.
[EDIT] Да. В цитируемой статье не используется ASP.NET. Это статья.
Я создаю веб-приложение ASP.NET, и все мои строки хранятся в файле ресурсов. Я хотел бы добавить второй язык в свое приложение, и в идеале я бы хотел автоматически определять язык браузера пользователя (или язык Windows) и по умолчанию, вместо того, чтобы делать что-то, кроме английского. В настоящее время я обрабатываю всю совокупность ресурсов вручную, поэтому добавление второго файла ресурсов и языка тривиально с моей точки зрения, если бы у меня был простой способ автоматически определять, какой язык отображать.
Кто-нибудь это сделал, или у вас есть какие-то мысли о том, как я могу получить это значение? Поскольку ASP.NET является серверным, у меня нет доступа к определенным настройкам браузера.
РЕШЕНИЕ. Вот что я в итоге сделал. Я использовал "для каждого", чтобы пройти через "HttpContext.Current.Request.UserLanguages" и искать один, который я поддерживаю. Я на самом деле просто проверяю двух оставшихся символов, поскольку пока мы не поддерживаем никаких диалектов - просто английский и испанский. Спасибо за помощь!
Эта статья (связанная с archive.org, поскольку исходная ссылка сейчас мертва) может быть полезна при автоматическом обнаружении настроек языка браузера.
[EDIT] Да. В цитируемой статье не используется ASP.NET. Это статья.
Попробуйте это в web.config:
<globalization culture="auto" uiCulture="auto" />
Это заставит ASP.NET автоматически определять культуру клиента из заголовка запроса. Вы также можете установить это для каждой страницы через атрибут страницы.
Это отличный вопрос, поскольку многие разработчики пропускают локализацию в ASP.NET.
ASP.NET должен автоматически выбирать настройки браузера пользователя и принудительно использовать CultureInfo.CurrentCulture
на языке браузера пользователя. Вы можете задать проблему с помощью строки в Page_OnInit()
, например:
Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);
Как вы можете это проверить? Войдите в панель языков в нашем браузере и измените настройки.
Клиент обычно устанавливает Accept-Language в заголовке HTTP-запроса с количественно забитым списком предпочтительного языка, условно (но не обязательно) в порядке предпочтения наименее благоприятствуемым. Вы можете разобрать это, но, как отметил Максэм, ASP.NET имеет механизм для этого от вашего имени.
Request.UserLanguages в ASP.NET 4 анализирует это как строковый массив.
Хорошая информация: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
/// <summary>
/// Sets a user Locale based on the browser Locale setting. If no setting
/// is provided the default Locale is used.
/// </summary>
public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture)
{
HttpRequest Request = HttpContext.Current.Request;
if (Request.UserLanguages == null)
return;
string Lang = Request.UserLanguages[0];
if (Lang != null)
{
// *** Problems with Turkish Locale and upper/lower case
// *** DataRow/DataTable indexes
if (Lang.StartsWith("tr"))
return;
if (Lang.Length < 3)
Lang = Lang + "-" + Lang.ToUpper();
try
{
System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang);
if (CurrencySymbol != null && CurrencySymbol != "")
Culture.NumberFormat.CurrencySymbol = CurrencySymbol;
System.Threading.Thread.CurrentThread.CurrentCulture = Culture;
if (SetUiCulture)
System.Threading.Thread.CurrentThread.CurrentUICulture = Culture;
}
catch
{ ;}
}
}
Источник этой статьи находится здесь: Как определить язык браузера