Messages multilingues avec Polylang

Table des matières
Lors de la création d’un site, la procédure d’inscription, de connexion ou de validation d’une action demande souvent l’envoi d’un message électronique au visiteur, à l’abonné ou encore à l’utilisateur. Si le site web est multilingue, il est indispensable d’envoyer les messages de correspondance dans la langue de celui-ci. Polylang offre des fonctions de traductions à la volée qui évite de devoir écrire les messages ou le code HTML de ceux-ci dans toutes les langues du site.

Introduction

Polylang est fourni avec une bibliothèque de fonctions PHP qui permet, entre autres, d’écrire un message en plusieurs langues. Ceci permet d’éviter la tâche fastidieuse de rédiger le code HTML des messages dans toutes les langues que proposent le site. Utiliser ces fonctionnalités du plugin Polylang permet de raccourcir le temps passer à coder et à assigner la tâche de traduction à une personne dont c’est la langue maternelle et qui n’est pas, en principe, une personne qui connaît la programmation.

Anglais comme langue principale

La plupart des programmeurs, pour ne pas dire la totalité, vont écrire le code PHP d’un site WordPress en anglais. De ce fait, il est aussi applicable à la rédaction des différents messages électroniques envoyés aux utilisateurs du site.

Dans les réglages linguistiques de WordPress, il existe plusieurs options concernant la langue.

  • La langue principale du site (Réglages – Général). Ce réglage permet de modifier les réglages principaux en fonction du pays.
  • La langue principale de l’utilisateur (Utilisateurs). Ce réglage permet de choisir la langue d’affichage de la console d’administration de WordPress pour un utilisateur. Ce qui permet de dire qu’il est tout à fait possible de créer de multiples utilisateurs, chacun affichant la console WordPress dans sa propre langue.
  • La langue d’affichage du contenu des publications et des messages. (Langues – Langues). Ce réglage Polylang permet de choisir la langue d’affichage par défaut des publications et autres messages. A première vue, il devrait toujours être “anglais“, pour suivre la recommandation citée ci-dessus.
Le réglage des langues dans Polylang

La traduction des chaînes de caractères

Polylang offre un onglet baptisé “Traduction des chaînes”, dans lequel toutes les expressions du site seront affichées dans la langue principale. Puis chaque chaîne de caractères possède un champ par langue ajoutée au site web dans lequel il est possible de traduire le mot ou l’expression dans l’autre langue. Les expressions sont triées en différents groupes. Le groupe principale est “Wordpress”, dans lequel toutes les expressions créées par WordPress sont répertoriées. Il est tout à fait possible de créer une expression de formatage, comme ici pour le format de la date et de l’heure. D’autres groupes sont crées par des plugins tiers, comme par exemple “CPT UI”. Il est également possible de créer son propre groupe, comme expliqué au prochain chapitre.

Traduction des chaînes du groupe WordPress

Créer une expression

Comme dit ci-dessus, les expressions devraient toujours être écrite en anglais, puis traduite. Pour créer une expression, il faut créer un nouveau fichier PHP puis l’ajouter au thème enfant. Les expressions seront exécutés au chargement du site via l’action “after_setup_theme”, qui va se lancer juste après le chargement du thème principale du site.

La fonction Polylang utilisée pour créer les expressions est “pll_register_string”. Cette fonction demande en paramètres, le nom de l’expression, l’expression et le nom du groupe. Le quatrième paramètre est un type booléen pour passer l’expression en multiligne. Les expressions devraient toujours être courte et concise et, de ce fait, celui-ci devrait toujours être négatif.

Voici un exemple pour créer une expression dont le nom est “WP Mails” et le groupe est “Custom strings”.

<?php
  /**
  * Plugin Name: Polylang
  * Description: Customized text strings translation
  * Author: Olivier Paudex
  * Author Web Site: https://www.fuyens.ch
  */

  // Register Polylang strings translations 
  function register_polylang_strings_translations() {
    if (function_exists('pll_register_string')) {

      // Mails
      pll_register_string('WP Mails', 'Your post is awaiting validation', 'Custom strings', false);
    }
  }
  add_action('after_setup_theme', 'register_polylang_strings_translations');
?>

Une fois le code ci-dessus ajouté, l’expression va se retrouver sous l’onglet “chaînes de caractères” de Polylang. Il ne reste plus qu’à la traduire en français.

L’expression et sa traduction

Utiliser les expressions dans un message électronique

Une fois les expressions créées dans Polylang, il est possible de les utiliser pour envoyer un message électronique. Pour réaliser ceci, il faut utiliser une nouvelle fonctionnalité de Polylang nommée “pll_translate_string”. Celle-ci permet de traduire une expression enregistrée au préalable dans Polylang. Elle demande deux paramètres, l’expression et la langue souhaitée.

Ainsi, pour reprendre l’exemple ci-dessus, le code ci-dessous va assigner à la variable “$message”, l’expression “Your post is awaiting validation”, traduite en français.

$message = pll_translate_string('Your post is awaiting validation', 'fr_FR')

Envoyer un message dans la langue de l’auteur

Pour terminer cette publication, voici le code complet pour envoyer à un contributeur, un message électronique, dans sa langue, que sa publication est en attente de validation.

  • Cette fonction utilise l’action “transition_post_status” qui s’exécute à chaque fois qu’une publication change de status. Ici, la publication passe en mode “pending”, quand celle-ci est sauvegardée par le rédacteur.
  • Le code va récupérer quelques informations sur le rédacteur, dont son ID, son adresse électronique, son prénom, son nom et la langue dans laquelle il s’exprime.
  • Le message est ensuite écrit et traduit grâce à la fonction “pll_translate_string” et envoyé au contributeur au format HTML.

Les chaînes de caractères devant être le plus simple possible, il est conseillé de ne pas ajouter les signes de ponctuations et autres espaces dans celles-ci, mais plutôt d’en créer plusieurs. Ainsi, il est préférable de séparer les longues expressions en plusieurs chaînes de caractères. Un exemple concret donnerait deux chaînes de caractères pour l’expression “tourner à droite”, “au prochain carrefour”. Il sera alors possible de réutiliser la deuxième chaîne de caractères dans l’expression “tourner à gauche”, “au prochain carrefour”.

<?php
  /**
  * Plugin Name: OP_Mails
  * Description: Send mails
  * Author: Olivier Paudex
  * Author Web Site: https://www.fuyens.ch
  */

  // Send email to contributor when post is created or updated
  function new_post_mail($new_status, $old_status, $post) {
    
    // Bail early if not a custom post type form
    $custom_post_type = array('travels', 'tracks', 'it');
    if (in_array(get_post_type($post), $custom_post_type)) { 

      // Send email when post is created or updated
      if ($old_status != 'pending' && $new_status == 'pending') {

        // Get author data
        $author_id = $post->post_author;
        $email = get_the_author_meta('user_email',$author_id);
        $firstname = get_the_author_meta('user_firstname',$author_id);
        $lastname = get_the_author_meta('user_lastname',$author_id);
        $language = get_user_locale($author_id);

        // Add a subject to the mail
        $subject = pll_translate_string('New post on', $language) . ' ' . get_bloginfo('name');

        // Get date and time of the current post
        $date_time = get_the_date('F jS Y', $post) . ", " . get_the_time('H:i', $post);

        // Create the message
        $message = pll_translate_string('Hello', $language) . ' ' . $firstname . ' ' . $lastname . ',<br><br>';
        $message .= pll_translate_string('Your post is awaiting validation', $language) . '.' . '<br><br>';
        $message .= pll_translate_string('Publication title', $language) . ' : <strong>' . get_the_title($post) . '</strong><br>';
        $message .= pll_translate_string('Publication date', $language) . ' : <strong>' . $date_time  . '</strong><br><br>';
        $message .= pll_translate_string('We will send you a new email to inform you of its publication', $language) . '. ';
        $message .= pll_translate_string('If this is not the case, we will contact you to explain our reasons', $language) . '.' . '<br><br>';
        $message .= pll_translate_string('Thanks for your contribution', $language) . '.' . '<br><br>';
        $message .= pll_translate_string('The administrator of', $language) . ' ' . get_bloginfo('name');
        
        // Add Text/HTML filter
        add_filter ('wp_mail_content_type', function($content_type) {return 'text/html';});

        // Send mail
        wp_mail($email, $subject, $message);

        // Reset content-type filter to avoid conflicts
        remove_filter('wp_mail_content_type', 'set_html_content_type');
      }
    }
  }
  add_action('transition_post_status', 'new_post_mail', 10, 3);

Cette action permet d’écrire une seule fois le message électronique en anglais, et donc aussi le code de la fonction. Polylang traduira automatiquement le message en fonction de la langue de l’utilisateur. Si le message devait être modifié, il suffirait d’adapter uniquement le message en anglais et sa traduction. Aucun risque de devoir modifier le code et de créer une erreur de programmation.

Table des matières
A consulter également

Les fenêtres modales et le système de connexion

Comment ajouter le ReCaptcha (sans plugin)

Générer une requête SQL sur WordPress

Pourquoi créer un plan du site (sitemap)

Capturer une carte géographique

Impression d’un PDF

Le thème enfant et les paramètres globaux

Créer une App pour Azure (partie 5)

WP Query avec Elementor

Supprimer les infos de mise à jour

A consulter également

Créer une App pour Azure (partie 5)

Créer une App pour Azure (partie 4)

SEO et réécriture des URL

Supprimer les infos de mise à jour

Inscription

Pour vous inscrire, veuillez remplir les champs ci-dessous

Mot de passe oublié ?

Vous allez recevoir un message avec un lien vous permettant de renouveler votre mot de passe

Mise à jour du mot de passe

Veuillez entrer votre ancien mot de passe ainsi qu'un nouveau
et confirmer celui-ci

Connexion