Traduisez les fichiers JSON de localisation sans toucher à vos clés.
Les clés restent des clés. L'imbrication reste intacte. Seules les valeurs de chaîne sont traduites — et uniquement les valeurs de chaîne. Tous les autres types de propriétés sont renvoyés exactement tels qu'ils ont été envoyés.
Les outils de traduction standard ne comprennent pas le JSON.
Les API de traduction génériques voient votre JSON comme un mur de texte. Elles traduisent les noms de clés en même temps que les valeurs. Elles aplatisent les objets imbriqués. Elles concatènent des chaînes qu'elles ne devraient pas. Ce qui revient est un JSON structurellement cassé qui nécessite une correction manuelle avant de pouvoir être utilisé. Si vous maintenez des fichiers de localisation pour une application en production, vous savez que les soumettre à une API de traduction standard crée plus de travail qu'elle n'en économise.
Le problème va plus loin que les noms de clés. Les API de traduction standard déforment aussi les variables d'interpolation. Une chaîne comme "Hello {name}, you have {count} messages" revient avec les noms de variables traduits — "Hola {nombre}, tienes {cuenta} mensajes" — ce qui casse tous les environnements d'exécution qui attendaient le nom de variable original. Des heures de débogage s'ensuivent.
Pour les équipes qui maintiennent des fichiers de localisation dans plusieurs langues pour une application en production, ce n'est pas une préoccupation théorique. Cela s'est déjà produit. La question est de savoir combien de temps prend le processus de réparation manuelle à chaque fois.
PolyLingo parcourt votre JSON avant de traduire.
PolyLingo comprend la structure JSON. Il parcourt récursivement votre objet, identifie les valeurs de chaîne contenant du texte traduisible, et envoie uniquement ces valeurs au modèle de traduction. Les noms de clés ne sont jamais modifiés. Les nombres, booléens, valeurs nulles et types non chaînes sont transmis sans modification. Le résultat est un JSON valide avec une structure identique — juste avec des valeurs de chaîne traduites.
Les variables d'interpolation — {name}, {{count}}, %s, et motifs similaires — sont identifiées et préservées tout au long du processus de traduction. Elles sont remplacées par des espaces réservés avant la traduction, puis réintégrées dans leur forme originale dans la sortie. Le modèle de traduction ne les voit jamais comme du texte traduisible.
Les tableaux sont traités correctement : chaque élément chaîne est traduit, tandis que les indices numériques et la structure du tableau restent inchangés. Les tableaux mixtes contenant à la fois des chaînes et des non-chaînes (nombres, objets) sont parcourus correctement avec les types non-chaînes transmis sans modification.
{
"nav_home": "Home",
"nav_pricing": "Pricing",
"hero_title": "Grow your audience globally",
"hero_cta": "Get started for free",
"footer_rights": "All rights reserved."
}{
"nav_home": "Accueil",
"nav_pricing": "Tarifs",
"hero_title": "Développez votre audience mondiale",
"hero_cta": "Commencer gratuitement",
"footer_rights": "Tous droits réservés."
}{
"nav": {
"home": "Home",
"pricing": "Pricing",
"blog": "Blog"
},
"hero": {
"title": "Grow your audience globally",
"subtitle": "Translate in seconds.",
"cta": "Get started for free"
},
"errors": {
"notFound": "Page not found",
"serverError": "Something went wrong"
}
}{
"nav": {
"home": "Inicio",
"pricing": "Precios",
"blog": "Blog"
},
"hero": {
"title": "Expande tu audiencia globalmente",
"subtitle": "Traduce en segundos.",
"cta": "Comienza gratis"
},
"errors": {
"notFound": "Página no encontrada",
"serverError": "Algo salió mal"
}
}curl -X POST https://api.usepolylingo.com/v1/translate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "{\"nav_home\": \"Home\", \"hero_title\": \"Get started\"}",
"format": "json",
"targets": ["es", "fr", "de", "ja", "zh"],
"model": "standard"
}'
# Response:
# {
# "translations": {
# "es": "{\"nav_home\": \"Inicio\", \"hero_title\": \"Empezar\"}",
# "fr": "{\"nav_home\": \"Accueil\", \"hero_title\": \"Commencer\"}",
# ...
# }
# }Ce que PolyLingo garantit pour chaque traduction JSON
- ✓Noms de clés jamais modifiés
- ✓Objets imbriqués et tableaux traités récursivement
- ✓Nombres, booléens, valeurs nulles transmis sans modification
- ✓Toutes les 36 langues en une seule requête
- ✓Détecté automatiquement comme JSON — aucun indicateur de format requis
- ✓Fonctionne avec des fichiers de localisation plats et profondément imbriqués
- ✓Variables d'interpolation ({name}, {{count}}, %s) préservées exactement
- ✓Sortie JSON valide — analysable sans modification
Trois étapes pour des fichiers de localisation traduits
Collez votre JSON ou appelez l'API
Utilisez le traducteur sans code pour des traductions ponctuelles : collez votre JSON, choisissez vos langues, téléchargez les fichiers traduits. Pour l'automatisation, appelez POST /v1/translate avec votre contenu JSON et les codes des langues cibles.
Recevez toutes les langues en une seule réponse
L'API renvoie un objet JSON avec une entrée par langue cible, chacune contenant le fichier de localisation entièrement traduit avec une structure identique. Pas d'appels par langue. Pas de boucles. Une requête pour toutes les sorties.
Déposez les sorties dans votre répertoire messages
Écrivez chaque fichier traduit dans messages/es.json, messages/fr.json, messages/de.json — ou là où votre bibliothèque i18n les attend. La structure est identique à votre fichier source, donc aucun traitement supplémentaire n'est nécessaire.
Où la traduction JSON est la plus importante
i18n d'applications avec next-intl ou i18next
Traduisez directement vos fichiers messages/*.json ou locales/*.json. Les clés restent intactes, l'imbrication est préservée, et les variables d'interpolation sont conservées sans modification. Déposez les fichiers dans votre répertoire messages et déployez.
Exports de contenu CMS
Les plateformes CMS sans tête exportent souvent du contenu structuré en JSON. PolyLingo traduit les valeurs de chaîne tout en préservant les noms de champs, les types de contenu imbriqués, et les valeurs non chaînes comme les dates, booléens et identifiants.
Réponses API et fichiers de configuration
Toute structure JSON avec des valeurs de chaîne traduisibles — descriptions de produits, modèles de notification, textes intégrés servis via API — peut être traduite sans modifier la structure dont votre application dépend.
Questions fréquentes sur la traduction JSON
Les variables d'interpolation comme {name} ou {{count}} sont-elles préservées ?
Oui. PolyLingo identifie les motifs d'interpolation courants incluant {variable}, {{variable}}, %(variable)s, et %s avant la traduction. Ceux-ci sont remplacés par des espaces réservés stables, le texte environnant est traduit, et les noms de variables originaux sont réintégrés dans la sortie. Le modèle de traduction ne voit jamais les noms de variables comme du contenu traduisible.
Que deviennent les valeurs non chaînes — nombres, booléens, null ?
Les valeurs non chaînes sont transmises complètement sans modification. PolyLingo ne traduit que les valeurs de chaîne contenant du texte en langue naturelle. Les nombres, booléens, valeurs nulles, et tableaux de non-chaînes sont préservés exactement tels qu'ils apparaissent dans la source.
PolyLingo peut-il gérer des structures JSON profondément imbriquées ?
Oui. PolyLingo parcourt récursivement les objets de n'importe quelle profondeur d'imbrication. La traduction s'applique à toutes les valeurs de chaîne dans toute la structure, peu importe leur profondeur.
Que se passe-t-il si certaines clés contiennent du contenu non traduisible comme des slugs ou des codes ?
PolyLingo traduit toutes les valeurs de chaîne par défaut. Si vous avez des champs chaîne qui ne doivent pas être traduits — slugs, codes de langue, identifiants techniques — la méthode recommandée est soit de les exclure du JSON envoyé, soit d'utiliser le paramètre de format explicite et de spécifier les champs à ignorer (bientôt disponible). Pour la plupart des fichiers de localisation, toutes les valeurs de chaîne sont destinées à être traduites.
Fonctionne-t-il avec JSON5 ou JSONC (JSON avec commentaires) ?
Actuellement, PolyLingo traite le JSON standard. JSON5 et JSONC (avec commentaires) doivent être prétraités pour supprimer les commentaires et convertir en JSON standard avant l'envoi. C'est une étape courante dans les pipelines de construction et ajoute un surcoût minimal.
Combien de langues puis-je cibler en une seule requête ?
Jusqu'à 36 langues prises en charge en une seule requête. La réponse contient un objet JSON traduit par code langue. Les limites de débit varient selon le plan — le niveau gratuit permet 10 requêtes par minute, tandis que les plans Growth et Scale permettent 200 à 600 requêtes par minute.
Guides associés
Ajouter le multilingue à Next.js
Comment PolyLingo s'intègre dans un workflow next-intl ou next-i18next.
Traduire Markdown sans casser la mise en forme
Pour le contenu qui vit dans des fichiers .md plutôt que JSON.
Multilingue pour CMS sans tête
Traduire le contenu Sanity, Contentful et Webflow au niveau CMS.
Traduisez vos fichiers de localisation en quelques secondes.
Collez votre JSON, choisissez vos langues, récupérez des fichiers de localisation valides pour chaque langue cible.
Commencer la traduction gratuitementCollez votre JSON de localisation et voyez le résultat — gratuit, sans compte requis.