A maneira correta é examinar o cabeçalho HTTP Accept-Language enviado ao servidor. Ele contém a lista ordenada e ponderada de idiomas para os quais o usuário configurou seu navegador para preferir.
Infelizmente este cabeçalho não está disponível para leitura dentro do JavaScript; tudo o que você obtém é o navigator.language
que informa qual versão localizada do navegador da web foi instalada. Isso não é necessariamente o mesmo que o idioma preferido do usuário. No IE, você obtém systemLanguage
(idioma instalado do SO), browserLanguage
(o mesmo que language
) e userLanguage
(região do SO configurada pelo usuário), que são igualmente inúteis.
Se eu tivesse que escolher entre essas propriedades, cheiraria userLanguage
primeiro, voltando ae language
somente depois disso (se elas não correspondessem a nenhum idioma disponível) olhando browserLanguage
e finalmente systemLanguage
.
Se você pode colocar um script do lado do servidor em outro lugar na rede que simplesmente lê o cabeçalho Accept-Language e o cospe novamente como um arquivo JavaScript com o valor do cabeçalho na string, por exemplo:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
você pode incluir um <script src> apontando para esse serviço externo no HTML e usar JavaScript para analisar o cabeçalho do idioma. Porém, não conheço nenhum código de biblioteca existente para fazer isso, pois a análise do Accept-Language é quase sempre feita no lado do servidor.
O que quer que você acabe fazendo, certamente precisará de uma substituição de usuário, porque sempre achará errado para algumas pessoas. Geralmente, é mais fácil colocar a configuração de idioma no URL (por exemplo, http: //www.example.com/en/site vs http: //www.example.com/de/site) e deixar o usuário clicar em links entre os dois. Às vezes, você deseja um único URL para as duas versões de idioma; nesse caso, você deve armazenar a configuração em cookies, mas isso pode confundir os agentes do usuário sem suporte para cookies e mecanismos de pesquisa.