Voici un petit script en PHP qui redirige le visiteur vers un article de Wikipédia dans sa langue.
Voici mon problème : en créant le site du cours d’espéranto d’été 2019, j’ai trouvé que c’était une bonne idée de mettre des liens vers Wikipédia pour que les visiteurs puissent en savoir plus sur la ville de l’événement (Nitra en Slovaquie) ou sur les lieux où seront les excursions. Seulement voilà : le site est multilingue. J’avais donc trois solutions :
- mettre un simple lien vers Wikipédia en espéranto et laisser au visiteur le soin de chercher si la page existe dans sa langue ;
- laisser les traducteurs chercher le lien vers la version dans leur langue de Wikipédia (sans être sûr qu’ils comprennent ce qu’il faut faire) ;
- trouver un moyen pour qu’un même lien redirige le visiteur vers l’article de Wikipédia dans sa langue.
J’ai donc un peu creusé l’API de Wikidata pour mettre en œuvre la troisième option. Voilà le résultat :
<?php $languesource = 'fr'; // Par défaut : français $languecible = 'en'; // Par défaut : anglais if (isset($_GET['languecible'])) { $languecible = $_GET['languecible']; } elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $langues_navigateur = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); $matches = array(); preg_match('!^([a-z]+)!i', $langues_navigateur[0], $matches); if (isset($matches[1])) $languecible = $matches[1]; } if (isset($_GET['q'])) { $q = $_GET['q']; if (substr($q, 0, 1) != 'Q') $q = 'Q' . $q; } else { $languesource = isset($_GET['languesource']) ? $_GET['languesource'] : $languesource; $article = isset($_GET['article']) ? $_GET['article'] : ''; $article = rawurlencode($article); $url = 'https://' . $languesource . '.wikipedia.org/w/api.php?action=query&prop=pageprops&ppprop=wikibase_item&redirects=1&format=json&titles=' . $article; $wp = json_decode(file_get_contents($url), true); $q = current($wp['query']['pages'])['pageprops']['wikibase_item']; } $url = 'https://www.wikidata.org/wiki/Special:EntityData/' . $q . '.json'; $wikidata = json_decode(file_get_contents($url), true); if (isset($wikidata['entities'][$q]['sitelinks'][$languecible . 'wiki'])) // L'article existe dans la langue cible header('Location: ' . $wikidata['entities'][$q]['sitelinks'][$languecible . 'wiki']['url']); elseif (isset($wikidata['entities'][$q]['sitelinks'][$languesource . 'wiki'])) // L'article existe dans la langue source header('Location: ' . $wikidata['entities'][$q]['sitelinks'][$languesource . 'wiki']['url']); else // L'article n'existe pas dans la langue source header('Location: https://' . $languesource . '.wikipedia.org/wiki/'); ?>
Il suffit d’appeler la page avec quelques paramètres dans l’URL. Le principe est assez simple :
- Le paramètre
q
contient l’identifiant Wikidata de la page (par exempleQ726
pour « Cheval »). - S’il n’est pas fourni, le script va chercher l’identifiant de la page (paramètre
article
) dans la langue source (paramètrelanguesource
, par défaut le français). - Le script récupère les informations sur l’élément Wikidata.
- S’il existe un article Wikipédia dans la langue cible (paramètre
languecible
, s’il n’est pas présent, on prend la première langue dans les paramètres du visiteur, et si ce n’est pas possible, c’est par défaut l’anglais), rediriger vers celui-ci. - Si cet article n’existe pas, mais qu’il existe dans la langue source, alors on redirige vers cette page-là.
- Sinon, on redirige simplement vers la page d’accueil de Wikipédia dans la langue source.
Mon implémentation est à l’adresse https://ses.ikso.net/2019/fr/vikipedio.php
(j’ai juste changé les noms des paramètres et les langues par défaut, mais ça reste le même principe). Par exemple :
vikipedio.php?pagxo=Bratislavo&cellingvo=fr
redirige vers l’article sur Bratislava en français.vikipedio.php?q=Q726
redirige vers l’article « Cheval » dans la langue du navigateur.vikipedio.php?pagxo=Hlavné námestie (Bratislava)&lingvo=sk&cellingvo=fr
redirige vers l’article « Hlavné námestie (Bratislava) » en slovaque, en tout cas jusqu’au jour où quelqu’un créera un article sur la place principale de Bratislava en français.vikipedio.php?pagxo=fgzocbehrbeo
redirige vers la page d’accueil de Wikipédia en espéranto.