aplicação web multi-lingual - como faço para detectar o idioma do usuário em ASP.NET?
-
05-07-2019 - |
Pergunta
Estou construindo uma aplicação web ASP.NET, e todos os meus cordas são armazenados em um arquivo de recurso. Eu gostaria de adicionar uma segunda língua ao meu pedido e, idealmente, eu gostaria de detectar automaticamente o idioma do usuário do navegador (ou janelas idioma) e padrão para que, em vez de fazê-los escolher algo além do Inglês. Atualmente, estou lidando com toda a população o recurso manualmente, assim que adicionar um segundo arquivo de recurso ea linguagem é trivial do meu ponto de vista, se eu tivesse uma maneira fácil de determinar automaticamente o idioma para exibição.
Alguém fez isso, ou você tem alguma opinião sobre como eu poderia recuperar esse valor? Desde ASP.NET é baseado em servidor, eu não parecem ter qualquer acesso às configurações do navegador específicos.
Resolução : Aqui está o que eu acabei fazendo. Eu usei um "For Each" passar por "HttpContext.Current.Request.UserLanguages" e procurar um que eu apoio. Na verdade, estou apenas verificando a esquerda duas personagens, uma vez que não suportam nenhum dialetos ainda - apenas Inglês e Espanhol. Obrigado por toda a ajuda!
Solução
Este artigo (ligada à archive.org como link original é agora morto) pode ser útil com a detecção automática configuração de idioma do navegador.
[EDIT] Sim. O artigo citado não usa ASP.NET. Este artigo faz.
Outras dicas
Tente isto no web.config:
<globalization culture="auto" uiCulture="auto" />
Isto fará com que ASP.NET para detectar automaticamente a cultura do cliente a partir do cabeçalho do pedido. Você também pode definir isso em uma base por página através do atributo da página.
Request.UserLanguages ??em ASP.NET 4 Interpreta isso como uma matriz de cadeia.
Boa informação: http://www.w3.org/Protocols/rfc2616 /rfc2616-sec14.html
Esta é uma grande questão, como a localização em ASP.NET é dominada por muitos desenvolvedores.
ASP.NET deve automaticamente pegar em configurações do navegador do usuário e forçar o CultureInfo.CurrentCulture
de idioma do navegador do usuário. Você pode forçar o problema com uma linha em Page_OnInit()
como:
Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);
Como você pode testar isso? Digite o painel de línguas nas nossas configurações do navegador e de mudança.
O cliente geralmente define Accept-Language no cabeçalho da solicitação HTTP com um quantitativamente lista marcou de idioma preferido, convencionalmente (mas não necessariamente), a fim de mais favorecida para menos favorecidos. Você pode analisar isso, mas como Maxam observou, ASP.NET tem um mecanismo para fazer isso em seu nome.
/// <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
{ ;}
}
}
A fonte deste artigo é aqui: Como detectar o idioma do navegador