1

Pitch: [PACKAGE]: better-intl · Internacionalização tem que ser fácil, principalmente com Next.js

Internacionalização não deveria ser uma camada separada da aplicação.

TL;DR

Eu sei que ler PITCH é chatão para um car*lho, mas dá uma chance para essa publicação, e me ajuda a simplificar coisas que são naturalmente dificeis.

better-intl muda a forma de pensar i18n no Next.js.

Em vez de organizar traduções por idioma, você organiza por feature.

Tudo é gerado em build-time ou in-development-time, com tipagem completa e zero runtime de i18n.

Ainda é um projeto em evolução, nasceu como um "PoC" validado em produção.

O README do projeto vende melhor a ideia, e talvez responda algumas dúvidas.

Links:
https://github.com/luannzin/better-intl
https://www.npmjs.com/package/better-intl

Problema

Hoje, a maioria das soluções de internacionalização seguem o mesmo padrão:

  • arquivos separados por idioma
  • strings espalhadas pelo projeto
  • keys abstratas
  • runtime responsável por resolver tudo

Na prática, isso cria uma camada paralela ao código.

Você não pensa em feature.
Você pensa em “onde está essa tradução?”

Mudança de mentalidade

O better-intl tenta inverter isso completamente:

o sistema de arquivos do projeto passa a ser o sistema de internacionalização.

Como funciona na prática

Em vez disso:

/locales/en.json
/locales/pt.json

Você escreve assim:

// src/components/header/t.ts
export default {
  greeting: {
    en: "Hello {name}",
    pt: "Olá {name}",
  },
}

E consome assim:

t.components.header.greeting({ name: "Ada" })

O que isso muda?

tradução deixa de ser “lookup por key”, vira parte do código da feature, tudo é tipado, não existe runtime de i18n, não existe provider ou hook e não existe string key.

Ideia central

Eliminar hooks, contexts, providers, falta de tipagem e melhorar a DX.

Por que isso existe

A maioria das libs resolve internacionalização como um sistema paralelo.

O better-intl tenta tratar i18n como parte do próprio código.

Sem camada extra.

Sem abstração escondida em runtime.

Situação

Ainda não é a versão “final”.

É uma exploração prática de um modelo diferente de internacionalização no Next.js.


Se você já sofreu com tradução espalhada, keys perdidas, setup de provider ou boilerplate de i18n

essa abordagem tenta cortar tudo isso de uma vez.

Carregando publicação patrocinada...