O suporte à localização em navegadores herdados é ruim. Originalmente, isso se devia a frases na ECMAScript
especificação do idioma que se parecem com isso:
Number.prototype.toLocaleString ()
Produz um valor de string que representa o valor do Number formatado de acordo com as convenções da localidade atual do ambiente host. Essa função depende da implementação e é permitida, mas não incentivada, retornar a mesma coisa que toString .
Todo método de localização definido na especificação é definido como "dependente da implementação", o que resulta em muitas inconsistências. Nesse caso, o Chrome Opera e o Safari retornariam a mesma coisa que .toString()
. O Firefox e o IE retornarão seqüências de caracteres no formato local e o IE ainda inclui um separador de milhar (perfeito para seqüências de moeda). O Chrome foi atualizado recentemente para retornar uma string separada por milhares, embora sem decimal fixo.
Para ambientes modernos , a especificação da API de internacionalização do ECMAScript , um novo padrão que complementa a especificação da linguagem do ECMAScript, fornece suporte muito melhor para comparação de cadeias, formatação de números e formatação de data e hora; também corrige as funções correspondentes na especificação de idioma. Uma introdução pode ser encontrada aqui . As implementações estão disponíveis em:
- Chrome 24
- Firefox 29
- Internet Explorer 11
- Opera 15
Há também uma implementação de compatibilidade, Intl.js , que fornecerá a API em ambientes onde ela ainda não existe.
Determinar o idioma preferido do usuário continua sendo um problema, pois não há especificação para obter o idioma atual. Cada navegador implementa um método para obter uma sequência de idiomas, mas isso pode se basear no idioma do sistema operacional do usuário ou apenas no idioma do navegador:
// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;
Uma boa solução para isso é despejar o cabeçalho Accept-Language do servidor para o cliente. Se formatado como JavaScript, ele pode ser passado para os construtores da API de internacionalização, que escolherão automaticamente o melhor local (ou o primeiro suportado).
Em suma, você deve dedicar muito do seu trabalho ou usar uma estrutura / biblioteca , porque não pode confiar no navegador para fazer isso por você.
Várias bibliotecas e plugins para localização:
Sinta-se livre para adicionar / editar.