Sua aplicação falará qualquer idioma do mundo
\n\nImagine: você criou um serviço incrível, publicou na internet, e usuários da Alemanha, Japão ou Brasil fecham o site em 10 segundos. Por quê? Porque eles não entendem nada do que está escrito nos botões. Na era da globalização, a internacionalização JavaScript não é um luxo, mas uma necessidade básica. Se você quer que seu produto conquiste o mundo (ou pelo menos alguns países vizinhos), não pode prescindir do i18n JavaScript.
\n\nNeste artigo, vamos explorar como transformar uma aplicação comum em um poliglota multilíngue. Você conhecerá quais bibliotecas i18n existem, como organizar corretamente os arquivos de tradução e escreveremos código real para internacionalização. Vamos lá!
\n\nO que é internacionalização e por que ela é necessária?
\n\nO termo técnico i18n (onde 18 é o número de letras entre o primeiro "i" e o último "n") significa a preparação arquitetônica da aplicação para trabalhar com diferentes idiomas e culturas. Não se trata apenas de traduzir palavras — é a adaptação de formatos de data, números, moedas, direções de texto (da esquerda para a direita ou da direita para a esquerda) e até esquemas de cores.
\n\nImagine a data "03/04/2025". Para um americano, é 3 de abril; para um europeu, 4 de março. E se sua aplicação mostrar o preço em dólares para um usuário no Japão? Catástrofe. A internacionalização de aplicações web resolve todos esses problemas a nível de código.
\n\nPor que começar agora?
\n- \n
- Crescimento de audiência — 75% dos usuários preferem comprar no idioma nativo \n
- Impulso SEO — mecanismos de busca classificam sites multilíngues mais alto nos resultados locais \n
- Usabilidade — redução da taxa de rejeição e aumento do tempo no site \n
Principais abordagens para i18n em JavaScript
\n\nExistem duas abordagens globais para localização JavaScript: solução própria e uso de bibliotecas prontas. Vamos analisar ambas, mas recomendo fortemente a segunda opção — menos bugs, mais funcionalidades.
\n\nInternacionalização própria: exemplo básico
\n\nSe sua aplicação é uma landing page simples de 10 linhas, você pode dispensar bibliotecas. Vamos criar um objeto com traduções:
\n\nconst translations = {\n pt: {\n greeting: "Olá, mundo!",\n button: "Clique em mim"\n },\n en: {\n greeting: "Hello, World!",\n button: "Click me"\n },\n de: {\n greeting: "Hallo, Welt!",\n button: "Klick mich"\n }\n};\n\nAgora a função para trocar o idioma:
\n\nfunction translate(lang) {\n document.querySelectorAll('[data-i18n]').forEach(el => {\n const key = el.dataset.i18n;\n if (translations[lang] && translations[lang][key]) {\n el.textContent = translations[lang][key];\n }\n });\n}\n\n// Uso em HTML:\n// <h1 data-i18n="greeting">Olá, mundo!</h1>\n// <button data-i18n="button">Clique em mim</button>\n\nIsso funciona, mas imagine que você tenha 500 linhas de texto, além de precisar lidar com pluralização (1 maçã, 2 maçãs, 5 maçãs) e interpolação (Olá, {username}). É aí que entram as bibliotecas de internacionalização.
\n\nTop bibliotecas i18n para JavaScript
\n\nO mercado de bibliotecas i18n é diversificado. Aqui estão três líderes que merecem sua atenção:
\n\n1. i18next — o rei entre as bibliotecas
\ni18next JavaScript é o padrão de facto. Funciona com React, Vue, Angular e JS puro. Suporta pluralização, interpolação, traduções aninhadas e carregamento de recursos sob demanda.
\n\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\ni18n.use(initReactI18next).init({\n resources: {\n en: {\n translation: {\n welcome: "Welcome b