Como a internacionalização funciona em JavaScript?

143

Eu estou querendo saber como lidar com a internacionalização em JavaScript. Pesquisei no Google, mas não estou obtendo respostas convincentes para:

  • O JavaScript tem suporte nativo para internacionalização?
  • O que é i18n em JavaScript?
  • Como lidar com calendários, moedas, datas etc.?

Eu já li Internacionalização dentro de JavaScript .

rajakvk
fonte
A Microsoft lançou recentemente um plug-in de globalização jquery. Os detalhes estão aqui
Adeel

Respostas:

161

O suporte à localização em navegadores herdados é ruim. Originalmente, isso se devia a frases na ECMAScriptespecificaçã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:

  • Outras:

Sinta-se livre para adicionar / editar.

Andy E
fonte
13
Obrigado a todas as pessoas que contribuíram; Eu nunca pensei que poderia aprender algo lendo minhas respostas antigas. Fico feliz em ver a atualização das especificações da API de internacionalização lá, isso é realmente incrível e eu só tenho que testá-lo no Chrome.
Andy E
1
Obrigado pela excelente compilação. Em uma nota positiva, parece que a Mozilla pode enviar um toLocaleString moderna () breve - possivelmente FF28: bugzilla.mozilla.org/show_bug.cgi?id=769871
Chris Adams
1
O i18next.com agora vem com um gerenciamento de tradução criado em cima de locize.com - isso pode ser uma grande vitória se você precisar resolver o processo completo de tradução - e não apenas instrumentar seu código para o i18n. Além disso, tem um bom recurso Editor InContext ...
jamuhl
12

A Mozilla lançou recentemente o incrível L20n ou localização 2.0. Em suas próprias palavras, L20n é

uma linguagem de script de código-fonte aberto, específica da localização, usada para processar gênero, plural, conjugação e a maioria dos outros elementos peculiares da linguagem natural.

Sua implementação js está no repositório github L20n.

bosques de cinzas
fonte
Eu iniciei um projeto que precisa de localização e decidimos usar o L20n também;). Portanto, criei uma primeira versão de um plug-in L20n para o RequireJS ( github.com/fernandogmar/L20n-RequireJS ), caso você use o RequireJS, espero que seja útil para você também. Qualquer sugestão será bem-vinda.
Fernando Gm
0

Alguns deles são nativos, o restante está disponível através de bibliotecas.

Por exemplo, Datejs é uma boa biblioteca de datas internacional.

Quanto ao resto, trata-se de tradução de idiomas e o JavaScript é nativamente compatível com Unicode (assim como todos os principais navegadores).

Luca Matteis
fonte
0

Você também pode tentar outra biblioteca - https://github.com/wikimedia/jquery.i18n .

Além da substituição de parâmetros e de várias formas plurais, ele suporta o gênero, um recurso bastante exclusivo das regras gramaticais personalizadas necessárias para alguns idiomas.

Amir E. Aharoni
fonte