Créer un fichier .pot avec WP-CLI

Lorsqu’un plugin ou un thème WordPress est développé pour l’internationalisation i18n, c’est-à-dire avec les fonctions gettext() de WordPress, telles que __(), _e(), esc_html__(), …, il faut créer un fichier .pot ou un fichier .po pour traduire les chaînes.

Trois ampoules de lumière humides avec le logo WordPress et les textes i18n, .pot, WP CLI

Fichiers .pot, .po, .mo

Un fichier .pot Portable Object Template, est un fichier texte qui contient toutes les chaînes du plugin ou du thème WordPress à traduire. Il ne comporte aucune traduction. C’est le fichier que l’on donne aux traducteurs, pour créer un fichier texte .po Portable Object et un fichier compilé .mo Machine Object pour un langage.

Un article de ce site traîte de la mise en place d’un fichier .po pour un nouveau plugin en partant de rien. Il est possible d’obtenir un fichier .pot à partir d’un fichier .po, mais le mieux est de faire le contraire, le fichier .pot étant le point de départ de toute traduction.

WP CLI

WP CLI Command Line Interface est un ensemble d’outils en ligne de commande permettant d’effectuer un certain nombre d’actions intéressantes pour WordPress. Il permet en particulier de créer automatiquement un fichier .pot pour un thème ou un plugin, que l’on pourra éditer avec un outil gratuit tel que POEdit.

Installation

On télécharge le fichier avec curl :

On vérifie le fichier téléchargé :

On rend le fichier exécutable, et on le déplace dans /usr/local/bin en le renommant wp, on aura alors la commande wp disponible :

Vérification

On vérifie que cela fonctionne :

La commande wp est disponible globalement.

Créer un fichier .pot

Pour créer le fichier modèle de traduction .pot, on se rend dans le répertoire principal du plugin ou du thème. On crée, si ce n’est déjà fait, le répertoire des fichiers de langages défini avec load_plugin_textdomain() ou load_theme_textdomain(). La plupart du temps, on le nomme languages/ ou lang/.

Dans le répertoire principal du plugin ou du thème, on lance la commande :

Pour un plugin

textdomain est défini dans la fonction load_plugin_textdomain(), c’est-à-dire le nom donné par plugin_basename( __FILE__ ) dans le fichier php où est déclaré le plugin dans la zone des commentaires au début du fichier. On ajoute le paramètre locale en_US car un plugin ou un thème est développé pour i18n en utilisant des chaînes en anglais américain.

Pour un theme

Voir cet article pour le nommage des fichiers .po avec le textdomain et le paramètre locale.

Exemple

Pour un plugin murviel-info-beziers, on charge le textdomain avec le crochet hook init dans le fichier principal php :

__FILE__ est le chemin au fichier principal du plugin dans lequel on se trouve, soit /var/www/.../wp-content/plugins/murviel-info-beziers/murviel-info-beziers.php.

plugin-basename( __FILE__ ) est le chemin relatif du fichier principal du plugin dans le dossier des plugins de WordPress, soit murviel-info-beziers/murviel-info-beziers.php.

dirname( plugin_basename( __FILE__ ) est le nom du dossier soit murviel-info-beziers.

mib est le textdomain.

On se place dans le dossier murviel-info-beziers, le sous-dossier languages existe. Et l’on entre la commande suivante :

Le fichier .pot est créé. Les avertissements sont des faux positifs, car le placeholder dans la fonction __() est le résultat d’une fonction.

Entête du fichier .pot

Le début du fichier .pot, ou l’entête du fichier et les premières lignes à traduire, créé par WP_CLI est le suivant :

L’entête est ce qui permettra aux logiciels de traduction, POEdit en particulier, de mettre à jour le catalogue qui est essentiel à la traduction. Il doit indiquer, outre le titre du projet, le nom du traducteur, le jeu de caractères utilisé …, le chemin relatif pour accéder aux fichiers, les instructions ou fonctions de traduction, la forme des pluriels … La langue de traduction sera demandée lors du chargement du fichier afin de gérer les différents langages et la génération des fichiers .po et .mo. Une fois le fichier .po créé, il suffira de lancer ce fichier pour compléter une traduction.

Changer et compléter l’entête pour POEdit :

Changement du nom du traducteur ou de l’équipe :

Chemin relatif des fichiers php :

Chemin de recherche pour POEdit :

Jeu de caractères :

Liste des fonctions php de traduction :

La forme des pluriels :

La forme des pluriels peut changer selon les langues. En français, on n’accorde pas 0, comme dans 0 article. En anglais, cela s’accorde : 0 posts. Il faudra alors changer cela en fonction des langages. Pour le français :

Pour l’anglais, cela sera :

Chaînes d’origine et traduite :

La chaîne d’origine est indiquée avec la variable ou le paramètre msgid, la chaîne traduite par msgstr. En commentaire, devant la définition des chaînes, on trouve le titre ou l’emplacement de la chaîne dans le code, voir l’exemple plus haut. Pour les pluriels, la variable du pluriel est msgid_plural, les chaînes traduites sont un tableau msgstr[0], msgstr[1]. La variable indiquant le contexte pour le traducteur (dans la fonction _x() par exemple) est msgctxt.

Et hop, le fichier modèle .pot est prêt, on peut traduire le plugin avec POEdit. Lorsque le plugin sera fini, il ne faudra pas oublier de regénérer un fichier .pot pour la version de production, disponible aux traducteurs.

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables.