Internacionalização (i18n) em JavaScript (Node.js): biblioteca i18next

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Internacionalização (i18n) em JavaScript (Node.js): biblioteca i18next

\n\n

Internacionalização (abreviada como i18n — do inglês "internationalization", onde 18 é o número de letras entre o primeiro "i" e o último "n") — é o processo de projetar e desenvolver software, permitindo adaptá-lo a diferentes idiomas e particularidades regionais sem alterar o código-fonte. No desenvolvimento web moderno com Node.js, criar aplicações multilíngues é uma necessidade para alcançar o mercado global.

\n\n

Uma das bibliotecas mais populares e poderosas para implementar i18n no ecossistema JavaScript (incluindo Node.js) é a i18next. Ela oferece uma arquitetura flexível, suporte a múltiplos formatos de arquivos de tradução, interpolação, pluralização e traduções contextuais. Neste artigo, abordaremos detalhadamente a instalação, configuração e uso do i18next no lado do servidor.

\n\n

Instalação e configuração

\n\n

Para começar a usar o i18next em um projeto Node.js, instale a biblioteca via npm:

\n\n
npm install i18next
\n\n

Também é recomendado instalar o pacote i18next-fs-backend para carregar arquivos de tradução do sistema de arquivos:

\n\n
npm install i18next-fs-backend
\n\n

Após a instalação, crie um arquivo de inicialização, por exemplo i18n.js:

\n\n
const i18next = require('i18next');\nconst Backend = require('i18next-fs-backend');\n\ni18next.use(Backend).init({\n  lng: 'ru', // idioma padrão\n  fallbackLng: 'en', // idioma de fallback\n  backend: {\n    loadPath: './locales/{{lng}}/{{ns}}.json' // caminho para os arquivos de tradução\n  },\n  interpolation: {\n    escapeValue: false // não escapar HTML (para Node.js)\n  }\n});\n\nmodule.exports = i18next;
\n\n

Estrutura dos arquivos de tradução

\n\n

Crie uma pasta locales na raiz do projeto. Dentro dela, para cada idioma, crie uma subpasta (por exemplo, en, ru, de). Em cada subpasta, coloque arquivos JSON com as traduções. Geralmente, usa-se um arquivo translation.json por idioma, mas é possível dividir em namespaces para modularidade.

\n\n

Exemplo do arquivo locales/ru/translation.json:

\n\n
{\n  "welcome": "Bem-vindo ao nosso site!",\n  "greeting": "Olá, {{name}}!",\n  "items": "{{count}} elemento",\n  "items_plural": "{{count}} elementos",\n  "menu": {\n    "home": "Início",\n    "about": "Sobre",\n    "contact": "Contato"\n  }\n}
\n\n

Exemplo do arquivo locales/en/translation.json:

\n\n
{\n  "welcome": "Welcome to our website!",\n  "greeting": "Hello, {{name}}!",\n  "items": "{{count}} item",\n  "items_plural": "{{count}} items",\n  "menu": {\n    "home": "Home",\n    "about": "About",\n    "contact": "Contact"\n  }\n}
\n\n

Principais funcionalidades do i18next

\n\n

Tradução simples

\n\n

Para obter uma tradução, use a função t() (de "translate"):

\n\n
const i18next = require('./i18n');\n\n// Inicialização assíncrona (em um projeto real, aguarde a prontidão)\ni18next.t('welcome'); // "Bem-vindo ao nosso site!" (se lng: 'ru')
\n\n

Interpolação de variáveis

\n\n

Insira valores dinâmicos nas strings usando chaves duplas:

\n\n
i18next.t('greeting', { name: 'Alexei' });\n// Resultado: "Olá, Alexei!"
\n\n

Pluralização

\n\n

A biblioteca seleciona automaticamente a forma plural correta com base nas regras do idioma. Para isso, adicione chaves com o sufixo _plural:

\n\n
i18next.t('items', { count: 1 }); // "1 elemento"\ni18next.t('items', { count: 5 }); // "5 elementos"
\n\n

Para o inglês, a regra é mais simples (um item — item, muitos — items). Para o russo, o i18next usa regras de pluralização internas que consideram números 1, 2-4, 5-20, etc.

\n\n

Chaves aninhadas e namespaces

Recommendations