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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top