Remplacer un terme par un autre facilement sur votre site WordPress avec gettext

Après plusieurs présentations d’extensions et astuces destinées aux profils plus éditoriaux (webmasters, rédaction de contenu web), revenons à une petite astuce orientée code. Cette astuce ne présente pas un bout de code inédit, mais disons plutôt méconnu. Il s’agit des filtres gettext.

Dans quel cas est-il utile de remplacer un terme par un autre à l’aide de gettext ?

Il y a plusieurs cas de figure. Premièrement, pour remplacer une traduction en français qui ne vous convient pas. En tant que co-responsable de la traduction de WordPress en français, ce n’est pas quelque chose que je vous recommanderai. Et non, non, ce n’est pas ce que cela me vexe si vous voulez changer la traduction de WordPress ! 😄

Sérieusement, le problème c’est plutôt que votre installation entretiendrait alors une différence par rapport à l’ensemble de la documentation de WordPress disponible sur le web. Par ailleurs, les traductions de WordPress sont réalisées à la main par des humains en tenant compte de tous les cas de figure d’utilisation, et de façon contextualisée. Chaque traduction est choisie pour sa fiabilité, après consensus au sein de l’équipe de traduction de WP en français.

Avant de remplacer une traduction présente sur un écran de WP par une autre, il vous faudra donc vous assurer que vous n’allez pas entraîner d’effet de bords sur un autre écran. Il est aussi important de s’assurer qu’on le fait pour une bonne raison. 😉

Il y a des cas concrets nécessitant parfois un petit remplacement d’une expression par une autre, notamment pour mieux faire coller les termes utilisés sur WordPress aux termes « métier » que vous utilisez (ou que vos clients utilisent).

Un autre cas de figure serait celui d’une extension présentant un terme qui ne vous convient pas tout à fait. Attention, n’utilisez pas cette astuce pour traduire complètement une extension ou un thème ! Il y a des outils pour cela.

Si l’extension se trouve sur le répertoire officiel WordPress.org, utilisez plutôt l’outil de traduction translate.wordpress.org pour effectuer votre traduction et la rendre ainsi disponible pour tout le monde. 🥰

Si l’extension n’est pas présente sur WordPress.org par exemple parce qu’il s’agit d’une extension sur-mesure, vous pouvez aussi utiliser l’extension Loco Translate qui permettra d’en effectuer la traduction.

Dans cette astuce, je vais tout d’abord prendre l’exemple d’un site internet dont les Articles sont en réalité des présentations de produits divers (livres, films, musique… peu importe). Vous pourriez alors utiliser la fonctionnalité native des Commentaires afin de recueillir les avis des internautes sur vos articles. L’idée serait donc de remplacer les diverses occurrences du terme « commentaires » par le terme « avis ».

Remplacer une expression à l’aide du filtrage gettext

gettext est un hook de type « filtre », c’est à dire qu’il permet de filtrer un contenu pour le remplacer par un autre. Pour en savoir plus sur les hooks, n’hésitez pas à consulter l’astuce du 12 décembre de notre calendrier de l’Avent.

Ce filtre dispose de trois paramètres :

  • $translation : la traduction dans la langue de votre site d’une expression donnée.
  • $text : l’expression d’origine, généralement en anglais américain.
  • $domain : le text-domain de votre expression. Permet de choisir le thème ou l’extension sur laquelle appliquer le remplacement. Nous ne nous en servirons pas ici car notre modification s’appliquera partout.

Voici un exemple d’utilisation du filtre gettext :

// Déclaration de notre fonction et récupération de ses trois paramètres
 function who_replace_text( $translation, $text, $domain ) {
     $new_text = '';
     // On vérifie si le texte correspond à la valeur recherchée
     if ( $translation === 'ancien texte' ) {
         // Si oui, on défini le nouveau texte de remplacement
         $new_text = 'nouveau texte';
     }
     // On retourne ce texte en lieu et place de l'ancien
     return $new_text;
 }
 // Déclaration de l'utilisation du filtre gettext et renvoi vers la fonction ci-dessus, en priorité 10 et avec 3 paramètres
 add_filter('gettext', 'who_replace_text', 10, 3);

Cas concret : remplacer le terme « commentaires » par « avis »

Dans notre exemple nous voulons donc modifier l’expression « commentaires » par avis. Attention cependant à bien effectuer ce remplacement au pluriel comme au singulier ! Et il faut aussi penser aux majuscules pour les débuts de phrase. 🤓

Nous allons réutiliser notre bout de code d’exemple et le configurer de manière à remplacer « commentaire » et « commentaires » par « avis » :

function who_replace_text( $translation, $text, $domain ) {
     $new_text = $translation;
     // On augmente le nombre de cas de figure.
     if ( strpos( $translation, 'commentaires' ) !== false ) {
         $new_text = 'avis';
     } elseif ( strpos( $translation, 'commentaire' ) !== false ) {
         $new_text = 'avis';
     } elseif ( strpos( $translation, 'Commentaires' ) !== false ) {
         $new_text = 'Avis';
     } elseif ( strpos( $translation, 'Commentaire' ) !== false ) {
         $new_text = 'Avis';
     }
     return $new_text;
 }
 // On utilise les deux filtres gettext et gettext_with_context pour couvrir davantage de cas de figure.
 add_filter('gettext', 'who_replace_text', 10, 3);
 add_filter('gettext_with_context', 'who_replace_text', 10, 3);

Le terme « Commentaire(s) » sera alors remplacé un peu partout sur l’interface :

Quelques autres exemples de cas concrets

On pourrait imaginer par exemple vouloir remplacer le texte du label du champ « Identifiant ou adresse e-mail » de la page de connexion wp-admin. Par exemple, si l’on souhaite que les gens utilisent de préférence leur adresse e-mail pour se connecter, parce qu’on ne leur a jamais communiqué leur identifiant. Voici l’exemple :

Avant :

Après :

Code source :

function who_replace_text( $translation, $text, $domain ) {
     $new_text = $translation; 
     if ( $translation === 'Identifiant ou adresse e-mail' ) {
         $new_text = 'Adresse e-mail';
     }
     return $new_text;
 }
 add_filter('gettext', 'who_replace_text', 10, 3);

Autre exemple : si l’on souhaite supprimer complètement un chaîne, on peut également utiliser gettext. C’est tout simple, il suffira de renvoyer une expression vide au lieu de retourner la nouvelle traduction. Voici un exemple, où l’on souhaite simplement retirer la description située en dessous du champ Slogan sur les réglages généraux de WP.

Avant :

Après :

Code source :

function who_replace_text( $translation, $text, $domain ) {
     $new_text = $translation; 
     if ( $translation === 'En quelques mots, décrivez la raison d’être de ce site.' ) {
         $new_text = '';
     }
     return $new_text;
 }
 add_filter('gettext', 'who_replace_text', 10, 3);

Les limites du filtrage gettext

Cela peut vite apparaître comme une solution de facilité pour modifier le wording d’éléments sur votre installation WordPress. Attention cependant, le filtrage gettext doit uniquement être utilisé en dernier recours, pour deux raisons principales :

  • Si le texte d’origine vient à changer (et cela se produit parfois), alors votre modification ne s’appliquera plus, le terme à remplacer ayant disparu. 😃
  • Il ne faut pas trop effectuer de modifications de texte via gettext, cela doit être très limité à uniquement quelques remplacements. En effet, gettext est particulièrement coûteux en terme de performances.

Prudence, donc ! Cette astuce peut dépanner, mais elle est à utiliser avec modération. 🤓

Image par défaut
Jean-Baptiste Audras
Publications: 55

Laisser un commentaire