Le WordPress d'aujourd'hui, décodé pour les développeurs

Multilingue

« :lang() en CSS pour changer les guillemets typographiques selon la langue »

Les guillemets français « » et les guillemets anglais ne se ressemblent pas. Une seule règle CSS avec :lang() suffit à adapter automatiquement les citations sans dupliquer de feuille de style.

Par WordPress Développement • 29 mars 2021 • 4 min de lecture • Aucun commentaire
":lang() en CSS pour changer les guillemets typographiques selon la langue"

Deux paires de guillemets, l’une pour les citations de premier niveau, l’autre pour les citations imbriquées à l’intérieur : c’est tout ce que la propriété CSS quotes attend en argument, et c’est suffisant pour régler un problème que beaucoup de sites multilingues résolvent maladroitement, à coup de balises <blockquote> différentes selon la langue ou de feuilles de style dupliquées.

Le sélecteur :lang(), combiné à cette propriété, permet d’afficher des guillemets français « » pour un contenu déclaré en français, et des guillemets anglais typographiques pour un contenu déclaré en anglais, à partir d’une seule règle CSS générique qui s’adapte automatiquement selon l’attribut lang présent dans le HTML.

Le problème des guillemets codés en dur

Beaucoup de thèmes affichent une citation avec des guillemets saisis directement dans le contenu ou générés par un pseudo-élément CSS fixe, indépendant de la langue. Un site en français affiche alors ses citations avec des guillemets anglais si le thème vient d’un développeur anglophone, ou inversement un site multilingue affiche partout les mêmes guillemets français même pour ses pages en anglais ou en allemand, où la convention typographique est pourtant différente.

Cette incohérence typographique passe souvent inaperçue d’un développeur non germaniste ou non anglophone, mais elle saute aux yeux d’un visiteur natif de la langue concernée, habitué à des conventions différentes de citation.

La solution : quotes combiné à :lang()

L'essentiel à retenir : Le sélecteur :lang() cible un élément selon sa langue déclarée ; La propriété quotes définit les guillemets ouvrants et fermants ; Une seule feuille de style suffit pour toutes les langues du site

La propriété quotes s’applique généralement à un pseudo-élément ::before et ::after, en s’appuyant sur les valeurs spéciales open-quote et close-quote :

blockquote:lang(fr) {
    quotes: "\00AB\2009" "\2009\00BB" "\2039\2009" "\2009\203A";
}

blockquote:lang(en) {
    quotes: "\201C" "\201D" "\2018" "\2019";
}

blockquote:lang(fr) p::before,
blockquote:lang(en) p::before {
    content: open-quote;
}

blockquote:lang(fr) p::after,
blockquote:lang(en) p::after {
    content: close-quote;
}

Les quatre valeurs de la propriété quotes correspondent, dans l’ordre, au guillemet ouvrant principal, au guillemet fermant principal, puis à la paire utilisée pour une citation imbriquée à l’intérieur de la première. Les codes hexadécimaux précédés d’un antislash désignent des caractères Unicode précis, ici l’espace fine insécable habituelle en français entre le guillemet et le texte.

Pourquoi passer par :lang() plutôt que par une classe

Une alternative consisterait à ajouter une classe CSS différente selon la langue de la page, par exemple .lang-fr ou .lang-en, posée manuellement sur le conteneur principal. Cette approche fonctionne, mais oblige à maintenir cette classe à jour à chaque changement de langue, en plus de l’attribut lang déjà présent nativement en HTML pour d’autres raisons, notamment l’accessibilité et la césure automatique.

Le sélecteur :lang() évite cette duplication : il s’appuie directement sur l’attribut lang déjà présent, qu’il soit posé sur la balise html globale ou localement sur un élément précis, comme une citation dans une langue différente du reste de la page. Aucune classe supplémentaire n’est nécessaire, ce qui réduit d’autant le risque d’oubli lors d’une mise à jour du contenu.

  • Le sélecteur cible aussi bien l’attribut lang global que local, sans distinction.
  • Un code de langue avec région, comme fr-CA, correspond aussi à :lang(fr) selon les règles de correspondance.
  • La propriété fonctionne dans tous les navigateurs modernes, sans préfixe propriétaire nécessaire.

Étendre le principe à d’autres langues du site

Sur un site traduit en plusieurs langues, il suffit d’ajouter une règle :lang() supplémentaire pour chaque langue disposant d’une convention de guillemets propre, par exemple l’allemand qui utilise des guillemets bas-hauts inversés par rapport au français. Aucune duplication de feuille de style par langue n’est nécessaire : une seule feuille couvre l’ensemble des langues du site.

Un repère utile pour construire cette règle correctement : vérifier la convention typographique réelle de chaque langue avant de l’implémenter, plutôt que de supposer qu’elle ressemble à celle du français ou de l’anglais.

En résumé

Le sélecteur :lang() reste sous-utilisé alors qu’il règle élégamment un détail typographique auquel peu de sites multilingues font vraiment attention. Combiné à la propriété quotes, il permet d’obtenir des citations correctement ponctuées dans chaque langue du site, sans dupliquer aucune feuille de style ni ajouter la moindre classe CSS artificielle au balisage existant.

Laisser un commentaire

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

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi