Les étiquettes d’identification de langues IETF (où le sigle désigne l'Internet Engineering Task Force) sont issues d’un code standardisé qui permet d’attribuer des étiquettes structurées et hiérarchisées permettant d’identifier les langues ou familles et collections de langues ou variétés linguistiques de ces langues. Elles peuvent étiqueter tout type de données de localisation dépendantes de la langue et d'autres .
Une liste communément admise en est définie par la recommandation standard BCP 47 () de l’IETF. Cette liste, mise à jour , référence toujours les dernières RFC normatives applicables. Elle en précise la , la définition, la validité et l’utilisation dans les logiciels, et des "synonymies" (c'est à dire des correspondances et équivalences entre étiquettes). Cette recommandation est actuellement composée des (successeur de ) et .
Un registre des éléments utilisables pour la composition des étiquette IETF est maintenu et hébergé par l’IANA (actuellement intégré à l’ICANN).. D’autres RFC, informatives, sont publiées lors de mises à jour majeures du registre mais c'est le registre qui assure pour l’IETF la maintenance des données qu’il contient, en conformité avec les RFC normatives.
Syntaxe Une étiquette de langue complète () est composée de sous-étiquettes (), chacune sur 1 à 8 caractères alphanumériques de 0 à 9 ou de a à z (la casse recommandée est, sauf indication contraire, en minuscules, même si elle est non significative) et séparées par des tirets simples (-). La syntaxe générale (simplifiée) en ABNF correspond à : Language-Tag = Subtag *( "-" Subtag ) Subtag = 1*8alphanum
Cependant une étiquette complète doit correspondre de façon plus précise à l’un des formats définis ci-dessous (liste exhaustive), reconnaissable selon la première sous-étiquette utilisée. Les langues construites sont également codables localement au moyen de la sous-étiquette x. Par exemple, art-x-pandunia peut être utilisé pour le pandunia.
Format standard d'étiquettes Le format standard codifie, dans l’ordre, les ensembles de sous-étiquettes suivants :
Sous-étiquettes pour indiquer et préciser la langue de base Une sous-étiquette de langue (issue normalement de la norme ISO 639 mais inscrite dans le registre IANA dans une entrée Language: de Type:Subtag) : obligatoireC'est donc en pratique une racine, et les autres sous-étiquettes tiennent lieu de suffixes., sur 2 ou 3 lettres (les sous-étiquettes à 4 lettres sont réservées aux extensions futures de la norme ISO 639), ou de 5 à 8 lettres ; quand plusieurs sous-étiquettes existent pour une même langue (ou si une sous-étiquette est rendue obsolète), on utilise normalement la plus courte, les autres sont des alias synonymes (mais non recommandés). Note : des codes langues sont parfois supprimés de l’ISO 639. Cependant pour la stabilité des étiquettes de langues, les sous-étiquettes de langue correspondantes restent valides mais sont dépréciées (le registre mentionne une entrée Deprecated:) ; ces sous-étiquettes gardées pour la compatibilité ascendante peuvent alors éventuellement devenir des alias synonymes d’une autre sous-étiquette de langue, mentionnée dans le registre IANA par une entrée Preferred: mentionnant la nouvelle valeur recommandée à utiliser, si celle-ci est unique (sinon ces sous-étiquettes dépréciées sont à éviter car leur interprétation est ambiguë). Jusqu’à trois sous-étiquettes d’extension de langue (inscrites dans le registre IANA dans une entrée Extlang: de Type:Subtag) : optionnelles, sur 3 lettres chacune. Ces extensions sont spécifiques à la sous-étiquette de langue (qui ne peut être que sur 2 ou 3 lettres) ; depuis la normalisation d’ISO 639-3, ces sous-étiquettes d’extension de langues ne sont plus recommandés et chaque ensemble autorisé de sous-étiquettes (langue de base plus extensions) est devenu un alias synonyme d’un autre code langue ISO 639 normalisé.
Sous-étiquette de précision du système d’écriture utilisé Au plus une seule sous-étiquette d’écriture (issue normalement de la norme ISO 15924 mais inscrite dans le registre IANA dans une entrée Script: de Type:Subtag) : optionnelle, sur 4 lettres (la casse recommandée des lettres est en minuscules sauf la première en majuscule). Toutes les sous-étiquettes possibles ne correspondent pas nécessairement à des langues écrites ou à des écritures déchiffrées, et certaines sous-étiquettes correspondent à des familles d’écritures ou à des variantes graphiques d’un même système d’écriture.
Sous-étiquettes de précision de variétés linguistiques Au plus une seule sous-étiquette de région géographique (normalement issue de la norme ISO 3166-1 mais restreinte aux seuls codes de pays, ou du standard UN M.49 pour les régions internationales à l’exclusion des pays et des régions économiques, mais inscrite dans le registre IANA dans une entrée Region: de Type:Subtag) : optionnelle, sur 2 lettres (la casse recommandée des lettres est en majuscules) ou 3 chiffres ; quand plusieurs sous-étiquettes existent pour un pays ou une région, on utilise normalement la plus courte, les autres sont définies comme des alias synonymes (mais non recommandés). D’éventuelles sous-étiquettes pour coder des variantes dialectales ou orthographiques (spécifiques pour une ou plusieurs langues, inscrites dans le registre IANA dans une entrée Variant: de Type:Subtag et avec l’indication des langues pour lesquelles la variante est applicable avec Prefix:) : de 4 à 8 caractères alphanumériques ou plus chacune (mais 5 caractères minimum si la sous-étiquette ne commence pas par un chiffre de 0 à 9). Certaines de ces sous-étiquettes, utilisées après les sous-étiquettes de langue et ou de région, sont devenues obsolètes et l'ensemble correspondant (langue + région géographique + variantes) a été remplacé par un autre code langue standard, l'ensemble devenant une étiquette synonyme (non recommandée).
Sous-étiquettes d’extension D’éventuels ensembles de sous-étiquettes pour les extensions normalisées : 1 seule lettre (sauf x) dans la première sous-étiquette dite « singleton » pour coder le type d’extension normalisée (inscrite dans le registre IANA avec dans une entrée Singleton: de Type:Subtag), et de 2 à 8 caractères alphanumériques dans la (ou les) sous-étiquette(s) suivante(s) pour coder des valeurs qui seront interprétées selon le type d’extension normalisée ; les extensions normalisées peuvent être réordonnées automatiquement ensemble par ensemble (préférablement dans l’ordre ascendant des types d’extension), mais ne doivent apparaître qu’une seule fois (si nécessaire, on codera plusieurs sous-étiquettes successives dans la même extension). Les sous-étiquettes après le singleton initial obéissent à une syntaxe et un ordre spécifique à chaque type d’extension. Notes : Depuis la normalisation d’ISO 639-3, les sous-étiquettes géographiques ne sont plus recommandées pour la représentation des langues humaines et variétés dialectales (mais continuent à être utilisées pour coder des préférences de localisation autres que la seule langue) ; Un type d’extension normalisée a été réservé par le Consortium Unicode afin d’ajouter des données de localisation autres que la seule langue (notamment pour le projet CLDR, par exemple une convention de tri ou l’indication d’un format de dates ou de nombres) ; elle utilise la sous-étiquette de type d’extension « u » (dans l’état actuel de la normalisation, ce type d’extension ne devrait pas être encore utilisé sur Wikipédia) ; Un autre type d’extension normalisée a été réservé aussi par le Consortium Unicode afin d’ajouter des données indicatrices d’une transformation de texte (utilisée aussi pour le projet CLDR, par exemple une restriction de méthode d’entrée ou la mention de l’écriture d’origine d’une translittération et l’identification de la méthode utilisée) ; elle utilise la sous-étiquette de type d’extension t. Une éventuelle extension d’utilisation privée (private use, non inscrite dans le registre IANA) : la sous-étiquette constante « x », suivie d'une ou plusieurs sous-étiquettes de 1 à 8 caractères alphanumériques, destinées à coder des variantes dialectales et orthographiques non normalisées ou d’autres types de données de localisation de nature non linguistique (ce type d’extension privé ne devrait pas être utilisé sur Wikipédia).
Ancien format d’étiquettes dans le registre IANA Un ancien format utilisé dans le registre IANA a servi à coder des langues qui étaient alors non mentionnées dans la norme ISO 639. Cet ancien format se compose des sous-étiquettes suivantes : La sous-étiquette constante « i » (pour le registre « IANA ») ; Une ou plusieurs autres sous-étiquettes, chacune sur 1 à 8 caractères alphanumériques (obligatoirement inscrites dans le registre IANA dans une entrée Language: avec Type:Tag), pour coder ensemble (et dans l’ordre mentionné dans le registre) une langue spécifique.
Ces étiquettes historiques sont encore valides, mais sont devenues des alias synonymes (non recommandés) d'une étiquette au format standard : toutes les langues qui étaient auparavant représentées dans le registre IANA uniquement avec des étiquettes dans ce format sont aujourd’hui maintenant représentables avec une étiquette au format standard mentionnée dans le registre lui-même (cet ancien format ne devrait plus être utilisé sur Wikipédia).
Format d’étiquettes d’utilisation privée Le format d’utilisation privé (private use, non inscrit dans le registre IANA), se compose des sous-étiquettes suivantes : La sous-étiquette constante « x » (pour « eXtension privée ») ; Une ou plusieurs autres sous-étiquettes, de 1 à 8 caractères alphanumériques chacune (non inscrites dans le registre IANA) pour coder une information privée (pas nécessairement pour identifier une langue).
Le format standard inclut aussi toutes les sous-étiquettes d’utilisation privée, définies pour les langues, familles et collections de langues, pour les systèmes, styles ou familles d’écriture, et pour les régions géographiques (provenant des normes ISO où elles ont été définies en tant qu’identifiants avant d’être importées dans le registre IANA), ainsi que des sous-étiquettes d’extension.
Ce format devrait être évité sur la plupart des sites Internet pour identifier des langues (y compris dans les pages Wikipédia, en dehors de certaines utilisations internes invisibles au lecteur et indépendantes des logiciels utilisés) car il ne permet pas l’interopérabilité sans convention préalable reconnue et acceptée à la fois par le lecteur et l’auteur de ces contenus. L’utilisation de telles étiquettes est plutôt réservée à d’autres usages spécifiques (et généralement locaux pour certains traitements internes) que la simple identification des langues.
Autres formats réservés d’étiquettes Toute autre étiquette qui ne répond pas à un des formats ci-dessus ne doit pas être utilisée (même si elle répond à la syntaxe ABNF générale), car cela reste réservé pour le support éventuel de normes futures et leur intégration dans une mise à jour future de la recommandation BCP 47.
Utilisation Les étiquettes d’identification de langues IETF permettent de faire référence à une langue ou une variété spécifique de cette langue, de catégoriser linguistiquement des données ou leur appliquer des traitements spécifiques (que ce soit pour la classification des contenus, leur rendu final, ou diverses transformations).
Leurs utilisations les plus connues en informatique sont les protocoles et standards de l’IETF (tels que HTTP, le courrier électronique et ses extensions MIME), du W3C (tels que HTML, XML, CSS), du Consortium Unicode (le standard Unicode lui-même dans ses bases de données normatives ou informative, ou le projet CLDR), ainsi que certains bureaux d’enregistrement de ces protocoles (dont les registres de noms de domaine pour l’internationalisation des noms de domaine), et les standards de langages informatiques (notamment ceux de l’ANSI et d’Ecma International).