La tecla de acceso 'n' lleva a la navegación de la página. Ir al inicio del contenido.

Este documento es una traducción. En caso de discrepancias o errores, la única versión normativa es el último original en inglés. Los derechos de autor originales corresponden al W3C, como puede verse al final de la página.

Traductor: Spanish Translation Team, Trusted Translations, Inc.

s_gotoW3cHome Internacionalización
 

Etiquetas de idioma en HTML y XML

Audiencia de destino: Creadores de contenido XHTML/HTML (ya sea que para su creación usen editores o lenguajes de secuencia de comandos), programadores de secuencias de comandos (PHP, JSP, etc.), creadores de esquemas (DTD, XML Schema, RelaxNG, etc.) o de plantillas XSLT, directores de proyectos para la Web, implementadores de estándares y todo aquel que necesite ayuda en relación con la construcción de los valores de las etiquetas de idioma.

Terminología: En este artículo nos referiremos al valor de un atributo de idioma, por ejemplo fr-CA, como una etiqueta de idioma. Los componentes fr y CA se denominan subetiquetas cuando se los describe como partes de una etiqueta. Cuando se los describe como miembros de una lista ISO de idiomas o países, fr y CA se denominan códigos.

Las etiquetas de idioma pueden (y deberían) emplearse para indicar el idioma en el que está escrito el texto en documentos HTML y XML. En HTML 4, las etiquetas de idioma se indican en el atributo lang. En XML, las etiquetas de idioma se indican en el atributo xml:lang. En ambos casos, la información sobre el idioma se hereda por toda la jerarquía del documento; es decir, basta indicarla una sola vez, si todo el documento está escrito en un solo idioma; pero el idioma se puede modificar allí donde atributos interiores sustituyan el valor de atributos exteriores.

La sintaxis de las etiquetas de idioma se encuentra definida en la BCP 47 de la IETF. BCP significa 'Best Current Practise' (mejor práctica actual) y es un nombre duradero para una serie de RFC cuyos números cambian conforme se actualizan. El último RFC donde se describe la sintaxis de las etiquetas de idiomas es el RFC 4646, Tags for the Identification of Languages, que reemplaza a los RFC anteriores 3066 y 1766. Antes, para hallar las etiquetas había que consultar las listas de códigos presentes en diversos estándares de la ISO, pero ahora se pueden hallar todas las etiquetas en el IANA Registro de subetiquetas de idioma. Describiremos más adelante este nuevo registro.

RFC es el nombre que da la IETF a sus especificaciones. Cada RFC tiene un número exclusivo. Lamentablemente, al leer los RFC 1766 o RFC 3066 no es posible saber que estas especificaciones han quedado obsoletas y fueron reemplazadas por otras.

En su mayoría, las etiquetas de idioma están formadas por una subetiqueta de idioma compuesta por dos o tres letras. En ocasiones, a esta subetiqueta le sigue otra, de dos letras o tres dígitos, que indica la región. El RFC 4646 también permite cierta cantidad de subetiquetas adicionales allí donde sea necesario. Estas subetiquetas, que explicaremos brevemente en el apartado siguiente, incluyen las subetiquetas de sistema de escritura, variante, extensión y uso privado.

A continuación se presentan algunos ejemplos:

Código Idioma Subetiquetas
en Inglés language
mas Masai language
fr-CA El francés hablado en Canadá idioma+región
es-419 El español hablado en América Latina idioma+región
zh-Hans El chino escrito con caracteres simplificados idioma+sistema de escritura

La regla dorada para la creación de etiquetas de idioma es mantenerlas tan cortas como sea posible. Las subetiquetas de región, sistema de escritura, etc., deben evitarse, excepto cuando añadan información distintiva útil. Por ejemplo, para referirse al japonés debe usarse ja, y no ja-JP, a menos que exista una razón particular por la que haya que expresar que el idioma en cuestión es el japonés tal como se lo habla en Japón.

El XML también proporciona un mecanismo para impedir la herencia de la propiedad "idioma", por medio de la cadena vacía, es decir

xml:lang=""

En esencia, esto significa: no deseo asociar ningún idioma con esta información.

En el resto de este artículo proporcionaremos más detalles respecto de cómo construir las etiquetas de idioma.

Obsérvese que la especificación del HTML aún recomienda usar el RFC 1766 para la identificación de idiomas; no obstante, se debería usar el RFC 4646, a pesar de lo que diga la especificación actual del HTML.

El RFC 4646, amén de agregar algunas opciones adicionales para la identificación de variaciones comunes de ciertos idiomas, incluye todas las etiquetas que ya eran válidas. Es decir que los autores que hayan estado usando el RFC 1766 o el RFC 3066 no necesitan realizar cambios en las etiquetas que usan.

Construcción de etiquetas de idioma

Algunos de los cambios principales que supone el pasar del RFC 3066 al RFC 4646 son:

  1. Las subetiquetas válidas pueden hallarse todas en un solo lugar, el nuevo registro de la IANA.
  2. Las posiciones y longitudes de las subetiquetas están fijas, lo que facilita el procesamiento de las etiquetas de idioma.
  3. Hay más flexibilidad en relación con los posibles componentes de una etiqueta de idioma.

Básicamente, el RFC 3066 permitía componer tres tipos de etiquetas de idioma: un código de idioma sin más acompañamiento; un código de idioma más un código de país; o una etiqueta tomada de una pequeña lista de valores registrados especialmente en un registro de etiquetas de idioma de la IANA.

El RFC 4646 hace lugar a más tipos de subetiquetas y permite combinarlas de diversas maneras. Aunque parezca que esto complica mucho las cosas, en términos generales, elegir las etiquetas de idioma sigue siendo sencillo; sólo que allí donde el usuario necesite más flexibilidad, la tendrá. De hecho, para la mayor parte de la gente, debería haber varios motivos para considerar que el RFC 4646 simplifica las cosas; aunque más no sea, porque ahora todas las subetiquetas válidas pueden encontrarse en un solo lugar.

La lista que se reproduce a continuación muestra los diversos tipos de subetiquetas disponibles. En los apartados que siguen, iremos viendo uno por uno los diversos tipos de subetiqueta y mostrando cómo usarlos.

idioma-sistema de escritura-región-variante-extensión-usoprivado

Las entradas en el registro siguen ciertas convenciones en relación con el uso de mayúsculas y minúsculas; por ejemplo, las etiquetas de idioma están en minúsculas, las subetiquetas alfabéticas de región están en mayúsculas, y las etiquetas de sistema de escritura empiezan en mayúscula. ¡Pero esto es sólo una convención! Cuando use las subetiquetas puede hacerlo con entera libertad.

Uso del registro de subetiquetas

Como ya hemos dicho, antes para hallar las etiquetas se consultaban las listas de códigos en los diversos estándares de la ISO, pero ahora se pueden hallar todas las etiquetas en un solo lugar. El registro de la IANA parece un poco complejo a primera vista, en comparación con las listas de códigos de la ISO, pero en cuanto se comprende su estructura es muy fácil de usar.

El registro es un largo archivo de texto. Para hallar una subetiqueta de idioma, debe buscarse el nombre del idioma en inglés. Por ejemplo, buscando 'French' (francés), hallamos un registro que se ve así:

%%
Type: language
Subtag: fr 
Description: French
Added: 2005-10-16
Suppress-Script: Latn
%%

Observe que este registro está indicado como de tipo 'language'. Lo que buscamos es el código señalado como 'Subtag', es decir 'fr'.

Las otras etiquetas pueden hallarse del mismo modo. Por ejemplo, si queremos crear una etiqueta fr-CA (correspondiente al francés hablado en Canadá), lo próximo que haríamos sería buscar 'Canada' [el nombre del país en inglés] y verificar que la etiqueta hallada sea del tipo 'region'.

Deberían evitarse las subetiquetas que el registro describa como redundantes o desaprobadas (deprecated).

En el futuro puede que haya otras interfaces para acceder a esta información, pero por ahora el único método disponible es buscar en el texto.

En los apartados que siguen se proporcionan más detalles respecto de las diversas subetiquetas.

La subetiqueta de idioma

Idioma

en
ast

Todas las etiquetas de idioma deben empezar con una subetiqueta de idioma.

Algunos ejemplos de etiquetas que sólo indican el idioma son:

Estos códigos de idioma vienen de la lista ISO 639 y se actualizan a la par de ella. Dado que el RFC 3066 no proporcionaba una lista de subetiquetas válidas y simplemente remitía a los usuarios al estándar ISO 639, en ocasiones había confusiones respecto de cómo indicar los idiomas cuando las listas de códigos de la ISO contenían tanto códigos de dos letras como códigos de tres letras (y en ocasiones, más de uno del último tipo). Ahora todas las subetiquetas válidas se encuentran enumeradas en un unico registro de la IANA, que adopta un solo valor de las listas ISO para cada idioma. Si existe un código ISO de dos letras, es el que figurará en el registro. De lo contrario, el registro contendrá un código de tres letras. Con esto se deberían facilitar las cosas.

A continuación, un ejemplo de cómo aparece en el registro el código de idioma correspondiente al español (es):

%%
Type: language
Subtag: es
Description: Spanish
Description: Castilian
Added: 2005-10-16
Suppress-Script: Latn
%%

Aunque en los códigos no se distingue entre mayúsculas y minúsculas, por lo general se los escribe en minúsculas, pero esto no es más que una convención.

La subetiqueta de sistema de escritura

Sistema de escritura

zh-Hans
az-Latn

Algunos ejemplos de etiquetas de idioma con subetiqueta de sistema de escritura:

La subetiqueta de sistema de escritura es una novedad introducida en el RFC 4646. Las subetiquetas vienen de la lista ISO 15924 de códigos de sistema de escritura y se actualizan a la par de ella.

Las etiquetas de idioma sólo pueden contener una subetiqueta de sistema de escritura, que debe aparecer inmediatamente a continuación de la subetiqueta de idioma. La subetiqueta de sistema de escritura siempre está compuesta por cuatro letras.

Las subetiquetas de sistema de escritura sólo deben usarse cuando sea necesario para establecer una distinción. Como coautor del RFC 4646, Addison Phillips escribe: "En casi cualquier contenido que en la actualidad no use una etiqueta de sistema de escritura, lo mejor es seguir sin usarla en el futuro".

De hecho, en muchas de las entradas del registro para las subetiquetas de idioma, el uso de subetiquetas de sistema de escritura se desalienta decididamente, por medio de la inclusión de una línea 'Suppress script'. En el ejemplo correspondiente al español, que hemos dado arriba, aparece esta línea; indica que el español normalmente se escribe en caracteres latinos, de modo que normalmente no debería usarse la subetiqueta Latn con el código es.

Este ejemplo muestra la entrada del registro para el sistema de escritura en caracteres cirílicos, Cyrl, que se usa para el ruso además de otros idiomas:

%%
Type: script
Subtag: Cyrl
Description: Cyrillic
Added: 2005-10-16
%%

Aunque en las aplicaciones comunes de las etiquetas de idioma es improbable que haya necesidad de explicitar el sistema de escritura, existen unas pocas situaciones donde desde hace algún tiempo se sentía la necesidad de algún mecanismo como éste. Un ejemplo es el idioma chino. Este idioma tiene muchos dialectos, que con frecuencia son mutuamente ininteligibles, pero todos ellos se escriben con uno de dos sistemas de escritura: los caracteres simplificados o los caracteres tradicionales. Usualmente los autores de textos en chino desean rotularlos como "simplificado" o "tradicional", pero hasta hace poco tiempo no tenían cómo hacerlo. Los autores tenían que forzar el sistema de etiquetado, usando zh-CN (que corresponde al chino hablado en China) cuando querían indicar "chino simplificado" y zh-TW (que corresponde al chino hablado en Taiwán) para indicar "chino tradicional". Pero algunas personas indican el chino tradicional usando zh-HK. La disponibilidad de los códigos zh-Hans y zh-Hant para referirse al chino escrito con caracteres simplificados o tradicionales, respectivamente, debería representar una mejora en coherencia y exactitud, y es un cambio que ya está empezando a usarse comúnmente.

La subetiqueta de región

Región

en-GB
es-005
zh-Hant-HK

Algunos ejemplos de etiquetas de idioma con subetiquetas de región:

Las subetiquetas de región en el RFC 3066 adoptaron sus valores de los códigos de país del estándar ISO 3166. El nuevo registro de la IANA conserva estos códigos de dos letras, pero también incluye los códigos de región M.49 de 3 dígitos usados por las Naciones Unidas. La ventaja de estos códigos es que pueden representar no solamente países. Por ejemplo, desde hace algún tiempo podía ocurrir que un equipo de localización, tras haber compuesto una esmerada traducción al español, quisiera señalarla como español latinoamericano, en vez de español de algún país particular. El RFC 4646 ahora lo hace posible. (la etiqueta de idioma que corresponde es es-419).

Las etiquetas de idioma sólo pueden contener una subetiqueta de región, que debe aparecer inmediatamente a continuación de la subetiqueta de idioma (o la subetiqueta de sistema de escritura, si la hay). La subetiqueta de región es un código compuesto por dos letras o por tres dígitos. Obsérvese que se puede poner un código de región inmediatamente después del código de idioma, como era habitual para el caso de etiquetas de idioma tales como en-US.

Una vez más, las subetiquetas de región sólo deben usarse cuando sea necesario para establecer una distinción. A menos que haya que destacar específicamente que un texto está escrito en italiano como se habla en Italia, el idioma italiano debería representarse con la etiqueta it, no con it-IT. Lo mismo vale para cualquier otra combinación posible.

Estos ejemplos tomados del registro muestran los códigos correspondientes a Austria, AT, y África del Norte, 015:

%%
Type: region
Subtag: AT
Description: Austria
Added: 2005-10-16
%%
Type: region
Subtag: 015
Description: Northern Africa
Added: 2005-10-16
%%

Subetiquetas de variante

Variante

sl-nedis
sl-IT-nedis
de-CH-1901

Las subetiquetas de variante son valores que se usan para indicar dialectos o variaciones del sistema de escritura que escapen al alcance de las combinaciones de subetiquetas de idioma, sistema de escritura y región. Si usted considera que es necesario agregar uno de estos valores al registro, debe seguir el procedimiento de registro que se describe en RFC 4646. Las subetiquetas de variante deben aparecer después de cualquier subetiqueta de idioma, sistema de escritura o región que esté presente en la etiqueta; pero no es necesario haya subetiquetas de sistema de escritura o región antes de la subetiqueta de variante.

A menos que usted trabaje en un área especializada, es improbable que necesite utilizar subetiquetas de variante.

Los ejemplos siguientes tal vez ayuden a comprender la función de estas subetiquetas.

Este ejemplo del registro muestra el código para el dialecto esloveno de la región del Natisone/Nadiza, nedis:

%%
Type: variant
Subtag: nedis
Description: Natisone dialect
Description: Nadiza dialect
Added: 2005-10-16
Prefix: sl
%%

En el registro, estas subetiquetas están vinculadas a un idioma concreto por medio de la línea 'Prefix'. La subetiqueta nedis del ejemplo anterior sólo se puede usar con el esloveno. Si usted necesita expresar algún matiz dialectal o de escritura en particular, debería proponer la inclusión de una subetiqueta de variante en el registro.

Subetiquetas de extensión y uso privado

Uso privado

en-US-x-twain

Mencionaremos al pasar estas otras subetiquetas, pero si considera que realmente necesita usarlas, debería leer la especificación, en vez de este artículo.

Las subetiquetas de extensión permiten agregar futuras extensiones a la etiqueta de idioma, y por el momento, no hay ninguna registrada.

Las subetiquetas de uso privado no figuran en el registro de subetiquetas y su elección y mantenimiento corren por cuenta de un acuerdo privado entre las partes.

Las subetiquetas de extensión y uso privado van precedidas de una etiqueta de una sola letra. La que se usa para referirse al uso privado es x.

Las subetiquetas de uso privado deben emplearse con suma caución, ya que interfieren con la interoperabilidad cuyo fomento es la razón de ser del RFC 4646.

El ejemplo siguiente de una subetiqueta de uso privado permite identificar un tipo particular de inglés americano, pero sólo dentro del ámbito de una comunidad cerrada. Fuera de los límites de ese acuerdo privado, el significado de la subetiqueta no es algo en que se pueda confiar.

Correspondencia de las etiquetas de idioma

La correspondencia de diferentes etiquetas de idioma es importante para diversas aplicaciones. Según la BCP 47, 'en' puede considerarse equivalente a 'en-GB'. Por ejemplo, el siguiente fragmento de CSS muestra en color rojo todo el texto escrito en inglés, en navegadores compatibles con el seudoatributo :lang.

:lang(en) { color: red; }

En el siguiente fragmento de HTML, el texto descrito como lang="en-GB" aparecerá en color rojo.

<p>En janvier, toutes les boutiques de Londres affichent des panneaux
<span lang="en-GB">SALE</span>, mais en fait ces magasins sont bien propres!</p>

Por otra parte, dada la siguiente declaración CSS:

:lang(en-GB) { color: red; }

la palabra 'SALE' en el siguiente fragmento no debería aparecer en rojo.

<p>En janvier, toutes les boutiques de Londres affichent des panneaux
<span lang="en">SALE</span>, mais en fait ces magasins sont bien propres!</p>

Con la introducción de las etiquetas adicionales en el RFC 4646, la correspondencia es un poco más complicada. Además, la especificación acompañante, RFC 4647 Matching of Language Tags, describe más de un mecanismo de correspondencia posible. La correspondencia de las etiquetas se describirá en otro artículo.

Cambios futuros pendientes

En un futuro cercano se realizarán otros cambios al mecanismo de etiquetado de idiomas. Estos cambios deberían haber entrado en el RFC 4646, pero dependen de que se complete el estándar ISO 639-3. Cuando esto ocurra, se harán algunas pequeñas correcciones al RFC 4646 con el objetivo de incorporar las ampliaciones previstas. Si todo va bien, esto no será mucho después de la publicación del RFC 4646.

El cambio principal será el agregado de una subetiqueta de extensión de idioma, que irá inmediatamente después de la subetiqueta de idioma y antes de cualquier subetiqueta de sistema de escritura que pueda haber.

Su función principal será la subdivisión de lo que se conoce como macroidiomas, un ejemplo de los cuales es el idioma chino. En realidad, el nombre 'chino' abarca un amplio conjunto de dialectos que a menudo son mutuamente ininteligibles, de modo que catalogarlos a todos como zh no es realmente muy informativo. Los nuevos códigos ISO 639-3 permitirán hacer referencia a dialectos específicos del chino, por ejemplo el mandarín, el hakka, el cantonés, etc.

Los ejemplos siguientes tal vez ayuden a comprender la función de estas subetiquetas.

A propósito

Las etiquetas de idioma para el HTML se definieron formalmente por primera vez en el RFC 2070, F. Yergeau, et.al. Internationalization of the Hypertext Markup Language. El RFC 2070 se incluyó en HTML 4, y se lo ha reclasificado como histórico.

Obsérvese que se han realizado cambios a los códigos ISO de idiomas. En 1989 se retiraron los códigos iw, in y ji, y se los reemplazó con he, id y yi. Más recientemente, el código ISO de país cs, que representaba a Checoslovaquia, pasó a representar a Serbia y Montenegro. Estos cambios pueden producir confusión al comparar los códigos asignados a textos a lo largo de un período prolongado. El nuevo registro de subetiquetas de la IANA permite pasar etiquetas a la categoría de desaprobadas, y reemplazarlas con otras nuevas, pero nunca eliminará ni cambiará el significado de una subetiqueta. Se espera que la ISO siga una política similar en el futuro.

Muchas otras especificaciones del W3C o relacionadas con la Web usan etiquetas de idioma:

Obsérvese además que se puede añadir información sobre el idioma a objetos tales como imágenes y archivos de audio adjuntos.

Dinos qué piensas (en Inglés).

Lecturas complementarias

Autor: Richard Ishida, W3C. Traductor: Spanish Translation Team, Trusted Translations, Inc..

XHTML 1.0 válido
CSS válido
Codificado en UTF-8

Traducción del original en inglés del 2006-11-09. Última modificación de la traducción 2008-09-26 16:05 GMT

Para ver el historial de cambios del documento, busque article-language-tags en la bitácora de internacionalización.