React
El paquete translate-projects-react traduce los archivos JSON de react-i18next de tu app a varios idiomas y conserva la estructura de claves. Opcionalmente extrae los textos de tu código con un escáner.
Requisitos
- Node.js 20 ou superior.
- Um app React (por exemplo, criado com Vite) com
i18nextereact-i18next. - Um projeto e um API token do Translate Projects. Veja Primeiros passos.
1. Instala los paquetes
npm i i18next react-i18next i18next-http-backend
npm i translate-projects-react
2. Configura i18next
Crie src/i18n.js. Os arquivos de cada idioma são carregados de public/locales/<lang>/translation.json:
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import HttpBackend from 'i18next-http-backend';
i18n
.use(HttpBackend)
.use(initReactI18next)
.init({
lng: 'es',
fallbackLng: 'es',
ns: ['translation'],
defaultNS: 'translation',
interpolation: { escapeValue: false },
backend: { loadPath: '/locales/{{lng}}/{{ns}}.json' },
});
export default i18n;
Importe-o uma vez em src/main.jsx:
import './i18n';
3. Escreva seus textos
Coloque os textos do idioma base em public/locales/<idioma base>/translation.json (chaves aninhadas são suportadas):
{
"home": {
"title": "Bienvenido",
"subtitle": "Traduce tu app en minutos"
}
}
E use-os nos seus componentes:
import { useTranslation, Trans } from 'react-i18next';
export default function App() {
const { t } = useTranslation();
return (
<>
<h1>{t('home.title')}</h1>
<Trans>Hola, este texto también se traduce</Trans>
</>
);
}
Com o scanner ativado (scanner: true), os textos de t('...') e <Trans> do seu código são adicionados automaticamente ao translation.json. Textos muito curtos, rotas, URLs e templates com variáveis são ignorados.
4. Configure a tradução
Crie translate.mjs na raiz do projeto. Se você não passar apiKey, será usada a variável de ambiente TRANSLATE_PROJECTS_API_KEY. Se preferir CommonJS, chame-o de translate.cjs e use require.
import { translateProject } from 'translate-projects-react';
await translateProject({
sourceLang: 'es', // Idioma base: o idioma padrão do projeto
targetLangs: ['en', 'pt-BR', 'fr'], // Idiomas a gerar
outputDir: './public/locales', // Valor padrão
scanner: true, // Opcional: extrae los textos de ./src
});
| Opção | Padrão | Descrição |
|---|---|---|
sourceLang | — | Idioma base (obrigatório). |
targetLangs | — | Idiomas a generar. |
apiKey | process.env.TRANSLATE_PROJECTS_API_KEY | API token do projeto. |
outputDir | ./public/locales | Pasta com uma subpasta por idioma. |
scanner | false | true escanea ./src; { sourceDir: './app' } escanea otra carpeta. |
Guarda el token en un archivo .env (fuera de git) y añade el script en package.json. --env-file necesita Node 20.6 o superior; en CI define la variable como secreto:
TRANSLATE_PROJECTS_API_KEY=tu_token
{
"scripts": {
"translate": "node --env-file=.env translate.mjs"
}
}
5. Traduza
npm run translate

Arquivos que são gerados
public/locales/
├── es/translation.json ← tu idioma base (o el que genera el escáner)
├── en/translation.json ← gerado
├── pt-BR/translation.json
└── fr/translation.json
Cada archivo conserva la estructura anidada del original. Los idiomas se traducen en paralelo, hasta 3 a la vez.
Autocompletado de claves (opcional)
import { useTypedTranslation } from 'translate-projects-react/hooks';
import es from '../public/locales/es/translation.json';
export function Title() {
const { t } = useTypedTranslation<typeof es>();
return <h1>{t('home.title')}</h1>; // Las claves se autocompletan y se validan
}

Cache e forçar
Somente os arquivos e chaves que mudaram são enviados; uma segunda execução sem alterações não traduz nada. Este pacote não tem --force: para traduzir tudo novamente, apague ~/.config/translate-projects-core/cache.json e execute de novo. Mais detalhes em Cache e erros.
Erros comuns
translateProject devuelve true si todo salió bien. Si algo falla muestra el error real, devuelve false y deja el código de salida en 1, sin cerrar tu proceso.
- Token inválido (401): revisa
TRANSLATE_PROJECTS_API_KEY. Los archivos existentes no se tocan. - Falta a key de IA (
MISSING_API_KEY): configure o provedor, o modelo e a chave no projeto. Enquanto isso, os textos ficam no idioma base. - Tradução parcial: los textos que faltan se piden otra vez en la siguiente ejecución.
- JSON inválido: si un archivo del idioma base no es JSON válido, no se escribe nada para él.
🚀 Automatize suas traduções de graça
Translate Projects é gratuito. Você cria seu projeto, conecta a chave do seu provedor de IA e paga apenas a ele pelo que gastar.
- Sem planos nem cartão de crédito: Todos os recursos estão disponíveis desde o primeiro dia.
- Use sua própria IA: Claude, OpenAI, DeepSeek ou Gemini. Sua chave é armazenada criptografada.
- Rede de traduções compartilhada: Se um texto já foi traduzido, você o recebe instantaneamente sem gastar sua chave.
- Painel de administração: Revise e edite todas as suas traduções em um único lugar.
Estamos aqui para ajudar você
Se você tiver alguma dúvida, precisar de ajuda ou quiser contribuir, não hesite em entrar em contato comigo. Estou à sua disposição para apoiá-lo no que precisar.
- Site: neiderruiz.com
- GitHub: @neiderruiz
- Twitter: @neiderruiz
- YouTube: Neider Ruiz
Apoie o Projeto
Se este projeto foi útil para você, convido você a me pagar um café. Seu apoio me ajuda a continuar melhorando e criando conteúdo de valor. Obrigado por estar aqui! ☕