Livrez votre application dans toutes les langues.
Chaque chaîne codée en dur dans votre application web, mobile ou de bureau, trouvée et traduite avec le contexte de votre application. Une pull request à examiner et fusionner, depuis une seule commande CLI ou à chaque push.
import { useTranslation } from 'react-i18next';
export function Inbox({ user, unread }) {
const { t } = useTranslation();
return (
<section>
<h1>{t('inbox.welcome_heading', { name: user.name })}</h1>
<p>{t('inbox.unread_summary', { unread })}</p>
<input placeholder={t('inbox.search_placeholder')} />
<button>{unread ? t('inbox.mark_all_read') : t('inbox.refresh')}</button>
</section>
);
}19 frameworks, de React et Flutter à Rails, Android et iOS, et les outils qui les entourent
Pourquoi localize.dev ?
Cinq étapes manuelles, réalisées en une seule exécution
Le travail que vous répétez à chaque version, effectué en une seule passe et revu comme tout autre changement de code.
- Trouver
Habituellement :Rechercher dans la base de code des chaînes, fichier par fichier
Maintenant :Chaque chaîne trouvée dans l'AST, y compris attributs, ternaires et littéraux de modèle
- Nom
Habituellement :Invente une clé pour chacun et espérez qu'elle reste cohérente
Maintenant :Clés sémantiques du contexte du composant ; copie identique réutilise sa clé
- Traduire
Habituellement :Exporter une feuille de calcul, attendre les traducteurs, tout coller à nouveau
Maintenant :Chaque langue cible traduite en une seule étape
- Vérifier
Habituellement :Découvrez le {placeholder} cassé en production
Maintenant :Les espaces réservés vérifiés avant toute écriture
- Livrer
Habituellement :Tout refaire lors de la prochaine version
Maintenant :Une pull request à chaque push, pour qu'aucun nouveau texte ne soit publié sans traduction
5 transferts la façon habituelle
1 pull request avec localize.dev
Comment ça marche
Du texte codé en dur à une pull request localisée
Quatre étapes déterministes, avec le modèle uniquement là où le jugement est utile : nommer les clés et traduire. Faites défiler pour suivre un composant à travers les quatre.
01 / 04
Analyser l'AST
Chaque composant et page est analysé : modèles JSX, Vue et Svelte, ou HTML. Le texte, les attributs visibles par l'utilisateur et les chaînes que votre code rend sont extraits. Les URL, les noms de classe et les exemples de code sont ignorés.
5
chaînes trouvées
2
ignoré par la règle
1
composant
Traduction contextuelle
Traduit pour l'endroit où se trouve chaque chaîne
La traduction mot à mot échoue dès qu'un mot a deux sens. localize.dev traduit chaque chaîne avec ce que votre projet dit à son sujet et ce que la langue cible en attend.
Il lit votre projet
Une chaîne est traduite avec son emplacement : le fichier, le composant et l'élément dans lequel elle se trouve, de sorte qu'une étiquette de bouton, un titre et un espace réservé obtiennent chacun le bon sens. Votre glossaire et vos notes de style maintiennent les termes du produit et le ton identiques dans chaque fichier.
- Chemin du fichier
- Composant
- Élément et attribut
- Termes du glossaire
- Noms à ne pas traduire
- Ton et forme de politesse
"Post" → fr
Il écrit pour chaque langue
Les pluriels obtiennent chaque forme dont la locale a besoin, même avec deux comptes dans une seule phrase, le 1er et le 2e suivent les ordinaux propres à chaque langue, les liens et le texte en gras se déplacent là où la grammaire les place, et la forme d'adresse correspond à la voix que vous avez choisie pour chaque marché.
- Règles de pluriel CLDR
- Nombres ordinaux
- Ordre des mots
- Tutoiement ou vouvoiement
- Formulations courtes de l'interface
"{count} fichiers" → fr
Définissez les termes du glossaire, les noms à conserver et les notes de style par projet dans le tableau de bord. Chaque exécution sur ce dépôt les utilise.
Localisation continue
Chaque push reste localisé
Ajoutez l'Action GitHub et aucun nouveau texte n'est publié sans traduction. Chaque exécution met à jour la même branche et la même pull request, vous évitant ainsi d'avoir une pile de PRs ou des conflits entre les exécutions.
- Effectuez un commit avec les composants et chaque fichier de langue.
- Configurez la bibliothèque i18n de votre framework si elle n'existe pas encore.
- Le corps R liste chaque remplacement et chaque chaîne ignorée.
- traductions revues depuis Crowdin, Phrase, Lokalise ou Transifex
- très souvent se termine sur l’onglet Revue du projet
- vérification qui rejette les pull requests ajoutant du contenu non traduit
Localisez : 12 nouvelles chaînes dans 4 langues
localize-dev/mainmain
name: Localize
on:
push:
branches: [main]
pull_request:
types: [opened, synchronize]
workflow_dispatch: # "Run workflow" button in the Actions tab
permissions:
contents: write # push the localize-dev/<branch> branch
pull-requests: write # open or update the localization PR
# One run per branch at a time; a newer push supersedes the running one.
concurrency:
group: localize-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
jobs:
localize:
runs-on: ubuntu-latest
timeout-minutes: 60
# Skip localize.dev's own branches, and fork PRs (their token is read-only).
if: >-
!startsWith(github.head_ref || github.ref_name, 'localize-dev/') &&
(github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)
steps:
- name: Checkout
uses: actions/checkout@v5
with:
# On PRs, scan the branch itself rather than the merge commit.
ref: ${{ github.head_ref || github.ref_name }}
- name: Localize
uses: ufortstephen/autolocalize-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
api_key: ${{ secrets.LOCALIZEDEV_API_KEY }}
target_locales: 'es,fr,de,ja'
# src_dir: 'src' # default: your framework's (src, app/views, resources/views, lib…)
# locales_path: 'public/locales/{locale}/common.json' # default: your framework's
# working_directory: 'apps/web' # monorepo: localize just this appRevue humaine
Les locuteurs natifs approuvent, et leurs corrections tiennent
Les traductions automatiques sont une première ébauche. Chaque langue a son propre réviseur, et chaque correction qu'il fait est mémorisée pour la prochaine exécution.
- Le modèle signale les traductions dont il n'est pas sûr, avec sa raison, afin que les réviseurs commencent là.
- Un réviseur par langue, notifié une fois par exécution.
- Approuver ou modifier, les formes pluriels incluses, avec un lien vers le fichier source.
- Les modifications sont enregistrées dans la demande de tirage ouverte.
- Notes pour le prochain réviseur, et termes du glossaire suggérés à partir de corrections répétées.
12 nouvelles traductions en espagnol à revoir
Envoyé au réviseur espagnol du projet lorsque l'exécution s'est terminée
Passer commande
checkout.place_order
Passer la commande
Approuvé{{count}} articles dans votre panier
checkout.items
{{count}} articles dans votre panier
ApprouverPaiement
checkout.heading
Paiement
Modifié
Les réviseurs continuent de changer checkout à pago.
Avant de lancer
Attrapez les problèmes avant vos utilisateurs.
Essayez-le sur votre propre code, trouvez des mises en page qui se cassent avec un texte plus long ou de droite à gauche, arrêtez les copies non traduites et obsolètes au niveau de la pull request, signalez aux réviseurs les traductions dont ils ont besoin et intégrez vos documents.
Voyez-le dans votre code dès maintenant
Connectez un dépôt et obtenez une demande de pull preview : jusqu’à 200 chaînes de votre branche par défaut, localisées de notre côté. Pas de workflow, de clé ou de vérification.
Aperçu localize.dev : 184 chaînes en es
localize-dev/previewmain
Un contrôle qui le garde ainsi
Le contrôle localize-dev échoue sur une demande de pull qui ajoute du contenu codé en dur, laisse une langue de côté ou modifie l'anglais dont les traductions n'ont pas suivi, et pointe la ligne. S'exécute en CI sans clé API.
Contrôle i18n échoué
src/Cart.tsx:7 "Free shipping today" n'est pas traduit
locales/de.json 3 messages n'ont pas de traduction en allemand
locales/en.json cart.pay a changé depuis sa traduction
Trouvez les mises en page qui cassent, avant de traduire
localize-dev run --pseudo génère un langage pseudo-faux étiré et accentué. Les boutons tronqués apparaissent, ainsi que le texte toujours codé en dur. Gratuit, sans modèle.
Passez en revue d'abord les doutes
Le modèle signale les traductions dont il n'est pas sûr, avec sa raison. L'onglet Revue s'ouvre pour celles-ci; approuvez le reste en un clic.
Réserver → Réserveres
Nécessite un coup d'œil: une réservation ou un roman ? Réservation supposée à partir du bouton.
Mises en page de droite à gauche, vérifiées avant la mise en production
Avec l'arabe ou l'hébreu dans vos langues, les listes de contrôle ajustent les marges et les alignements à un côté, et localize-dev rtl --fix remplace les versions sûres par des versions logiques qui s’inversent automatiquement.
- ml-4 texte-align-left arrondi-gauche
+ ms-4 texte-align-start arrondi-droite
Vos documents, dans chaque langue aussi
localize-dev traduit le contenu Markdown et MDX, les documents, les articles de blog et les pages légales en une copie par langue. Le code, les liens et les composants restent exactement tels qu’écrits ; seuls les documents modifiés sont retravaillés.
docs/intro.mdintro.es.mdintro.fr.mdintro.de.mdFonctionne là où vous construisez
Un moteur pour le web, le mobile et le bureau
Sites web et applications rendues côté serveur, applications iOS et Android, applications de bureau et les bibliothèques de composants qu'elles partagent. Chacune obtient la bibliothèque i18n attendue par son framework.
01 / 04
Applications web
React · Next.js · Angular · Vue · SvelteKit · Astro
Free shipping on orders over $50





Intégrations
Votre framework, vos outils
Chaque framework dispose de sa propre bibliothèque i18n, configurée pour vous. Les traductions atteignent la demande de fusion, votre plateforme de traduction ou les fichiers de localisation que vous avez déjà.
Frameworks
Plateformes de traduction et CI
Déjà localisé ? localize-dev translate remplit les fichiers de localisation de n'importe quelle stack. Fichiers de localisation existants
Depuis votre terminal
Voir chaque changement avant qu'il ne se produise
Exécutez-le d'abord localement. --dry-run affiche chaque remplacement et chaque chaîne ignorée avec la raison, pour que rien ne vous surprenne lors de la revue.
localize-dev scanlocalize-dev run --dry-runlocalize-dev run --pseudolocalize-dev checklocalize-dev prlocalize-dev translate$ npx localize-dev run -l es,fr,de
🔍 Analyse de src/ (langues cibles : es, fr, de)
src/checkout/Summary.tsx
L6 Résumé de la commande → {t('checkout.order_summary_heading')}
L12 "Code de réduction" → {t('checkout.discount_code_placeholder')}
L15 Passer la commande → {t('checkout.place_order_button')}
src/legacy/PromoBanner.tsx:9 ignoré "Livraison gratuite pour plus de 50 $": composant de classe
✅ 3 chaînes localisées dans 1 fichier(s) (3 nouvelles clés, 0 réutilisées). 5 fichiers écrits.
$
Comment fonctionne le moteur
Les règles effectuent la réécriture. Le modèle nomme uniquement les clés et traduit.
Diffs minimaux
Les modifications sont insérées aux offsets exacts de l'AST. La mise en forme et l'ordre des importations restent inchangés, afin que les relecteurs ne voient que les lignes modifiées.
Phrases complètes
Le texte, les expressions, les liens et le texte en gras se fusionnent en un seul message, afin que les traducteurs voient la phrase complète plutôt que des fragments.
Salut {name}, vous avez {count} éléments
Ignore ce qu'il ne peut pas changer en toute sécurité
Les chaînes que le moteur ne peut pas réécrire en toute sécurité, comme celles des composants de classe ou en dehors d'un Composable, sont laissées telles quelles et signalées avec la raison.
Idempotent
Exécutez-le à chaque push. Les chaînes enveloppées sont laissées intactes et la copie identique réutilise sa clé existante.
Rien à héberger
La traduction s'exécute sur le modèle localize.dev hébergé sur chaque plan. Vous n'avez pas besoin de GPU, d'invites ou de clés de fournisseur. Une clé API suffit.
Pas d'enfermement
La sortie est la bibliothèque i18n que votre framework utilise déjà, avec des fichiers de localisation simples dans votre repo. Arrêtez d'utiliser localize.dev demain et votre application continue de fonctionner, avec toutes les traductions.
- react-i18next
- vue-i18n
- ngx-translate
- svelte-i18n
- ember-intl
- Rails I18n
- gettext
- strings.xml
- Flutter ARB
Dates, nombres et argent aussi
toLocaleDateString('en-US'), les formateurs Intl et `$${{price}}` sont réécrits pour suivre la langue de l'application, donc 1 234,50 $ s'affiche comme 1.234,50 € pour un visiteur allemand.
Sécurité et confidentialité
Ce qui quitte votre machine
Seules les chaînes traduites sont envoyées à l'API. Vos fichiers sources restent sur votre machine ou dans le runner CI.
Chaînes, pas la source
Seules les chaînes extraites sont envoyées, avec leur chemin de fichier pour le contexte. Les fichiers entiers ne quittent jamais votre machine.
Local quand vous voulez
Les analyses et exécutions hors ligne se déroulent sur votre machine sans clé API ni appels réseau, et n'utilisent pas votre quota.
Clés API hachées
Se seul le hash de chaque clé est stocké. Les secrets sont affichés une fois, et la révocation prend effet immédiatement.
Tout ou rien
Si une exécution dépasse votre plan, elle s'arrête avant d'écrire, laissant votre code intact.
Tarification
Commence gratuitement. Passe à la version payante quand ton contenu augmente.
Free
$0pour toujours
Tout ce dont vous avez besoin pour localiser un projet secondaire ou l'essayer sur une véritable base de code.
- 1 000 chaînes / mois
- 3 langues cibles
- CLI and GitHub Action
- Le mode hors ligne et les analyses n'utilisent jamais votre quota
Pro
Le plus populaire$100/an
Facturé annuellement
Pour les produits disponibles sur plusieurs marchés.
- Chaînes illimitées
- 5 langues cibles
- Demandes de tirage à chaque push
- Tableau de bord d'utilisation et plusieurs clés d'API
Team
$200/an
Facturé annuellement
Inclut 3 membres · +50 $US/an par membre supplémentaire
Pour les équipes produit présentes sur de nombreux marchés.
- Chaînes illimitées
- Langues cibles illimitées
- 3 membres inclus, puis 50 $US/an chacun
- Espaces de travail illimités, partage du plan
- Projets, clés et utilisation partagés
- Support prioritaire
FAQ
Questions que les posent d'abord les équipes
Est-ce uniquement pour les applications web React ?+
Non. Il fonctionne avec React et Next.js, React Native et Expo, Flutter, Angular, Vue et Nuxt, Svelte et SvelteKit, Astro, Solid, Qwik, Lit, Ember, Electron et Tauri, sites HTML simples, modèles Rails, Django et Laravel, mises en page Android, Jetpack Compose et code View, et applications iOS et macOS en SwiftUI et UIKit. Il configure la bibliothèque i18n correspondante pour chacun : react-i18next, ngx-translate, vue-i18n ou @nuxtjs/i18n, svelte-i18n, ember-intl, gen-l10n de Flutter, Rails I18n, gettext de Django, ressources de chaînes Android, ou un petit script pour les pages statiques.
Nous avons déjà l'i18n configuré. Est-ce toujours utile ?+
Oui. localize-dev translate remplit les traductions manquantes dans les fichiers de locale que vous avez déjà, dans n'importe quelle pile : JSON (i18next, react-intl, vue-i18n, ngx-translate), Rails YAML, gettext .po, Flutter .arb, Android strings.xml, Apple String Catalogs et .strings, et messages d'extension de navigateur. Le code n'est pas touché, les traductions existantes ne sont pas modifiées, et en CI, il ouvre une pull request chaque fois que de nouvelles clés arrivent.
Mon code quitte-t-il ma machine ?+
Seules les chaînes en cours de traduction sont envoyées à l'API localize.dev, avec leur chemin de fichier et leur emplacement (le composant et l'élément tel qu'un bouton ou un titre) comme contexte. Les fichiers entiers ne sont jamais envoyés. La réécriture se fait localement (ou sur votre propre exécuteur CI), et les analyses et les exécutions hors ligne ne touchent jamais le réseau.
Les traductions automatiques sont-elles assez bonnes pour être mises en production ?+
Ils constituent une première ébauche solide avec des espaces réservés corrects et des clés cohérentes. Pour les textes réglementés ou critiques pour la marque, assignez un réviseur par langue : ils reçoivent un e-mail lorsqu'une exécution se termine, approuvent ou corrigent chaque traduction dans l'onglet Révision, et les corrections sont intégrées à la pull request ouverte et à chaque exécution ultérieure. Les corrections récurrentes deviennent des termes du glossaire en un clic. Le modèle signale également les traductions dont il n'est pas sûr, avec sa raison, afin que les réviseurs commencent par celles-ci.
Et si nous arrêtions d'utiliser localize.dev ?+
Votre application continue de fonctionner. La sortie est la bibliothèque i18n que votre framework utilise déjà (react-i18next, vue-i18n, ngx-translate, Rails I18n, gettext, ressources de chaînes Android, catalogues de chaînes Apple…) avec des fichiers de langue simples dans votre dépôt. Il n'y a pas de runtime, de SDK ou de proxy localize.dev à supprimer.
Collez une composante ou une page. Voyez-la en deux langues.
Pas besoin de compte. Le playground utilise le même moteur que la CLI.

