Pular para o conteúdo principal

Astro

O pacote translate-projects-astro traduz os arquivos JSON de i18n do seu site Astro. Você escreve os textos em um idioma e obtém os demais na estrutura de pastas que o i18next espera.

Requisitos​

  • Node.js 18 ou superior.
  • Um projeto e um API token do Translate Projects. Veja Primeiros passos.

1. Instale o pacote​

Terminal
npm i -D translate-projects-astro

2. Escreva seus textos​

Coloque os textos do idioma base em public/locales/<idioma base>/. Você pode ter vários arquivos .json, também em subpastas, com chaves aninhadas. O pacote apenas lê e escreve JSON, então não depende da versão do Astro:

public/locales/es/translation.json
{
"title": "Bienvenido",
"menu": { "home": "Inicio" }
}

3. Configure a tradução​

Crie translate.mjs. Se você não passar apiKey, será usada a variável de ambiente TRANSLATE_PROJECTS_API_KEY:

translate.mjs
import { translateProject } from 'translate-projects-astro';

await translateProject({
sourceLang: 'es', // Idioma base: o idioma padrão do projeto
targetLangs: ['en', 'pt-BR', 'fr'], // Idiomas a gerar
});
OpçãoPadrãoDescrição
sourceLang—Idioma dos arquivos de origem.
targetLangs—Idiomas a gerar; o idioma base é omitido.
apiKeyprocess.env.TRANSLATE_PROJECTS_API_KEYAPI token do projeto.
outputDir./public/localesPasta com uma subpasta por idioma.

Adicione o script em package.json:

package.json
{
"scripts": {
"translate": "node translate.mjs"
}
}

4. Traduza​

Terminal
export TRANSLATE_PROJECTS_API_KEY=tu_token
npm run translate

Arquivos que são gerados​

public/locales/
├── es/translation.json ← origem, nunca é modificado
├── en/translation.json
├── pt-BR/translation.json
└── fr/translation.json

Cada arquivo mantém a estrutura do original: objetos aninhados, arrays e chaves com pontos como "v1.0". São traduzidos até 3 idiomas em paralelo.

5. Use as traduções no Astro​

Você pode ler os arquivos com i18next ou diretamente com import.meta.glob:

src/pages/[lang]/index.astro
---
export function getStaticPaths() {
const files = import.meta.glob('/public/locales/*/translation.json');
return Object.keys(files).map((file) => ({
params: { lang: file.split('/')[3] },
}));
}

const files = import.meta.glob('/public/locales/*/translation.json', {
eager: true,
import: 'default',
});
const { lang } = Astro.params;
const t = files[`/public/locales/${lang}/translation.json`];
---

<h1>{t.title}</h1>

Cache e forçar​

Uma segunda execução sem alterações faz uma única requisição e 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 retorna true se tudo deu certo. Se falhar, mostra o erro, retorna false e define o código de saída como 1, sem encerrar o seu processo.

  • Token inválido, erros 4xx/5xx ou API fora do ar: a execução falha com a mensagem da API. Os arquivos existentes nunca são sobrescritos com dados vazios ou parciais; os idiomas que funcionaram são gravados.
  • Falta a key de IA (MISSING_API_KEY): o projeto não tem IA configurada. Os textos não traduzidos mantêm o texto de origem, é exibido um aviso (o código de saída continua sendo 0) e são solicitados novamente na próxima execução.
  • Source folder not found: verifique sourceLang e outputDir e execute o comando a partir da raiz do site.
  • Invalid JSON file: um arquivo de origem não é JSON válido; corrija-o. Nada é gravado para ele.
Grátis

🚀 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.

Criar conta grátis →

Suporte

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.

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! ☕

Buy me a coffee