Pour chaque page web ayant une langue par défaut, le code de langue est-il pertinent ?
Un synthétiseur vocal adapte sa prononciation à la langue déclarée dans le code source. Si votre page est en français mais porte lang="en", le lecteur d’écran lit le texte français avec une phonologie anglaise : « Bienvenue » devient méconnaissable, la prosodie s’effondre, et l’utilisateur aveugle perd le fil du contenu.
Le critère 8.4 ne demande pas seulement qu’un code de langue existe — c’est le travail du critère 8.3. Il exige que ce code soit juste. Deux conditions cumulatives : le code doit être valide selon la norme ISO 639-1 ou ISO 639-2, et il doit correspondre à la langue principale dans laquelle la page est rédigée.
Concrètement, inspectez la balise <html> et relevez la valeur de l’attribut lang. Page en français : lang="fr". Page en espagnol : lang="es". Le code doit refléter la réalité du contenu visible, pas la langue du thème, pas la configuration par défaut du CMS.
Code juste, lecture juste.
Un test pour évaluer la correspondance entre code de langue et contenu
Validité et pertinence du code de langue sur <html>
- Ouvrez les outils de développement et inspectez la balise
<html>. - Relevez la valeur de l’attribut
lang. - Vérifiez que ce code est valide : il doit exister dans la norme ISO 639-1 (codes à 2 lettres, ex. :
fr,en,es) ou ISO 639-2 (codes à 3 lettres, ex. :fra,eng). - Vérifiez que ce code est pertinent : il doit correspondre à la langue principale dans laquelle le contenu de la page est rédigé.
- Les deux conditions doivent être remplies pour valider le test. Un code absent, invalide ou qui ne correspond pas à la langue réelle de la page fait échouer le test.
Exemples
❌ Non conforme : Code de langue incorrect sur une page en français
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Bienvenue sur notre site</title>
</head>
<body>
<h1>Bienvenue</h1>
<p>Découvrez nos services en France.</p>
</body>
</html>La page est rédigée en français, mais lang="en" déclare l’anglais. Un lecteur d’écran comme NVDA ou JAWS sélectionne une voix anglophone et lit le texte français avec sa phonologie : « Bienvenue » est prononcé à l’anglaise, « Découvrez » devient incompréhensible. C’est l’erreur classique d’un template ou d’un CMS livré avec une langue par défaut non configurée.
✅ Conforme : Code de langue correct sur une page en français
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Bienvenue sur notre site</title>
</head>
<body>
<h1>Bienvenue</h1>
<p>Découvrez nos services en France.</p>
</body>
</html>lang="fr" correspond à la langue réelle du contenu. Le lecteur d’écran sélectionne automatiquement la voix française, avec la bonne prononciation et la bonne prosodie. L’utilisateur reçoit une expérience sonore cohérente avec ce qu’il lit ou fait lire.
Astuces et pièges
⚠️ Le CMS livre du lang="en" par défaut
WordPress, Drupal, Shopify : beaucoup de thèmes sont distribués avec lang="en" codé en dur dans le gabarit HTML. Si personne ne configure explicitement la langue dans les réglages du CMS, toutes les pages du site sont en infraction, même si le contenu est intégralement en français. À vérifier systématiquement lors d’un audit — c’est l’une des erreurs les plus fréquentes en production.
💡 8.3 vérifie la présence, 8.4 vérifie la pertinence
Ces deux critères sont distincts. Le critère 8.3 teste l’existence de l’attribut lang sur <html>. Le critère 8.4 teste la justesse de sa valeur. Une page avec lang="zz" (code inventé) peut valider 8.3 mais échouera 8.4. En audit, évaluez-les séparément pour produire des rapports précis.
⚠️ lang="french" ou lang="FR" seul sont invalides
Le nom complet de la langue en toutes lettres (french, francais) n’est pas un code ISO valide. De même, lang="FR" en majuscules seul ne respecte pas la convention BCP 47. Les codes corrects pour le français : fr (ISO 639-1), fra (ISO 639-2), ou fr-FR (avec sous-tag régional). En cas de doute, lang="fr" est la forme la plus simple et la plus robuste.
⚠️ Page bilingue : quelle langue déclarer sur <html> ?
Déclarez la langue principale, celle dans laquelle la structure de navigation, les titres et la majorité du contenu sont rédigés. Pour les passages dans l’autre langue, ajoutez des attributs lang locaux sur les éléments concernés. Ce balisage local est l’objet du critère 8.7, distinct du critère 8.4.
💡 Le validateur W3C confirme la validité du code ISO
Le validateur HTML de W3C (validator.w3.org) signale les codes de langue non reconnus. C’est le moyen le plus rapide de confirmer qu’une valeur lang est conforme aux normes sans consulter manuellement les listes ISO 639. La pertinence, elle, reste une vérification humaine : seul l’auditeur peut comparer le code déclaré à la langue réelle du contenu.
Questions fréquentes
Comment auditer concrètement le critère RGAA 8.4 sur la pertinence du code de langue ?
Ouvrez le code source de la page (Ctrl+U ou Cmd+U) et cherchez la balise <html>. Relevez la valeur de lang. Comparez-la à la langue du contenu visible. Des outils comme Includdy signalent les langues manquantes, mais pas toujours les codes incorrects ou non pertinents. La vérification de la pertinence reste une étape manuelle indispensable.
Quelle différence entre lang="fr" et lang="fr-FR" pour satisfaire le critère RGAA 8.4 ?
Oui, lang="fr-FR" est valide et pertinent pour une page en français. Le code principal fr est conforme à ISO 639-1, et le sous-tag régional FR est reconnu par BCP 47. Le RGAA accepte ces formes étendues. L’essentiel est que le code principal corresponde à la langue réelle du document.
Comment choisir lang sur <html> pour une page bilingue selon RGAA 8.4 ?
Déclarez la langue principale de la page sur <html>. Si la navigation, les titres et la majorité du contenu sont en français, gardez lang="fr". Balisez ensuite le formulaire anglais avec lang="en" sur son élément conteneur. Le lang de <html> reflète la langue dominante, le critère 8.7 gère les exceptions locales.
Comment le critère RGAA 8.4 s'applique-t-il aux Single Page Applications rendues par JavaScript ?
Oui. Que la page soit statique, générée côté serveur ou rendue par un framework JavaScript, l’attribut lang sur <html> doit être correct. Vérifiez que le framework ne réinitialise pas la balise <html> à une valeur par défaut (en) lors des transitions de route : c’est un point d’attention fréquent en audit de React ou Vue.