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