Découvrez toutes les étapes pour internationaliser votre thème ou extension WordPress afin qu’il soit prêt à être traduit dans n’importe quelle langue.
Ce guide s’adresse aux développeurs rédigeant le code. Si vous possédez déjà un fichier POT ou PO et que vous avez simplement besoin de le traduire, vous pouvez le faire en 3 étapes simples avec PTC.
Qu’est-ce que l’internationalisation de WordPress ?
L’internationalisation (i18n) est le processus de préparation de votre code afin qu’il puisse être traduit. Il ne s’agit pas du processus de traduction lui-même. La localisation (l10n) est l’étape suivante, où les chaînes sont réellement traduites dans des langues spécifiques.
Pour les thèmes et extensions WordPress, l’i18n signifie :
- Encapsuler toutes les chaînes destinées à l’utilisateur dans des fonctions gettext afin que WordPress puisse les remplacer.
- Définir un domaine de texte (text domain) qui lie vos traductions à votre projet.
- Générer un fichier POT à partir duquel les traducteurs (ou PTC) peuvent travailler.
Une fois cela fait, vous disposez de tout le nécessaire pour produire des fichiers PO, MO et JSON traduits pour n’importe quelle langue.
Préparer votre thème ou extension WordPress pour la traduction
Avant de pouvoir traduire quoi que ce soit, vous devez configurer votre code correctement. Cela implique de définir un domaine de texte, d’encapsuler toutes les chaînes destinées à l’utilisateur dans des fonctions gettext et de générer un fichier POT.
Rien de tout cela n’est compliqué, mais les détails comptent. Un domaine de texte mal assorti ou une chaîne non encapsulée signifie que ce texte n’apparaîtra jamais dans votre version traduite.
Étape 1
Définir votre domaine de texte et le chemin du domaine
Chaque thème ou extension a besoin d’un domaine de texte. C’est un identifiant unique qui indique à WordPress quels fichiers de traduction appartiennent à votre projet, et il doit correspondre exactement au slug de votre extension ou thème.
Déclarez-le dans l’en-tête du fichier principal de votre extension :
/**
* Plugin Name: My Plugin
* Text Domain: my-plugin
* Domain Path: /languages
*/
Ou dans le style.css de votre thème :
/*
Theme Name: My Theme
Text Domain: my-theme
Domain Path: /languages
*/
Le chemin du domaine indique à WordPress où se trouvent vos fichiers de traduction par rapport à la racine de l’extension ou du thème. Le répertoire /languages est la norme.
Étape 2
Encapsuler vos chaînes PHP dans des fonctions Gettext
Toute chaîne que vous souhaitez rendre traduisible doit être encapsulée dans l’une des fonctions gettext de WordPress. Lors de l’exécution, ces fonctions recherchent la traduction correcte et reviennent à la chaîne d’origine si aucune traduction n’est trouvée.
Chaînes de base
Utilisez __() lorsque vous devez renvoyer une chaîne. Pour une sortie HTML (ce qui est presque toujours le cas), utilisez les variantes échappées :
// Return a translated string
$label = __( 'Settings', 'my-plugin' );
// Echo a translated string, escaped for HTML
echo esc_html__( 'Settings saved.', 'my-plugin' );Les normes de codage de WordPress recommandent echo esc_html__() plutôt que _e() car cela rend l’échappement de la sortie explicite. C’est une bonne habitude à appliquer systématiquement.
Chaînes avec variables
Si vous concaténez une variable directement dans une chaîne, les traducteurs ne voient que les fragments et non la phrase complète. Cela rend la traduction correcte impossible, en particulier dans les langues où l’ordre des mots est différent. Utilisez plutôt printf() ou sprintf() avec un placeholder, et ajoutez un commentaire pour le traducteur afin qu’il sache ce que %s représente :
printf(
/* translators: %s: the user's display name */
esc_html__( 'Welcome back, %s.', 'my-plugin' ),
esc_html( $display_name )
);Formes plurielles
En anglais, les pluriels sont simples : un commentaire, deux commentaires. D’autres langues ne sont pas aussi directes. Certaines possèdent plusieurs formes de pluriel selon le nombre. Utilisez _n() pour gérer cela correctement, quelle que soit la langue dans laquelle votre extension est traduite :
printf(
esc_html( _n(
'%s comment',
'%s comments',
$count,
'my-plugin'
) ),
number_format_i18n( $count )
);Chaînes nécessitant un contexte
Certains mots ont des significations différentes selon l’endroit où ils apparaissent. Utilisez _x() pour donner aux traducteurs le contexte dont ils ont besoin pour obtenir la bonne traduction :
// "Export" as a noun (the file) vs. a verb (the action)
echo esc_html_x( 'Export', 'button label', 'my-plugin' );Étape 3
Internationaliser vos chaînes JavaScript
WordPress fournit le paquet wp-i18n afin que vous puissiez utiliser en JavaScript les mêmes fonctions gettext qu’en PHP. Lors de l’enregistrement de votre script, déclarez wp-i18n comme dépendance :
wp_register_script(
'my-plugin-script',
plugins_url( 'js/app.js', __FILE__ ),
array( 'wp-i18n' ),
'1.0.0',
true
);Ensuite, dans votre fichier JavaScript :
const { __, _n, sprintf } = wp.i18n;
const message = __( 'Settings saved.', 'my-plugin' );Si vous utilisez un bundler comme Webpack, utilisez @wordpress/babel-plugin-makepot pour extraire les chaînes traduisibles de votre bundle dans le cadre de votre processus de build.
Étape 4
Générer votre fichier POT
Une fois vos chaînes encapsulées, vous devez générer un fichier POT (Portable Object Template). C’est le fichier source à partir duquel PTC (ou tout traducteur) travaille. Il contient toutes vos chaînes traduisibles, mais aucune traduction pour l’instant.
Exécutez cette commande depuis le répertoire racine de votre extension ou thème :
wp i18n make-pot . languages/my-plugin.potWP-CLI analyse vos fichiers PHP, JavaScript et block.json à la recherche d’appels gettext et les compile dans un seul fichier POT. Si vous utilisez Composer, vous pouvez ajouter cela en tant que script Composer afin que la commande reste cohérente pour toute votre équipe et ne nécessite pas d’installation globale de WP-CLI.
La suite complète wp i18n comprend tout ce dont vous aurez besoin plus tard dans le flux de travail :
| Commande | Ce qu’elle fait |
|---|---|
wp i18n make-pot |
Générer un fichier POT à partir de la source |
wp i18n update-po |
Synchroniser les fichiers PO existants lorsque votre POT change |
wp i18n make-mo |
Compiler les fichiers PO en fichiers binaires MO |
wp i18n make-json |
Extraire les chaînes JS des fichiers PO vers des fichiers JSON |
wp i18n make-php |
Générer des fichiers l10n.php (WordPress 6.5+) |
Traduire des fichiers POT avec PTC
PTC est une plateforme de traduction conçue pour les développeurs WordPress. Vous commencez avec un fichier POT et recevez en retour des fichiers de traduction prêts pour la production, sans aucune conversion manuelle de votre part.
Si vous n’avez jamais utilisé PTC auparavant, vous pouvez vous inscrire pour un essai gratuit de 30 jours. Votre premier projet inclut jusqu’à 20 000 mots dans deux langues, ce qui vous permet de traduire une extension ou un thème réel avant de vous engager.
1
Configurer votre premier projet de traduction
Pour commencer, téléchargez votre fichier POT et choisissez les formats de sortie dont vous avez besoin. PTC peut renvoyer n’importe quelle combinaison de :
- Fichiers .
popour chaque langue cible .moFichiers , compilés et prêts à être livrés.jsonFichiers pour vos chaînes JavaScript.l10n.phpFichiers pour un chargement plus rapide sur WordPress 6.5 et versions ultérieures
Le format .l10n.php mérite d’être activé pour les nouveaux projets. WordPress le charge automatiquement à la place du fichier MO lorsque les deux sont présents, et il est plus rapide et moins gourmand en mémoire.

L’assistant de configuration vous demande également de décrire votre thème ou extension afin que PTC puisse générer des traductions avec le ton et le contexte appropriés pour votre produit spécifique. Vous pouvez également ajouter des termes spécifiques à la marque au glossaire à cette étape, ce qui garantit que les noms, les fonctionnalités et toute terminologie sont traduits de manière cohérente dans toutes les langues.
Consultez le guide de démarrage pour un aperçu complet de ces étapes.
2
Passer à la localisation continue
Une fois vos premiers fichiers traduits, vous pouvez connecter PTC à votre dépôt GitHub, GitLab ou Bitbucket. Vous pouvez également intégrer la localisation dans votre pipeline CI/CD grâce à l’API.
À partir de là, vous n’avez plus besoin de télécharger les fichiers manuellement. Lorsque votre fichier POT change, PTC détecte les chaînes nouvelles et mises à jour et renvoie les fichiers traduits : via une pull request pour Git, ou directement via l’API. Vos traductions restent synchronisées avec votre code à chaque version.
Chargement des traductions dans WordPress
Une fois que vous avez vos fichiers traduits, vous devez les placer au bon endroit et indiquer à WordPress où les trouver.
Avant de faire l’une ou l’autre de ces choses, assurez-vous que vos noms de fichiers sont corrects. WordPress recherche les fichiers de traduction en utilisant un modèle de nommage spécifique, et un nom de fichier qui ne correspond pas signifie simplement que le fichier ne sera pas chargé.
Bien nommer vos fichiers
Les codes de paramètres régionaux suivent le format language_COUNTRY : de_DE pour l’allemand (Allemagne), fr_FR pour le français (France), pt_BR pour le portugais (Brésil). Vous pouvez trouver la liste complète des codes de paramètres régionaux WordPress sur translate.wordpress.org.
Le nom de fichier attendu dépend de l’endroit où vous placez le fichier.
Dans le dossier /languages/ de votre extension :
{text-domain}-{locale}.mo
my-plugin-de_DE.moDans le dossier /languages/ de votre thème :
{locale}.mo
de_DE.mo
Dans le répertoire global des langues de WordPress (/wp-content/languages/) :
{text-domain}-{locale}.mo
my-plugin-de_DE.moNotez que les thèmes utilisent une convention de nommage plus courte lorsque les fichiers sont inclus dans le thème lui-même. Si vous placez les fichiers dans le répertoire global des langues, les extensions et les thèmes utilisent tous deux le modèle {text-domain}-{locale}.
Charger les traductions pour les extensions (PHP)
Une fois vos fichiers de traduction en place, vous devez les enregistrer auprès de WordPress afin qu’il sache quels fichiers appartiennent à votre extension et où les trouver. Utilisez load_plugin_textdomain() accroché à init. N’utilisez pas plugins_loaded. Cela déclenche un avertissement d’obsolescence dans les versions actuelles de WordPress.
add_action( 'init', function () {
load_plugin_textdomain(
'my-plugin',
false,
dirname( plugin_basename( __FILE__ ) ) . '/languages/'
);
} );Charger les traductions pour les thèmes (PHP)
Pour les thèmes, utilisez load_theme_textdomain() accroché à after_setup_theme. Ce crochet se déclenche lors de l’initialisation du thème, ce qui est le moment opportun pour que WordPress charge vos fichiers de traduction.
add_action( 'init', function () {
wp_set_script_translations(
'my-plugin-script',
'my-plugin',
plugin_dir_path( __FILE__ ) . 'languages'
);
} );
Traduire votre fichier README et votre fiche WordPress.org
Votre readme.txt n’est pas un fichier de ressources, donc WP-CLI ne le détectera pas lors de la génération d’un fichier POT. Pour le traduire, utilisez la fonctionnalité Coller pour traduire de PTC : collez le contenu, choisissez vos langues cibles et téléchargez le résultat.

Si votre extension ou thème est répertorié sur WordPress.org, la description traduite apparaît dans l’onglet Détails de l’extension dans la langue de l’utilisateur. Pour y publier vos traductions, suivez le processus d’importation de WordPress.org.
Foire aux questions
Quelle est la différence entre les fichiers POT, PO, MO et l10n.php ?
Ils font tous partie du même pipeline de traduction, chacun servant un objectif différent :
- Un fichier POT (Portable Object Template) est le fichier source que vous générez à partir de votre code. Il contient toutes vos chaînes traduisibles dans leur langue d’origine, mais aucune traduction. C’est le fichier que vous transmettez à PTC.
- Un fichier PO (Portable Object) est une copie de votre fichier POT à laquelle des traductions ont été ajoutées pour une langue spécifique. Il est lisible par l’homme, de sorte que les traducteurs peuvent travailler directement dessus.
- Un fichier MO (Machine Object) est une version binaire compilée d’un fichier PO. WordPress l’utilise pour charger les traductions en PHP car il est plus rapide à lire que le format PO en texte brut.
- Les fichiers JSON servent le même objectif que les fichiers MO, mais pour les chaînes JavaScript. WordPress ne peut pas utiliser de fichiers MO pour JavaScript, vos traductions JS sont donc extraites et stockées séparément au format JSON.
- Un fichier l10n.php est une alternative plus récente aux fichiers MO, introduite dans WordPress 6.5. Il se charge plus rapidement et utilise moins de mémoire, et WordPress l’utilisera automatiquement lorsqu’il sera disponible aux côtés du fichier MO.
Puis-je compter sur la communauté de traduction WordPress au lieu d’utiliser un outil de traduction ?
Dans la plupart des cas, non. La traduction communautaire sur WordPress.org repose sur le bénévolat. En pratique, cela signifie que seul un petit nombre d’extensions largement utilisées disposent de traductions complètes dans les principales langues européennes. La plupart des extensions ont des traductions partielles et, pour les paramètres régionaux moins courants, beaucoup n’en ont aucune.
Si vous voulez que vos utilisateurs bénéficient d’une expérience entièrement traduite dès le premier jour, attendre la communauté n’est pas une stratégie réaliste. Les traductions peuvent mettre des mois ou des années à apparaître, si tant est qu’elles apparaissent. L’utilisation d’un outil comme PTC signifie que vous livrez des traductions complètes en même temps que votre langue source, selon votre propre calendrier, sans dépendre de bénévoles.
Une analyse de plus de 60 000 extensions et thèmes WordPress le confirme : la traduction communautaire couvre moins de 5 % des besoins de traduction dans 40 langues.
Si j’utilise PTC, ai-je besoin de Poedit ?
Non. Tout ce qui figure dans ce guide fonctionne avec WP-CLI et PTC. WP-CLI génère votre fichier POT et peut compiler des fichiers MO et JSON si nécessaire. PTC gère la traduction et renvoie tous les formats de fichiers dont WordPress a besoin. Poedit est un éditeur de bureau utile si vous préférez traduire manuellement, mais il ne fait pas partie de ce flux de travail.
Dois-je faire quelque chose de différent pour que mon thème/extension prenne en charge les langues RTL ?
Le flux de travail de traduction est le même. Les langues s’écrivant de droite à gauche (RTL) utilisent le même pipeline POT/PO/MO que n’importe quelle autre langue. L’étape supplémentaire consiste à s’assurer que votre thème prend en charge les styles RTL. WordPress charge automatiquement un fichier rtl.css s’il en existe un dans le répertoire de votre thème, et vous pouvez utiliser la fonction is_rtl() pour appliquer conditionnellement des styles ou des scripts spécifiques au RTL.
Comment m’assurer que les dates et les nombres s’affichent correctement pour chaque paramètre régional ?
Si votre extension ou thème affiche des dates ou des nombres, utilisez les fonctions de formatage intégrées de WordPress plutôt que les fonctions natives de PHP. date_i18n() formate les dates selon les paramètres régionaux actifs, et number_format_i18n() gère le formatage des nombres tenant compte des paramètres régionaux. Ces fonctions ne font pas partie du flux de travail des fichiers de traduction, mais elles sont essentielles pour une expérience entièrement localisée.
Pourquoi les traductions ne s’affichent-elles pas dans mon thème ou mon extension ?
La cause la plus fréquente est une discordance du domaine de texte. Votre code, vos noms de fichiers et votre appel load_plugin_textdomain() doivent tous utiliser exactement la même chaîne. Les traductions communautaires de WordPress.org peuvent également remplacer silencieusement vos fichiers groupés. Consultez le guide de dépannage complet pour des scénarios et des correctifs spécifiques.

Prêt à livrer des thèmes et extensions WordPress entièrement traduits ?
Inscrivez-vous pour un essai gratuit de 30 jours et traduisez votre premier projet dans deux langues — jusqu’à 20 000 mots — tout à fait gratuitement.


Traduire des thèmes et des extensions avec PTC
Obtenez des traductions précises en quelques minutes
Téléchargez des fichiers uniques ou automatisez via l’API ou l’intégration Git