hreflang

Que ce soit en vue de respecter des contraintes dites d’accessibilité, ou plus simplement parce qu’on trouve le gadget sympa et esthétique, on peut souhaiter appliquer l’attribut hreflang sur un lien hypertexte.

Notes préliminaires

  1. D’abord introduit en tant que filtre dans le squelette Spip-Clear, pour offrir la même fonctionnalité que le système DotClear, cette contribution a compté parmi les premiers plugins développés sur la zone. À ce titre, il a servi de cobaye pour le développement même de la gestion des plugins. Ce rappel émouvant est certes superflu, il peut toutefois servir d’avertissement au cas où vous tomberiez sur une page web faisant référence au « plugin hreflang » qui a plus fait l’objet de réécriture de forme que de fond :)
  2. Le respect des contraintes d’accessibilité étant ce qu’elles sont, il faut avertir le lecteur que cette contribution a été mise au point uniquement pour le coté esthétique de l’attribut hreflang et pour pomper une fonction qui n’existait pas dans SPIP à l’époque.
  3. Le plugin mentionné ci-dessus n’a pas été conservé quand, le 16 septembre 2006, la gestion de hreflang a été intégrée dans le noyau de SPIP. Il n’est donc pas nécessaire de se servir du code de cet article si vous utilisez la version 1.9.2 de ce génialissime Système de Publication.

Le code

Dans votre fichier mes_fonctions.php :

/***
* appliquer hreflang sur un lien
* (c)James 2005-2006, Licence GNU/GPL
* cf. : http://www.la-grange.net/w3c/html4.01/struct/links.html#h-12.1.5
*     & http://www.la-grange.net/w3c/html4.01/struct/links.html#adef-hreflang
* prerequis: extention PCRE pour php (standard en php4 et plus)
* permet la notation SPIP [truc|code-de-langue->bla] pour les liens dans le #TEXTE
* remplace <a href="bla">truc|code-de-langue</a> par <a href="bla" hreflang="code-de-langue">truc</a>
* a appliquer a un #TEXTE => [(#TEXTE|appliquer_hreflang)]
***/
function appliquer_hreflang($texte) {
  $regexp = "|<a([^>]+)>([^<]+)(\|(([a-z]+)(-([a-z]+))?))+</a>|i";
  $replace = "<a\\1 hreflang=\"\\4\">\\2</a>";
  return preg_replace($regexp, $replace, $texte);
}

Dans vos squelettes, la balise [(#TEXTE|appliquer_hreflang)] transformera les lien SPIP que vous aurez écrit [truc|code-de-langue->bla] en <a href="bla" hreflang="code-de-langue">truc</a>

De base, on n’observera aucun changement. Les robots, et principalement les navigateurs-clients pourront se servir de cette nouvelle information, mais les humains, eux, ne la verront que si vous agrémentez vos feuilles de styles en conséquence :

/* exemple de definition css (dotclear V1.2):*/
a[hreflang]:after {
  content: "\0000a0(" attr(hreflang) ")";
  color : #666;
  background : transparent;
}

/* autre exemple (pompage.net)*/
a[hreflang|="en"]:after {
  content: "\0000a0"url(/pompage_v3/linken.gif);
}

a[hreflang] {
  content: normal !important; #  Hack pour Opera, qui ne comprend pas la regle precedente
}

Ce ne sont que des exemples repiqués ici et là et qui doivent plus ou moins bien fonctionner selon le navigateur utilisé (effet nickel sur FireFox, par exemple). Certains seront tentés d’insérer des petits drapeaux représentant une nation. Vous faites ce que vous voulez, mais rappelez-vous que l’information que vous ajoutez indique une langue, celle-ci pouvant d’ailleurs être parlée dans plusieurs pays.

Voilà, c’est tout ! :)

enfin, presque...

et oui, le filtre ci-dessus transforme un lien SPIP, mais ne nettoie pas le texte produit par la balise #INTRODUCTION. On risque donc de trouver parfois, des choses du genre : cliquer sur ce lien|br pour lire la traduction... Et c’est très moche...

D’où le filtre supplémentaire ci-dessous, à placer à la suite du précédent :

/***
* retirer hreflang sur un lien tronque dans une INTRODUCTION
* (c)James 2005-2006, Licence GNU/GPL
* remplace truc|code-langue par truc
* a appliquer a une #INTRODUCTION => [(#INTRODUCTION|retirer_hreflang)]
***/
function retirer_hreflang($introduction) {
  $regexp = "|\|(([a-z]+)(-([a-z]+))?)|i";
  $replace = "";
  return preg_replace($regexp, $replace, $introduction);
}

appliquer le nouveau filtre comme ici : [(#INTRODUCTION|retirer_hreflang)], aura pour conséquence de nettoyer le résumé de vos pages d’accueil, par exemple.

Raccourcir tout ça

Si on résume, l’emploi de ces deux filtres font qu’on va devoir, dans tous ces squelettes html, les notations suivantes :

  • [(#INTRODUCTION|retirer_hreflang)]
    et
  • [(#CHAPO|appliquer_hreflang)]
  • [(#TEXTE|appliquer_hreflang)]
  • [(#NOTES|appliquer_hreflang)]

Ce qui est un petit peu lourd.

Une méthode consiste donc à appliquer les deux filtres, systématiquement, grâce au point d’entrée apres_propre() en créant cette fonction dans votre fichier mes_fonctions.php.
Exemple :

function apres_propre($texte) {
  return retirer_hreflang(
    appliquer_hreflang($texte)
  );
}

et là, plus besoin d’ajouter les filtres dans vos squelettes, ce sera automatique.

Dernière modification de cette page le 5 juin 2007

Discussion

Aucune discussion

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom