Astro
Le paquet translate-projects-astro traduit les fichiers JSON i18n de ton site Astro. Tu écris les textes dans une langue et tu obtiens les autres dans la structure de dossiers attendue par i18next.
Prérequis
- Node.js 18 ou supérieur.
- Un projet et un token API de Translate Projects. Consulte Premiers pas.
1. Installe le paquet
npm i -D translate-projects-astro
2. Écris tes textes
Place les textes de la langue de base dans public/locales/<langue de base>/. Tu peux avoir plusieurs fichiers .json, y compris dans des sous-dossiers, avec des clés imbriquées. Le paquet ne lit et n'écrit que du JSON, il ne dépend donc pas de la version d'Astro :
{
"title": "Bienvenido",
"menu": { "home": "Inicio" }
}
3. Configure la traduction
Crée translate.mjs. Si tu ne passes pas apiKey, la variable d'environnement TRANSLATE_PROJECTS_API_KEY est utilisée :
import { translateProject } from 'translate-projects-astro';
await translateProject({
sourceLang: 'es', // Langue de base : la langue par défaut du projet
targetLangs: ['en', 'pt-BR', 'fr'], // Langues à générer
});
| Option | Par défaut | Description |
|---|---|---|
sourceLang | — | Langue des fichiers source. |
targetLangs | — | Langues à générer ; la langue de base est ignorée. |
apiKey | process.env.TRANSLATE_PROJECTS_API_KEY | Token API du projet. |
outputDir | ./public/locales | Dossier avec un sous-dossier par langue. |
Ajoute le script dans package.json :
{
"scripts": {
"translate": "node translate.mjs"
}
}
4. Traduis
export TRANSLATE_PROJECTS_API_KEY=tu_token
npm run translate
Fichiers générés
public/locales/
├── es/translation.json ← source, jamais modifié
├── en/translation.json
├── pt-BR/translation.json
└── fr/translation.json
Chaque fichier conserve la structure de l'original : objets imbriqués, tableaux et clés avec des points comme "v1.0". Jusqu'à 3 langues sont traduites en parallèle.
5. Utilise les traductions dans Astro
Tu peux lire les fichiers avec i18next ou directement avec 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 et forçage
Une seconde exécution sans changement fait une seule requête et ne traduit rien. Ce paquet n'a pas de --force : pour tout retraduire, supprime ~/.config/translate-projects-core/cache.json puis relance. Plus de détails dans Cache et erreurs.
Erreurs courantes
translateProject renvoie true si tout s'est bien passé. En cas d'échec, il affiche l'erreur, renvoie false et met le code de sortie à 1, sans arrêter ton processus.
- Token invalide, erreurs 4xx/5xx ou API indisponible: l'exécution échoue avec le message de l'API. Les fichiers existants ne sont jamais écrasés avec des données vides ou partielles ; les langues qui ont fonctionné sont écrites.
- Clé d'IA manquante (
MISSING_API_KEY): le projet n'a pas d'IA configurée. Les textes non traduits conservent le texte source, un avertissement est affiché (le code de sortie reste 0) et ils sont à nouveau demandés lors de la prochaine exécution. Source folder not found: vérifiesourceLangetoutputDir, et exécute la commande depuis la racine du site.Invalid JSON file: un fichier source n'est pas du JSON valide ; corrige-le. Rien n'est écrit pour ce fichier.
🚀 Automatisez vos traductions gratuitement
Translate Projects est gratuit. Vous créez votre projet, connectez la clé de votre fournisseur d'IA et ne lui payez que ce que vous dépensez.
- Sans forfaits ni carte de crédit: Toutes les fonctionnalités sont disponibles dès le premier jour.
- Utilisez votre propre IA: Claude, OpenAI, DeepSeek ou Gemini. Votre clé est stockée chiffrée.
- Réseau de traductions partagé: Si un texte a déjà été traduit, vous le recevez instantanément sans dépenser votre clé.
- Panneau d'administration: Vérifiez et modifiez toutes vos traductions depuis un seul endroit.
Nous sommes là pour vous aider
Si vous avez des questions, besoin d'aide ou souhaitez contribuer, n'hésitez pas à me contacter. Je suis à votre disposition pour vous soutenir dans tout ce dont vous avez besoin.
- Site web: neiderruiz.com
- GitHub: @neiderruiz
- Twitter: @neiderruiz
- YouTube: Neider Ruiz
Soutenez le projet
Si ce projet vous a été utile, je vous invite à m'offrir un café. Votre soutien m'aide à continuer de m'améliorer et à créer du contenu de valeur. Merci d'être là ! ☕