La langue d'un EPUB intervient dans la prononciation des lecteurs d'écran, la sélection des voix, la césure, les dictionnaires, le classement en librairie et certaines fonctions de recherche. Pourtant, elle est souvent déclarée à un seul endroit, parfois avec une valeur approximative comme FR, français ou fr_FR.

Un EPUB contient plusieurs niveaux de langue. Les confondre explique une grande partie des alertes.

Les trois niveaux à distinguer

dc:language décrit la langue de la publication. xml:lang peut décrire la langue des métadonnées du paquet. Chaque fichier XHTML doit déclarer sa propre langue avec les attributs adaptés. La langue du contenu n'est pas automatiquement héritée de dc:language.

Le rôle de dc:language

Dans les métadonnées du paquet EPUB, l'élément dc:language indique la langue du contenu de la publication :

<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
  <dc:language>fr</dc:language>
</metadata>

EPUB 3 exige au moins un élément dc:language. Sa valeur doit être une balise de langue BCP 47 bien formée.

Pour une publication multilingue, plusieurs éléments sont possibles. Le premier est traité comme langue principale par les systèmes de lecture :

<dc:language>fr</dc:language>
<dc:language>en</dc:language>

N'ajoutez plusieurs langues que si elles décrivent réellement la publication. Quelques citations en anglais dans un livre français ne rendent pas nécessairement le livre bilingue.

Choisir une balise BCP 47 correcte

La forme la plus simple est un code de langue :

  • fr pour le français ;
  • en pour l'anglais ;
  • es pour l'espagnol.

Une région peut être ajoutée lorsqu'elle est utile :

  • fr-FR pour le français de France ;
  • fr-CA pour le français du Canada ;
  • es-AR pour l'espagnol d'Argentine ;
  • en-GB pour l'anglais britannique.

Évitez :

  • fr_FR : le séparateur est un souligné au lieu d'un tiret ;
  • FR-fr : l'ordre langue-région est inversé ;
  • French ou français : ce ne sont pas des balises BCP 47 ;
  • une région trop précise sans raison éditoriale.

Le message EPUBCheck OPF-092 signifie qu'une balise n'est pas bien formée. Le détail du message indique la valeur fautive. Le souligné est un cas fréquent, pas la seule cause possible.

La langue des fichiers XHTML

La valeur dc:language n'est pas transmise automatiquement aux chapitres. Chaque document de contenu doit porter une déclaration sur son élément racine.

Pour un document XHTML d'un EPUB, une forme courante et robuste est :

<html xmlns="http://www.w3.org/1999/xhtml"
      lang="fr"
      xml:lang="fr">

Les deux valeurs doivent être identiques. Les outils et systèmes de lecture ne s'appuient pas tous sur le même attribut, d'où l'intérêt de conserver les deux dans un EPUB XHTML.

Vérifiez tous les documents : chapitre, introduction, notes, bibliographie, page de titre et navigation. Une langue présente sur le premier chapitre mais absente ailleurs ne résout pas l'ensemble du problème.

Signaler un changement de langue dans le texte

Si un passage change de langue, marquez uniquement le fragment concerné :

<p>Elle lui répondit :
  <span lang="en" xml:lang="en">See you tomorrow.</span>
</p>

Cette information permet notamment à un lecteur d'écran de changer de prononciation. Inutile de baliser chaque nom propre étranger : marquez les passages dont la langue de lecture change réellement.

La langue des métadonnées du paquet

Le document OPF contient aussi du texte : titre, description, nom de collection. L'attribut xml:lang sur l'élément package peut fournir une langue par défaut pour ces valeurs :

<package xmlns="http://www.idpf.org/2007/opf"
         version="3.0"
         unique-identifier="pub-id"
         xml:lang="fr">

Une métadonnée rédigée dans une autre langue peut recevoir son propre xml:lang :

<dc:title xml:lang="en">The Glass Shore</dc:title>

Cette langue de métadonnée ne remplace pas dc:language, qui décrit la langue du contenu publié.

Interpréter les résultats Prism

La fiche et l'EPUB ne déclarent pas la même langue

Décidez d'abord quelle information est correcte pour cette édition. Corrigez la fiche de référence si elle est erronée, ou l'OPF si l'EPUB porte une ancienne valeur. L'objectif est la cohérence de l'édition, pas le remplacement automatique de l'une par l'autre.

La langue manque dans l'EPUB

Ajoutez un dc:language bien formé, puis contrôlez les fichiers XHTML. Corriger uniquement le paquet peut laisser les lecteurs d'écran sans indication exploitable dans les chapitres.

Prism estime que le texte est dans une autre langue

Une estimation automatique peut se tromper : citations nombreuses, index, poésie, texte très court ou publication multilingue. Vérifiez manuellement avant de modifier le livre.

Ace signale html-has-lang

Un ou plusieurs documents ne déclarent pas leur langue. Localisez les fichiers indiqués, corrigez leur élément <html>, puis relancez Ace et ouvrez le livre avec une technologie d'assistance si possible.

Procédure de correction

  1. Décidez la langue principale de l'édition.
  2. Choisissez la balise BCP 47 la moins complexe qui décrit correctement cette langue.
  3. Mettez à jour dc:language dans l'OPF.
  4. Vérifiez lang et xml:lang sur chaque fichier XHTML.
  5. Marquez les changements de langue significatifs à l'intérieur du contenu.
  6. Relancez EPUBCheck et Ace.
  7. Contrôlez la fiche transmise aux distributeurs et librairies.

Ne pas automatiser la décision éditoriale

Une différence entre fr et fr-FR n'a pas toujours la même signification qu'une différence entre fr et en. Prism peut montrer l'écart ; la personne responsable du livre doit décider quelle granularité décrit réellement l'édition.

Sources officielles