Internationalisation de WordPress : comment traduire les thèmes et les extensions WordPress

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.pot

WP-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 .po pour chaque langue cible
  • .mo Fichiers , compilés et prêts à être livrés
  • .json Fichiers pour vos chaînes JavaScript
  • .l10n.php Fichiers 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.

Sorties de traduction pour les fichiers POT

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.mo

Dans 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.mo

Notez 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.

Fonctionnalité Coller pour traduire

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

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


Faire défiler vers le haut