Многоязычное веб-приложение - как мне определить язык пользователя в ASP.NET?
-
05-07-2019 - |
Вопрос
Я создаю ASP.NET веб-приложение, и все мои строки хранятся в файле ресурсов.Я хотел бы добавить второй язык в свое приложение, и в идеале я хотел бы автоматически определять язык браузера пользователя (или язык Windows) и использовать его по умолчанию, вместо того чтобы заставлять их выбирать что-то помимо английского.В настоящее время я обрабатываю всю совокупность ресурсов вручную, поэтому добавление второго файла ресурсов и языка, с моей точки зрения, является тривиальным, если бы у меня был простой способ автоматически определить, какой язык отображать.
Кто-нибудь делал это, или у вас есть какие-нибудь мысли о том, как я мог бы получить это значение?Поскольку ASP.NET работает на сервере, у меня, похоже, нет доступа к определенным настройкам браузера.
РАЗРЕШЕНИЕ:Вот что я в итоге сделал.Я использовал "Для каждого", чтобы пройти через "HttpContext.Current.Request.Пользовательские языки" и найти тот, который я поддерживаю.На самом деле я просто проверяю два левых символа, поскольку мы пока не поддерживаем никаких диалектов - только английский и испанский.Спасибо за всю помощь!
Решение
Это статья (ссылка на archive.org поскольку исходная ссылка теперь недоступна) может быть полезно при автоматическом определении языковых настроек браузера.
[ПРАВИТЬ] Да.В цитируемой статье не используется ASP.NET .Это Статья делает.
Другие советы
Попробуйте сделать это в web.config:
<globalization culture="auto" uiCulture="auto" />
Это приведет к ASP.NET автоматическому определению культуры клиента по заголовку запроса.Вы также можете настроить это для каждой страницы с помощью атрибута Page.
Запрос.Пользовательские языки в ASP.NET 4 анализирует это как массив строк.
Хорошая информация: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Это отличный вопрос, так как локализация в ASP.NET это упускается из виду многими разработчиками.
ASP.NET следует автоматически переходите к настройкам браузера пользователя и принудительно CultureInfo.CurrentCulture
на язык браузера пользователя.Вы можете принудительно решить проблему с помощью строки в Page_OnInit()
Нравится:
Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);
Как вы можете это проверить?Войдите в языковую панель нашего браузера и измените настройки.
Клиент обычно устанавливает Принять-Язык в заголовке HTTP-запроса с количественно оцененным списком предпочтительных языков, традиционно (но не обязательно) в порядке от наиболее предпочтительного к наименее предпочтительному.Вы можете разобрать это, но, как отметил Максам, ASP.NET у него есть механизм для того, чтобы сделать это от вашего имени.
/// <summary>
/// Sets a user's Locale based on the browser's 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
{ ;}
}
}
Источник этой статьи находится здесь:Как определить язык браузера