<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  <head>
    <title>Openweb.eu.org - Spécifier la langue d'un document (X)HTML</title>
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
    <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
    <meta name="DC.Language" scheme="RFC3066" content="fr" />
    <meta name="DC.Identifier" content="specifier_langue" />
    <meta name="DC.Creator" content="Laurent Denis, Elie Sloïm" />
    <meta name="DC.Date.created" scheme="W3CDTF" content="2005-02-10" />
    <meta name="DC.Date.modified" scheme="W3CDTF" content="2005-02-10" />
    <meta name="DC.Subject" content="expert, debutant, gourou, xhtml" />
  </head>
  <body>
    <h1>Spécifier la langue d'un document (X)HTML</h1>
    <ul>
      <li>
        <strong>Profil :</strong> <a href="/expert/">Expert</a>, <a href="/debutant/">Débutant</a>, <a href="/gourou/">Gourou</a>
      </li>
      <li>
        <strong>Technologie :</strong> <a href="/xhtml/">(X)HTML</a>
      </li>
      <li>
        <strong>Auteur :</strong> Laurent Denis</li>
      <li>
        <strong>Auteur :</strong> Elie Sloïm</li>
      <li>
        <strong>Mise à jour :</strong> 10/02/2005</li>
    </ul>
    <h2>En bref</h2>
    <p>Entre les attributs HTML, les éléments meta et les en-têtes HTTP, les moyens de spécifier la ou les langue(s) d'une page Web ne manquent pas. Mais la pratique montre l'existence de deux besoins bien différents en la matière : il importe de différencier langue primaire d'une ressource Web et langue de traitement d'un contenu, et d'utiliser à bon escient les outils à notre disposition pour les indiquer.
	</p>
    <hr />
    <p>De nombreuses sources encouragent les auteurs à préciser la langue de leur document : les <a href="http://www.w3.org/TR/WAI-WEBCONTENT/#gl-abbreviated-and-foreign">directives d'accessibilité</a>, les <a href="http://www.opquast.com/bonnes-pratiques/fiche/?id=13">bonnes pratiques qualités</a>, les <a href="http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang">spécifications <acronym title="(eXtensible) HyperText Markup Language" lang="en">(X)HTML</acronym>
      </a>, les <a href="http://www.w3.org/International/questions/qa-lang-why">conseils pour l'internationalisation</a>, l'optimisation du reférencement, etc. Le plus souvent, cette démarche semble d'autant plus simple que le document est rédigé dans une langue unique, ou comporte tout au plus quelques citations dans une autre langue. Cependant, même dans ces cas simples, ce sont en fait deux notions bien distinctes qui sont à l'oeuvre : les langues primaires de la ressource et les langues de traitement de son contenu. Toutes deux répondent à des problématiques opérationnelles différentes, que nous allons analyser ici. Nous pourrons alors déterminer quelles sont les techniques appropriées pour communiquer efficacement ces deux types d'informations aux agents utilisateurs, en précisant également les normes de codification des langues qui assureront la pertinence de ces informations.</p>
    <h3>Pourquoi spécifier la langue ?</h3>
    <p>Les informations de langue sont couramment jugées utiles à de multiples points de vue.</p>
    <p>Par exemple, il est possible de servir un contenu différent à un utilisateur « à la demande », en fonction de la configuration de son client Web : on peut donc prévoir plusieurs versions linguistiques d'un même document et délivrer ce contenu en fonction des préférences de chaque utilisateur. L'ensemble de ces versions forme une ressource unique, caractérisée par la liste des langues dans lesquelles elle est disponible.</p>
    <p>De même, il peut s'agir de faciliter et d'améliorer la précision du référencement d'une ressource dans des bases de données documentaires, dans des annuaires ou auprès de moteurs de recherche. Là encore, plusieurs langues peuvent éventuellement être associées à une seule ressource, afin d'indiquer que celle-ci est disponible pour différents publics linguistiques.</p>
    <p>Dans ces deux premiers cas, l'information de langue ne porte donc pas nécessairement sur une langue unique. Elle donne d'autre part une indication globale sur la ressource Web prise dans son ensemble, et non sur le détail de son contenu.</p>
    <p>Dans d'autres cas, en revanche, c'est à l'intérieur même du document que l'on va rencontrer des changements de langue d'une section à une autre, chaque section étant caractérisée par une langue unique. L'agent utilisateur devra alors être informé de ces changements, afin de restituer le contenu de la façon la plus juste et la plus compréhensible possible. Ce sera le cas, par exemple, dans les contextes suivants:</p>
    <ul>
      <li>Les navigateurs vocaux (<acronym>IBM</acronym> Home Page Reader 3.+, EmacSpeak, le futur Opera 8), ainsi que les lecteurs d'écrans (Jaws 5+,  Windows-Eyes) doivent déterminer dans quelle langue le synthétiseur vocal doit travailler pour adapter la prononciation de manière à rendre compréhensibles tous les termes lus. Les informations de langue leur permettront de passer d'une langue à l'autre à la volée lors de la lecture, sans intervention de l'utilisateur ;</li>
      <li>Les correcteurs orthographiques doivent déterminer quel dictionnaire utiliser pour les différents termes présentés dans les documents qui leur sont soumis. Là encore, la précision avec laquelle les changements de langue seront indiqués influera fortement sur la qualité du résultat ;</li>
      <li>Les traducteurs ont des besoins similaires, pour déterminer quels termes doivent être traduits et en quelle langue : il est inutile de traduire des termes déjà signalés dans la langue cible ;</li>
      <li>Les navigateurs graphiques peuvent avoir à fournir une présentation spécifique d'un contenu selon sa langue : choix d'une police de caractères, de l'orientation gauche-droite ou inversement, voire d'autres styles mettant en valeur un passage dans une langue donnée.</li>
    </ul>
    <p>Cette fois, l'information de langue est contextuelle, et porte à chaque fois sur une langue unique : un terme à prononcer, à traduire ou à corriger appartient à une langue et à une seule.</p>
    <p>Ce rapide examen de quelques cas courants nous montre donc que nous avons besoin de délivrer deux types d'informations de langue bien distinctes. Il est temps à présent de les définir précisément.</p>
    <h3>Langue primaire et langue de traitement</h3>
    <p>La langue primaire du document constitue en fait une <em>métadonnée</em>. Elle renseigne sur le document « pris comme un tout », et non sur telle ou telle partie de son contenu. Malgré <a href="http://www.w3.org/TR/html401/struct/dirlang.html#h-8.1.2">l'ambiguïté de la norme <acronym title="HyperText Markup Language" lang="en">HTML</acronym>4.01</a> sur ce point, cette information n'est pas destinée au traitement du contenu,  mais à celui de la page en tant que <a href="http://www.w3.org/TR/2004/REC-webarch-20041215/#def-resource">ressource Web</a>, lorsqu'il s'agit par exemple d'adresser une version linguistique à l'utilisateur en fonction de ses préférences (autrement dit une <a href="http://www.w3.org/TR/2004/REC-webarch-20041215/#dereference-details">représentation de la ressource parmi celles disponibles</a>), ou d'indexer une ressource selon une langue de référence. On peut retenir comme règle que la ou les langues primaires du document désignent la ou les langues du public visé.</p>
    <p>La langue de traitement du contenu, en revanche, est une donnée contextuelle qui va permettre aux agents utilisateurs de traiter le contenu de manière correcte. Ce contenu n'a qu'une seule langue de traitement, quel que soit ce dernier (synthèse vocale, affichage, traduction, etc.)</p>
    <p>Prenons quelques exemples pour bien percevoir la nature de cette distinction :</p>
    <ul>
      <li>Un même article est publié dans deux versions linguistiques (autrement dit, deux <em>représentations</em> de la même <em>ressource</em>)  : l'une est en français et l'autre en anglais. Cet article cite sans le traduire un auteur espagnol. Notre article a donc deux langues primaires : le français et l'anglais. L'indication de celles-ci devra permettre à un moteur de recherche de présenter notre article dans ses résultats, que l'utilisateur ait coché l'option « Rechercher les pages en français » ou « Rechercher les pages en anglais », et de l'ignorer en revanche s'il ne cherche que des documents en allemand. Enfin, le fait que l'article comporte une citation en espagnol ne le rend pas pertinent dans les recherches citées ci-dessus, mais ce changement de langue devra être signalé à un traducteur automatique : cette information doit donc être précisée à un autre niveau que les précédentes ;</li>
      <li>Une page d'accueil est bilingue, avec deux sections identiques, l'une en anglais et l'autre en français : cette page d'accueil a également deux langues primaires, l'anglais et le français. Elle devient pertinente aux yeux d'un moteur de recherche aussi bien pour un utilisateur francophone qu'anglophone. Par ailleurs, lors de sa lecture par une synthèse vocale, l'application utilisée devra basculer d'une langue à l'autre au bon moment. Là encore, et bien qu'il s'agisse toujours des mêmes langues, ces informations linguistiques doivent être précisées à des niveaux différents </li>
      <li>Une page d'un site francophone cite des sources anglo-saxonnes sans les traduire : sa langue primaire reste le français, car elle ne s'adresse pas à un public non francophone. Elle comporte cependant deux langues de traitement successives au fil du contenu. Si un lecteur anglo-saxon fait appel à un traducteur automatique, seules les sections en français devront être prises en compte et traitées par celui-ci ;</li>
      <li>L'article que vous lisez actuellement n'existe que dans une seule version linguistique (le français) et ne comporte pas de citations dans une autre langue: sa langue primaire est identique à sa langue de traitement unique. Il reste utile, même dans ce cas, de préciser ces deux informations afin que la page soit correctement indexée par un moteur de recherche et puisse être correctement lue par un lecteur d'écran, ou traduite automatiquement.</li>
    </ul>
    <p>Cette distinction étant à présent établie, quels sont les moyens appropriés pour préciser ces deux informations ?</p>
    <h3>Quelles techniques sont à notre disposition pour transmettre les différentes informations de langue ?</h3>
    <p>Plusieurs mécanismes distincts permettent de transmettre une information de langue concernant un contenu <acronym>HTML</acronym> : l'en-tête <acronym title="HyperText Transfer Protocol" lang="en">HTTP</acronym> envoyée par le serveur, les éléments de metadonnées contenus dans la page, et enfin les attributs <code>lang</code> et <code>xml:lang</code> qui sont également indiqués dans le document lui-même.</p>
    <ul>
      <li>
        <p>
          <em>L'en-tête <acronym>HTTP</acronym>
            <code>Content-Language</code>
          </em> : cette donnée est gérée et envoyée au niveau même du serveur. Le champ d'en-tête <acronym>HTTP</acronym> est défini dans  <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.12">
            <acronym>HTTP</acronym>1.1</a> en ces termes :</p>
        <blockquote>
          <p>Le champ d'entête-entité <code>Content-Language</code> décrit la ou les langue(s) naturelle(s) du public visé par l'entité incluse. Il faut noter que ceci pourrait ne pas correspondre à toutes les langues utilisées dans le corps de l'entité.</p>
          <pre>Content-Language  = "Content-Language" ":" 1#language-tag</pre>
          <p>[...] Le rôle essentiel de <code>Content-Language</code> est de permettre à un utilisateur d'identifier et de différencier des entités en fonction de ses propres préférences linguistiques. Ainsi, si le contenu du corps de l'entité est destiné uniquement à un public comprenant le danois, le champ approprié sera <code>Content-Language: da</code>
          </p>
          <p>Lorsqu'aucun champ <code>Content-Language</code> n'est spécifié, l'indication donnée par défaut est que ce contenu est destiné à tous les publics, quelque-soit leur langue. Ceci peut signifier soit que l'expéditeur ne considère pas ce contenu comme étant propre à quelque langue naturelle que ce soit, soit qu'il ignore à quel public linguistique il est destiné.</p>
          <p>Plusieurs langues PEUVENT être énumérées pour des publics multiples. Par exemple, une reproduction du "Traité de Waitangi", présentée simultanément dans les versions originales en maori et en anglais, fera appel à <code>Content-Language: mi, en</code>
          </p>
          <p>Cependant, le seul fait que plusieurs langues soient présentes dans une entité n'induit pas que celle-ci soit destinée à un public multilingue. Par exemple, une initiation pour débutants du type "Première leçon de latin" serait clairement destinée à un public francophone. Dans un tel cas, le champ <code>Content-Language</code> approprié ne précisera que la valeur "fr".</p>
        </blockquote>
      </li>
      <li>
        <em>La métadonnée <code>&lt;meta http-equiv="Content-Language"&gt;</code>
        </em> : cette information permet d'indiquer dans le document la même information que celle transmise dans l'entête <acronym>HTTP</acronym>.</li>
      <li>
        <p>
          <em>Les attributs <code>lang</code> et <code>xml:lang</code>
          </em> : Ces informations sont indiqués dans le document lui-même pour les différents éléments <acronym>(X)HTML</acronym> qui le composent. Les valeurs possibles de l'attribut <code>lang</code> sont définies par <a href="http://www.w3.org/TR/html401/struct/dirlang.html#langcodes">la spécification <acronym>HTML</acronym>4.01</a> sous la forme :</p>
        <blockquote>
          <p>La valeur de l'attribut <code>lang</code> est un code de langue qui identifie une langue parlée, écrite, ou utilisée d'une manière ou d'une autre pour la communication d'informations entre personnes.</p>
        </blockquote>
      </li>
    </ul>
    <p>Pour déterminer quels outils conviennent pour préciser respectivement langue primaire et langue de traitement, la clé est le fait que la langue de traitement du contenu est unique, alors que les langues primaires ne le sont pas nécessairement. Or :</p>
    <ul>
      <li>En-tête <acronym>HTTP</acronym>
        <code>Content-Language</code> et <code>meta</code> autorisent la mention de plusieurs langues;</li>
      <li>les attributs <code>lang</code> et <code>xml:lang</code> n'admettent qu'une valeur unique.</li>
    </ul>
    <p>Nous pouvons donc adopter à partir de ce constat des règles de bonnes pratiques simples.</p>
    <h3>Comment spécifier la ou les langues primaires d'un document</h3>
    <p>La ou les langues primaires d'une ressource seront indiquées via l'entête <acronym>HTTP</acronym>
      <code>Content-Language</code> :</p>
    <pre>Content-Language: fr
Content-Language: fr,en</pre>
    <p>Cette information sera reproduite via un élément <code>meta</code> :</p>
    <ul>
      <li>La traditionnelle <code>meta http-equiv="Content-Language" content="fr" /&gt;</code> </li>
      <li>Eventuellement complétée par une <code>meta</code> plus spécifique, telle que, par exemple, le <a href="http://www.openweb.eu.org/articles/dublin_core/">Dublin Core</a> qui définit la <code>&lt;meta name="DC.Language" scheme="RFC3066" content="fr" /&gt;</code>.</li>
    </ul>
    <p>Ceci garantit la permanence de l'information, que le document soit consulté en ligne ou après enregistrement local.</p>
    <p>Notons que si plusieurs langues primaires doivent être indiquées, elles sont séparées dans tous les cas par des virgules, les espaces n'étant pas significatifs :</p>
    <pre>&lt;meta http-equiv="Content-Language" content="fr,en" /&gt;</pre>
    <h3>Spécifier la langue de traitement d'un contenu</h3>
    <p>L'élément <code>html</code> étant l'élément racine de tout document <acronym>HTML</acronym>, tout ce qu'il contient hérite par défaut de la valeur de ses attributs <code>lang</code> et/ou <code>xml:lang</code>. Tout le contenu de la page (<code>title</code> et autres <code>meta</code> compris) sera donc réputé être dans la langue ainsi indiquée, sauf précision contraire. On écrira donc :</p>
    <ul>
      <li>
        <p>En <acronym>HTML</acronym> (type de contenu <code>text/html</code>) :</p>
        <pre>&lt;html lang="fr"&gt;</pre>
      </li>
      <li>
        <p>En <acronym title="eXtensible HyperText Markup Language" lang="en">XHTML</acronym> traité en tant que <acronym>HTML</acronym> (type de contenu <code>text/html</code>) :</p>
        <pre>&lt;html lang="fr" xml:lang="fr" ...&gt;</pre>
      </li>
      <li>
        <p>En <acronym>XHTML</acronym> traité en tant que <acronym title="eXtensible Markup Language" lang="en">XML</acronym> (type de contenu <code>application/xhtml+xml</code>) :</p>
        <pre>&lt;html xml:lang="fr" ... &gt;</pre>
      </li>
    </ul>
    <p>Si une section quelconque du contenu a une langue différente, il suffit de l'indiquer dans les attributs <code>lang</code> et <code>xml:lang</code> de son élément conteneur. Par exemple, pour une citation en anglais dans un document en français :</p>
    <ul>
      <li>
        <p>En <acronym>HTML</acronym> (type de contenu <code>text/html</code>) :</p>
        <pre>&lt;q lang="en"&gt;...&lt;/q&gt;</pre>
      </li>
      <li>
        <p>En <acronym>XHTML</acronym> traité en tant que <acronym>HTML</acronym> (type de contenu <code>text/html</code>) :</p>
        <pre>&lt;q lang="en" xml:lang="en"&gt;...&lt;/q&gt;</pre>
      </li>
      <li>
        <p>En <acronym>XHTML</acronym> traité en tant que <acronym>XML</acronym> (type de contenu <code>application/xhtml+xml</code>) :</p>
        <pre>&lt;q xml:lang="en"&gt;...&lt;/q&gt;</pre>
      </li>
    </ul>
    <p>Rappelons que l'attribut <code>xml:lang</code> est l'équivalent <acronym>XML</acronym> de l'attribut <acronym>HTML</acronym>
      <code>lang</code>. Pour <a href="http://www.la-grange.net/w3c/xhtml1/#guidelines">des raisons de compatibilité</a>, la spécification <acronym>XHTML</acronym> conseille d'utiliser simultanément les deux attributs lorsqu'on tire profit de la nature hybride du <acronym>XHTML</acronym>1.0 (à la fois <acronym>HTML</acronym> et <acronym>XML</acronym>) pour le servir avec le type de contenu <code>text/html</code>.</p>
    <p>Les attributs <code>lang</code> et <code>xml:lang</code> peuvent être utilisés pour tous les éléments <acronym>HTML</acronym>, à l'exception de :</p>
    <ul>
      <li>
        <code>applet</code>, <code>base</code>, <code>basefont</code>, <code>br</code>, <code>param</code> et <code>frameset</code> pour lesquels il serait dénué de sens ;</li>
      <li>
        <code>frame</code>, <code>script</code>, et <code>iframe</code>. Dans ces cas, la langue de traitement du contenu inclus dans un cadre ou généré par un script ne peut être déclarée qu'à l'intérieur du document incorporé ou du code produit par le script, et non au niveau du document parent.</li>
    </ul>
    <p>En l'absence d'un balisage spécifique et/ou d'attributs <code>lang</code> - <code>xml:lang</code> valides pour le conteneur (<code>iframe</code> par exemple), les éléments génériques <code>div</code> et <code>span</code> permettent de préciser un changement de langue en regroupant plusieurs éléments :</p>
    <pre>&lt;div lang="en"&gt;
   &lt;p&gt;...&lt;/p&gt;
   &lt;ul&gt;
      &lt;li&gt;...&lt;/li&gt;
      &lt;li&gt;...&lt;/li&gt;
   &lt;/ul&gt;
&lt;/div&gt;</pre>
    <p>Enfin, les attributs <code>lang</code> et <code>xml:lang</code> s'appliquent aussi bien au contenu des éléments <acronym>(X)HTML</acronym> qu'à celui de leurs attributs, comme le montre <a href="http://www.opquast.org/forum/read.php?6,1858,1858#msg-1858">cet exemple donné pour l'élément <code>link</code> par la spécification <acronym>HTML</acronym>4.01</a> :</p>
    <pre>&lt;link lang="en"
title="english version"
type="text/html"
rel="alternate"
hreflang="en"
href="http://example.org/english_doc.html"&gt;</pre>
    <p>Par défaut, la langue d'un attribut <acronym>XHTML</acronym> est donc celle de son élément. Il est impossible de préciser que la langue du contenu d'un attribut est différente de celle de l'élément concerné. Ceci concernerait concrètement par exemple :</p>
    <pre>&lt;q lang="en" title="Ici, une information français"&gt;
Some english text
&lt;/q&gt;</pre>
    <p>On évitera donc ce type de conflit en rédigeant dans la même langue le contenu de l'élément et celui de ses attributs.</p>
    <h3>Quel standard adopter pour la désignation des langues ?</h3>
    <p>La spécification <acronym>HTML</acronym>4.01 fait actuellement référence à <a href="http://www.ietf.org/rfc/rfc1766.txt">la norme <acronym title="Request For Comment" lang="en">RFC</acronym>1766</a> pour la désignation des langues. Celle-ci a cependant été actualisée par <a href="http://www.ietf.org/rfc/rfc3066.txt">la norme <acronym>RFC</acronym>3066</a> qui doit donc être prise comme référence.</p>
    <p>Concrètement, on utilisera un <a href="http://www.loc.gov/standards/iso639-2/langcodes.html">code de langue <acronym title="International Standard Organization" lang="en">ISO</acronym>639</a>, du type <code>en</code> (anglais). Alors que <acronym>ISO</acronym>639-1 limitait à deux caractères les codes de langues, (soit 676 langues au plus), <acronym>ISO</acronym>639-2 étend à 3 le nombre de caractères des codes de langues (soit 17 576 codes possibles). Pour maintenir la compatibilité des documents antérieurs à <acronym>ISO</acronym>639-2 et garantir l'unicité des codes de langues utilisés, <a href="http://www.ietf.org/rfc/rfc3066.txt">
        <acronym>RFC</acronym>3066</a> fixe les règles suivantes :</p>
    <ul>
      <li>Pour certaines langues, dont le français, <acronym>ISO</acronym>639 propose simultanément un code à 2 caractères et un ou deux codes à 3 caractères. On doit alors utiliser <em>uniquement le code à deux caractères</em> : <code>fr</code>, et non les codes bibliographiques (<code>fre</code>) et terminologiques (<code>fra</code>) à 3 caractères ;</li>
      <li>Pour d'autres langues, comme l'écossais, il n'existe pas de code à 2 caractères. On utilisera alors le code à 3 caractères: <code>sco</code> (il n'y a dans ce cas qu'un seul code à 3 caractères disponible).</li>
      <li>Lorsqu'une langue a à la fois un code <acronym>ISO</acronym> et un code défini par l'<acronym>IANA</acronym> sous la forme <code>i-foo</code>, seul le code <acronym>ISO</acronym> doit être utilisé. Le code <acronym>IANA</acronym> est alors considéré comme déprécié. C'est le cas par exemple pour le klingon, qui ne doit pas être désigné par <a href="http://www.iana.org/assignments/lang-tags/i-klingon">i-klingon</a>, mais par son code <acronym>ISO</acronym>
        <code>tlh</code>.</li>
    </ul>
    <p>Dans tous les cas, il est indispensable de consulter le <a href="http://www.loc.gov/standards/iso639-2/frenchlangn.html">tableau de référence des codes <acronym>ISO</acronym>639</a> tenu à jour par la Bibliothèque du Congrès des Etats-Unis, qui en a officiellement la charge.</p>
    <p>Ce code de langue peut être éventuellement suivi d'un ou plusieurs <a href="http://www.iso.org/iso/fr/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">codes secondaires de pays (<acronym>ISO</acronym>3166)</a>, séparés par un tiret, du type <code>en-US</code> (anglais - Etats-Unis). Ce mécanisme est cependant <a href="http://www.w3.org/International/tutorials/tutorial-lang/Overview.en.html#specifying">d'une portée limitée</a>, car il ne permet pas d'indiquer de nombreuses variantes linguistiques régionales (l'espagnol latino-américain exemple).</p>
    <p>L'ensemble de ces codes sont indifférents à la casse selon <a href="http://www.ietf.org/rfc/rfc3066.txt">
        <acronym>RFC</acronym>3066</a>. <acronym>ISO</acronym>639 recommande (sans en faire une obligation) l'écriture des codes de langue en minuscules, tandis que l'usage est d'utiliser des majuscules pour les codes de pays.</p>
    <p>D'autre part, certains auteurs sont parfois tentés de créer leurs propres codes de langue, ou de détourner le mécanisme de spécification de la langue pour faire référence à des données non linguistiques. Il s'agit fréquement d'une indication d'un langage de programmation, du type <code>lang="PHP"</code>. Ces détournements sont dénués de sens : <a href="http://www.w3.org/TR/html401/struct/dirlang.html#langcodes">
        <acronym>HTML</acronym>4.01</a> précise en effet clairement que <q>les langages informatiques sont explicitement exclus des codes de langue.</q>
    </p>
    <p>Notons enfin que deux codes de langues génériques, <code>mul</code> (Multilingue) et <code>und</code> (Langue indéterminée) n'ont pas lieu d'être utilisés en <acronym>(X)HTML</acronym>. <acronym>RFC</acronym>3066 précise en effet que :</p>
    <ul>
      <li>
        <code>mul</code> ne doit pas être utilisé lorsque le protocole concerné autorise l'utilisation d'une série de codes linguistiques, ce qui est le cas de l'en-tête <acronym>HTTP</acronym> Content-Language (comme indiqué ci-dessus, les valeurs doivent alors être séparées par des virgules) ;</li>
      <li>
        <code>und</code> ne doit pas être utilisé lorsqu'il est possible d'omettre la mention de la langue, ce qui est le cas en <acronym>(X)HTML</acronym>. Notons à ce propos qu'en <acronym>XHTML</acronym> traité en tant que <acronym>XML</acronym>, un attribut vide <code>xml:lang=""</code> signifie qu'aucune langue n'est attribuable à l'élément concerné, annulant de ce fait la langue spécifiée à un niveau supérieur.</li>
    </ul>
  </body>
</html>
