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
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:
{
"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:
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ção | Padrão | Descrição |
|---|---|---|
sourceLang | — | Idioma dos arquivos de origem. |
targetLangs | — | Idiomas a gerar; o idioma base é omitido. |
apiKey | process.env.TRANSLATE_PROJECTS_API_KEY | API token do projeto. |
outputDir | ./public/locales | Pasta com uma subpasta por idioma. |
Adicione o script em package.json:
{
"scripts": {
"translate": "node translate.mjs"
}
}
4. Traduza
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:
---
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: verifiquesourceLangeoutputDire 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.
🚀 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! ☕