8 Informaci�n sobre el idioma y la direcci�n del texto

Nota: Este documento es parte de una traducci�n al castellano de la Recomendaci�n del W3C "HTML 4.01 Specification" (m�s informaci�n). Puede consultar la versi�n original del mismo. Para cualquier comentario o correcci�n acerca de la traducci�n p�ngase en contacto con el traductor en jrpozo arroba conclase punto net. Gracias por su colaboraci�n.

V�ase el Aviso de copyright de la traducci�n.

Contenidos

  1. Especificaci�n del idioma del contenido: el atributo lang
    1. C�digos de idioma
    2. Herencia de los c�digos de idioma
    3. Interpretaci�n de los c�digos de idioma
  2. Especificaci�n de la direcci�n del texto y de las tablas: el atributo dir
    1. Introducci�n al algoritmo bidireccional
    2. Herencia de la informaci�n sobre la direcci�n del texto
    3. Especificaci�n de la direcci�n del texto incluido
    4. Anulaci�n del algoritmo bidireccional: el elemento BDO
    5. Referencias de caracteres para el control de la direccionalidad y de la uni�n
    6. Efecto de las hojas de estilo en la bidireccionalidad

Esta secci�n del documento trata sobre dos temas importantes que afectan a la internacionalizaci�n del HTML: la especificaci�n del idioma (el atributo lang) y de la direcci�n (el atributo dir) del texto de un documento.

8.1 Especificaci�n del idioma del contenido: el atributo lang

Definiciones de atributos
lang = c�digo de idioma [CI]
Este atributo especifica el idioma base de los valores de los atributos y del texto contenido en un elemento. El valor por defecto de este atributo es desconocido.

La informaci�n sobre el idioma especificada por medio del atributo lang puede ser utilizada por un agente de usuario de diferentes formas para controlar la representaci�n. Algunas cosas para las que la informaci�n sobre el idioma proporcionada por el autor puede ser �til son las siguientes:

El atributo lang especifica el idioma del contenido del elemento y de los valores de los atributos; el que sea relevante para un atributo dado depender� de la sintaxis y de la sem�ntica del atributo y de la operaci�n involucrada.

El objetivo del atributo lang es permitir a los agentes de usuario representar el contenido de forma m�s significativa seg�n la pr�ctica cultural aceptada para un idioma dado. Esto no implica que los agentes de usuario deber�an representar los caracteres que no son t�picos de un idioma dado de maneras menos significativas; los agentes de usuario deben intentar representar todos los caracteres lo mejor posible, independientemente del valor especificado por lang.

Por ejemplo, si aparecen caracteres del alfabeto griego dentro un texto escrito en espa�ol:

<P><Q lang="es">Sus superpoderes son el resultado de las
radiaciones &gamma;,</Q> dijo �l.</P>

un agente de usuario (1) deber�a intentar representar el contenido en espa�ol de una manera apropiada (p.ej., en lo que respecta a la puntuaci�n de la cita) y (2) debe intentar representar &gamma; lo mejor posible aunque no sea un car�cter espa�ol.

Consulte la secci�n sobre caracteres no representables para informaci�n relacionada.

8.1.1 C�digos de idioma

El valor del atributo lang es un c�digo de idioma que identifica un languaje natural hablado, escrito o usado de cualquier modo para la comunicaci�n de informaci�n entre personas. Los lenguajes de ordenador est�n expl�citamente excluidos de los c�digos de idiomas.

La [RFC1766] define y explica los c�digos de idioma que deben ser usados en los documentos HTML.

En pocas palabras, los c�digos de idioma consisten en un c�digo principal y una serie posiblemente vac�a de subc�digos:

        c�digo-de-idioma = c�digo-principal ( "-" subc�digo )*

Aqu� tenemos algunos ejemplos de c�digos de idioma:

En la [ISO639] se reservan c�digos principales de dos letras para las abreviaturas de los idiomas. Entre estos c�digos de dos letras est�n fr (franc�s), de (alem�n), it (italiano), nl (neerland�s), el (griego), es (espa�ol), pt (portugu�s), ar (�rabe), he (hebreo), ru (ruso), zh (chino), ja (japon�s), hi (hindi), ur (urdu), y sa (s�nscrito).

Se sobreentiende que cualquier c�digo de dos letras es un c�digo de pa�s de [ISO3166].

8.1.2 Herencia de los c�digos de idioma

Un elemento hereda la informaci�n sobre el c�digo de idioma de acuerdo con el siguiente orden de precedencia (de m�s alto a m�s bajo):

En este ejemplo, el idioma principal del documento es el franc�s ("fr"). Hay un p�rrafo que se declara como escrito en espa�ol ("es"), despu�s del cual el idioma principal vuelve a ser el franc�s. El p�rrafo siguiente incluye un frase en japon�s ("ja"), despu�s de la cual el idioma principal vuelve a ser el franc�s.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<HTML lang="fr">
<HEAD>
<TITLE>Un document multilingue</TITLE>
</HEAD>
<BODY>
...Interpretado como franc�s...
<P lang="es">...Interpretado como espa�ol...
<P>...Interpretado de nuevo como franc�s...
<P>...Texto en franc�s interrumpido por <EM lang="ja">algo
      en japon�s</EM> Aqu� vuelve a empezar en franc�s...
</BODY>
</HTML>
Nota. Las celdas de las tablas pueden heredar los valores los valores de lang no de su padre, sino de la primera celda de un tramo. Consulte la secci�n sobre herencia de la alineaci�n para m�s detalles.

8.1.3 Interpretaci�n de los c�digos de idioma

En el contexto del HTML, los agentes de usuario deber�an interpretar un c�digo de idioma como una jerarqu�a de s�mbolos m�s que como un s�mbolo independiente. Cuando un agente de usuario ajusta la representaci�n de acuerdo con la informaci�n sobre el idioma (por ejemplo, comparando los c�digos de idioma de las hojas de estilos y los valores de lang), siempre deber�a dar prioridad a un emparejamiento exacto, pero tambi�n deber�a considerar suficiente el emparejamiento de c�digos principales. As�, si se establece un valor "en-US" para el atributo lang del elemento HTML, un agente de usuario deber�a preferir en primer lugar la informaci�n de estilo correspondiente a "en-US", y a continuaci�n la correspondiente al valor m�s general "en".

Nota. Las jerarqu�as de c�digos de idioma no garantizan que todos los idiomas con un mismo prefijo ser�n entendidos por aquellos que dominen uno o m�s de esos idiomas. Lo que hacen es permitir a un usuario englobar varios idiomas bajo un prefijo com�n cuando sea el caso para ese usuario.

8.2 Especificaci�n de la direcci�n del texto y de las tablas: el atributo dir

Definiciones de atributos

dir = LTR | RTL [CI]
Este atributo especifica la direcci�n base del texto direccionalmente neutro (es decir, texto que no tiene direccionalidad heredada seg�n se define en [UNICODE]) de los contenidos o los valores de los atributos de un elemento. Tambi�n especifica la direccionalidad de las tablas. Valores posibles:
  • LTR: Texto o tabla de izquierda a derecha (Left-to-right).
  • RTL: Texto o tabla de derecha a izquierda (Right-to-left).

Los autores, adem�s de especificar el idioma de un documento con el atributo lang, pueden necesitar especificar la direccionalidad base (izquierda a derecha o derecha a izquierda) de porciones de texto de un documento, de la estructura de una tabla, etc. Esto se hace con el atributo dir.

La especificaci�n [UNICODE] asigna direccionalidad a los caracteres y define un algoritmo (complejo) para determinar la direccionalidad correcta del texto. Si un documento no contiene un car�cter mostrable de derecha a izquierda, no se requiere a un agente de usuario conforme que aplique el algoritmo bidireccional [UNICODE]. Si un documento contiene caracteres de derecha a izquierda, y si el agente de usuario muestra estos caracteres, el agente de usuario debe usar el algoritmo bidireccional.

Si bien Unicode especifica caracteres especiales que tratan con la direcci�n del texto, HTML ofrece construcciones de c�digo de mayor nivel que hacen lo mismo: el atributo dir (no confundir con el elemento DIR) y el elemento BDO. As�, para expresar un cita en hebreo, es m�s intuitivo escribir

<Q lang="he" dir="rtl">...una cita en hebreo...</Q>

que la referencias equivalentes en Unicode:

&#x202B;&#x05F4;...una cita en hebreo...&#x05F4;&#x202C;

Los agentes de usuario no deben usar el atributo lang para determinar la direccionalidad del texto.

El atributo dir se hereda y puede ser anulado. Consulte la secci�n sobre informaci�n acerca de la herencia de la direcci�n del texto para m�s detalles.

8.2.1 Introducci�n al algoritmo bidireccional

Los siguientes ejemplos ilustran el comportamiento esperado del algoritmo bidireccional. Intervienen dos idiomas: el ingl�s, con escritura de izquierda a derecha, y el hebreo, con escritura de derecha a izquierda.

Consideremos el siguiente texto de ejemplo:

  ingl�s1 HEBREO2 ingl�s3 HEBREO4 ingl�s5 HEBREO6

Los caracteres de este ejemplo (y de todos los ejemplos relacionados) se almacenan en el ordenador del modo que se muestra aqu�: el primer caracter de la fila es "i", el segudo es "n", y el �ltimo es "6".

Supongamos que el idioma predominante del documento que contiene a este p�rrafo es el ingl�s. Eso significa que la direcci�n base es de izquierda a derecha. La presentaci�n correcta de esta l�nea ser�a:

ingl�s1 2OERBEH ingl�s3 4OERBEH ingl�s5 6OERBEH
        <------         <------         <------
           H               H               H
---------------------------------------------->
                      I

Las l�neas a trazos indican la estructura de la frase: el ingl�s es el que predomina y hay algunos textos incluidos en hebreo. Para lograr la presentaci�n correcta no se necesita c�digo adicional, ya que los agentes de usuario que apliquen el algoritmo bidireccional invertir�n correctamente los fragmentos en hebreo.

En cambio, si el idioma predominante del documento es el hebreo, la direcci�n base es de derecha a izquierda. La presentaci�n correcta es por tanto:

6OERBEH ingl�s5 4OERBEH ingl�s3 2OERBEH ingl�s1
        ------>         ------>         ------>
           I               I               I
<----------------------------------------------
                       H

En este caso, se ha escrito la frase entera de derecha a izquierda, y las secuencias incluidas en ingl�s se han invertido apropiadamente con el algoritmo bidireccional.

8.2.2 Herencia de la informaci�n sobre la direcci�n del texto

El algoritmo bidireccional de Unicode obliga a que los bloques de texto tengan una direcci�n de texto base. Para especificar la direcci�n base de un elemento en bloque, se establece el atributo dir del elemento. El valor por defecto del atributo dir es "ltr" (left-to-right, texto de izquierda a derecha).

Cuando se establece el atributo dir de un elemento en bloque, �ste tiene efecto hasta la finalizaci�n del bloque y en cualquier elemento en bloque anidado. Si se establece el atributo dir para alg�n elemento anidado, se anula en �l el valor heredado.

Para establecer la direcci�n de texto base de un documento completo, se establece el atributo dir del elemento HTML.

Por ejemplo:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<HTML dir="RTL">
<HEAD>
<TITLE>...un título de derecha a izquierda...</TITLE>
</HEAD>
...texto de derecha a izquierda...
<P dir="ltr">...texto de izquierda a derecha...</P>
<P>...de nuevo texto de derecha a izquierda...</P>
</HTML>

Los elementos en l�nea, por su parte, no heredan el atributo dir. Eso significa que un elemento en l�nea sin un atributo dir no abre un nivel adicional de inclusi�n con respecto al algoritmo bidireccional. (Aqu� se considera que un elemento est� en l�nea o en bloque seg�n su presentaci�n por defecto. T�ngase en cuenta que los elementos INS y DEL pueden estar en bloque o en l�nea dependiendo de su contexto.)

8.2.3 Especificaci�n de la direcci�n del texto incluido

El algoritmo bidireccional [UNICODE] invierte autom�ticamente las secuencias incluidas de caracteres de acuerdo con su direccionalidad inherente (como se ilustra en los ejemplos previos). Sin embargo, en general s�lo se puede tener en cuenta un nivel de inclusi�n. Para lograr niveles adicionales de cambios de direcci�n por inclusi�n, debe hacerse uso del atributo dir de un elemento en l�nea.

Consideremos el mismo texto del ejemplo anterior:

ingl�s1 HEBREO2 ingl�s3 HEBREO4 ingl�s5 HEBREO6

Supongamos que el idioma predominante del documento que contiene a este p�rrafo es el ingl�s. Supongamos adem�s que la frase en ingl�s anterior contiene una secci�n en hebreo que va desde HEBREO2 hasta HEBREO4, y que la secci�n en hebreo contiene una cita en ingl�s (ingl�s3). La presentaci�n deseada de este texto es por lo tanto:

ingl�s1 4OERBEH ingl�s3 2OERBEH ingl�s5 6OERBEH
                ------>
                   I
        <----------------------
                   H
---------------------------------------------->
                   I

Para lograr dos cambios de direcci�n por inclusi�n, debemos proporcionar informaci�n adicional, para lo cual delimitamos la segunda inclusi�n expl�citamente. En este ejemplo, utilizamos el elemento SPAN y el atributo dir para dar formato al texto:

ingl�s1 <SPAN dir="RTL">HEBREO2 ingl�s3 HEBREO4</SPAN> ingl�s5 HEBREO6

Los autores tambi�n pueden utilizar los caracteres especiales de Unicode para lograr cambios m�ltiples de direcci�n por inclusi�n. Para una inclusi�n de izquierda a derecha, se rodea el texto incluido con los caracteres LEFT-TO-RIGHT EMBEDDING (inclusi�n de izquierda a derecha, "LRE", hexadecimal 202A) y POP DIRECTIONAL FORMATTING (fin de formato direccional, "PDF", hexadecimal 202C). Para una inclusi�n de derecha a izquierda, se rodea el texto incluido con los caracteres RIGHT-TO-LEFT EMBEDDING (inclusi�n de derecha a izquierda, "RTE", hexadecimal 202B) y PDF.

Uso conjunto del c�digo de direccionalidad de HTML y de los caracteres Unicode. Los autores y los dise�adores de programas de creaci�n deber�an tener en cuenta que pueden surgir conflictos si se utilizan al mismo tiempo el atributo dir de los elementos en l�nea (incluyendo BDO) y los caracteres de formato [UNICODE] correspondientes. Se usar� preferiblemente uno u otro sistema exclusivamente. La especificaci�n del formato con HTML ofrece mayores garant�as de integridad estructural del documento y evita los problemas que puedan surgir al editar texto bidireccional HTML con un editor de textos sencillo, pero algunos programas pueden ser m�s aptos para la utilizaci�n de los caracteres [UNICODE]. Si se usan ambos m�todos, deber�an tomarse todas las precauciones para asegurar el anidamiento correcto del c�digo y los caracteres de formato; de otro modo los resultados de la representaci�n son imprevisibles.

8.2.4 Anulaci�n del algoritmo bidireccional: el elemento BDO

<!ELEMENT BDO - - (%inline;)*          -- anular BiDi I18N -->
<!ATTLIST BDO
  %coreattrs;                          -- id, class, style, title --
  lang        %LanguageCode; #IMPLIED  -- c�digo de idioma --
  dir         (ltr|rtl)      #REQUIRED -- direccionalidad --
  >

Etiqueta inicial: obligatoria, Etiqueta final: obligatoria

Definiciones de atributos

dir = LTR | RTL [CI]
Este atributo obligatorio especifica la direcci�n base del texto contenido en el elemento. Esta direcci�n prevalece sobre la direccionalidad inherente de los caracteres seg�n se define en [UNICODE]. Valores posibles:
  • LTR: Texto de izquierda a derecha (Left-to-right).
  • RTL: Texto de derecha a izquierda (Right-to-left).

Atributos definidos en otros lugares

En general, el algoritmo bidireccional y el atributo dir son suficientes para controlar los cambios de direccionalidad por inclusi�n. Sin embargo, a veces pueden darse casos en que el algoritmo bidireccional produce una presentaci�n incorrecta. El elemento BDO permite a los autores desactivar el algoritmo bidireccional para fragmentos de texto espec�ficos.

Consideremos un documento que contenga el mismo texto que antes:

ingl�s1 HEBREO2 ingl�s3 HEBREO4 ingl�s5 HEBREO6

pero supongamos que este texto ya ha sido puesto en su orden visual. Una raz�n para ello podr�a ser que los est�dares MIME ([RFC2045], [RFC1556]) recomiendan el orden visual, es decir, que las secuencias de caracteres de derecha a izquierda se inserten de derecha a izquierda en el flujo de caracteres. En un mensaje de correo electr�nico, se podr�a dar el siguiente formato al texto anterior, incluyendo saltos de l�nea:

ingl�s1 2OERBEH ingl�s3
4OERBEH ingl�s5 6OERBEH

Esto generar�a un conflicto con el algoritmo bidireccional [UNICODE], ya que el algoritmo invertir�a 2OERBEH, 4OERBEH, y 6OERBEH una segunda vez, mostrando las palabras en hebreo de izquierda a derecha en lugar de derecha a izquierda.

La soluci�n en este caso es anular el algoritmo de bidireccionalidad colocando el extracto del mensaje de correo en un elemento PRE (para conservar los saltos de l�nea) y cada l�nea en un elemento BDO, cuyo atributo dir sea igual a LTR:

<PRE>
<BDO dir="LTR">ingl�s1 2OERBEH ingl�s3</BDO>
<BDO dir="LTR">4OERBEH ingl�s5 6OERBEH</BDO>
</PRE>

Esto le dice al algoritmo bidireccional "�D�jame de izquierda a derecha!" y produce la presentaci�n deseada:

ingl�s1 2OERBEH ingl�s3
4OERBEH ingl�s5 6OERBEH

El elemento BDO deber�a utilizarse en aquellos casos en que fuera preciso un control absoluto del orden de las secuencias (p.ej., n�meros de referencia multi-lenguaje). El atributo dir es obligatorio para este elemento.

Los autores tambi�n pueden usar los caracteres especiales Unicode para anular el algoritmo bidireccional -- LEFT-TO-RIGHT OVERRIDE (anular izquierda a derecha, 202D) o RIGHT-TO-LEFT OVERRIDE (anular derecha a izquierda, hexadecimal 202E). El caracter POP DIRECTIONAL FORMATTING (hexadecimal 202C) finaliza ambas anulaciones de bidireccionalidad.

Nota. Recu�rdese que pueden surgir conflictos si se usan simult�neamente el atributo dir de los elementos en l�nea (incluyendo BDO) y los caracteres de formato [UNICODE] correspondientes.

Bidireccionalidad y codificaciones de caracteres. De acuerdo con [RFC1555] y [RFC1556], existen convenciones especiales sobre el uso del par�metro "charset" para indicar el tratamiento de la bidireccionalidad que se hace en el correo MIME, en particular para distinguir entre direccionalidad visual, impl�cita y expl�cita. El valor "ISO-8859-8" (para hebreo) indica codificaci�n visual, "ISO-8859-8-i" indica bidireccionalidad impl�cita, e "ISO-8859-8-e" indica direccionalidad expl�cita.

Como HTML usa el algoritmo de bidireccionalidad de Unicode, los documentos conformes codificados con la ISO 8859-8 deben ser marcados como "ISO-8859-8-i". Con HTML tambi�n es posible el control direccional expl�cito, pero no puede expresarse con ISO 8859-8, y por tanto no deber�a utilizarse "ISO-8859-8-e" .

El valor "ISO-8859-8" implica que se ha dado formato visual al documento, utilizando c�digo incorrectamente (como por ejemplo TABLE con alineaci�n a la derecha y sin ajuste autom�tico de l�neas) para asegurarse de que los agentes de usuario antiguos que no soportan bidireccionalidad puedan realizar una presentaci�n razonable del documento. Tales documentos no son conformes con la especificaci�n presente. Si es necesario, pueden hacerse conformes con esta especificaci�n (y al mismo tiempo se mostrar�n correctamente en agentes de usuario antiguos) a�adiendo elementos BDO donde haga falta. Al contrario de lo que se dice en [RFC1555] y en [RFC1556], ISO-8859-6 (�rabe) no se ordena visualmente.

8.2.5 Referencias de caracteres para el control de la direccionalidad y de la uni�n

Dado que a veces se dan ambig�edades en la direccionalidad de ciertos caracteres (p.ej., los de puntuaci�n), la especificaci�n [UNICODE] incluye caracteres que permiten la resoluci�n apropiada de dichas ambig�edades. Adem�s, Unicode incluye algunos caracteres para controlar el comportamiento de uni�n y separaci�n de caracteres cuando esto sea necesario (p.ej., algunas situaciones con letras �rabes). HTML 4 incluye referencias de caracteres para estos caracteres.

Los siguientes extractos del DTD presentan algunas de las entidades direccionales:

   <!ENTITY zwnj CDATA "&#8204;"--=separador de anchura cero-->
   <!ENTITY zwj  CDATA "&#8205;"--=conector de anchura cero-->
   <!ENTITY lrm  CDATA "&#8206;"--=marca de izquierda a derecha-->
   <!ENTITY rlm  CDATA "&#8207;"--=marca de derecha a izquierda-->

La entidad zwnj (zero width non-joiner) se utiliza para evitar el comportamiento de uni�n en aquellos contextos en que la uni�n ocurre pero no deber�a. La entidad zwj (zero width joiner) hace lo contrario: fuerza la uni�n cuando no ocurre aunque deber�a. Por ejemplo, la letra �rabe "HEH" se utiliza para abreviar "Hijri", el nombre del sistema de calendario isl�mico. Como la "HEH" aislada se parece a la escritura manual del d�gito �rabe cinco (basada en d�gitos �ndicos), para evitar confundir "HEH" con un d�gito cinco al final de un a�o, se usa la forma inicial de "HEH". Sin embargo, no sigue ning�n contexto (es decir, una letra de uni�n) al que pueda unirse la "HEH". El car�cter zwj proporciona ese contexto.

An�logamente, en textos persas, hay casos es que una letra que normalmente se unir�a a la letra subsiguiente, en escritura cursiva no deber�a hacerlo. En estos casos se utiliza el car�cter zwj para evitar la uni�n.

Los otros caracteres, lrm y rlm, se usan para forzar la direccionalidad de caracteres de direccionalidad neutral. Por ejemplo, si hay un signo de comillas dobles entre un texto �rabe (derecha a izquierda) y otro en lat�n (izquierda a derecha), la direcci�n de las comillas no est� clara (�corresponden al texto �rabe o al lat�n?). Los caracteres lrm y rlm tienen propiedad direccional, pero no propiedades de anchura ni de separaci�n de palabras o l�neas. Consulte [UNICODE] para m�s detalles.

Signos de caracteres reflejados. En general, el algoritmo bidireccional no refleja signos de caracteres, sino que los deja intactos. Una excepci�n a esto son los caracteres tales como los par�ntesis (ver [UNICODE], tabla 4-7). En aquellos casos en que se desee reflejar signos, por ejemplo para jerogl�ficos egipcios, o en boustrophedon griego, o para efectos especiales de dise�o, deber�a controlarse esto con hojas de estilo.

8.2.6 Efecto de las hojas de estilo en la bidireccionalidad

En general, la utilizaci�n de hojas de estilo para cambiar la representaci�n visual de un elemento en bloque a en l�nea o viceversa no ofrece ninguna dificultad. Sin embargo, debido a que el algoritmo bidireccional se basa en la distinci�n en l�nea/en bloque, debe tenerse especial cuidado si se hace esta transformaci�n.

Cuando un elemento en l�nea que no tiene un atributo dir se transforma mediante una hoja de estilo al estilo de un elemento en bloque, hereda el atributo dir del elemento padre en bloque m�s cercano que defina la direcci�n base del bloque.

Cuando un elemento en bloque que no tiene un atributo dir se transforma mediante una hoja de estilo al estilo de un elemento en l�nea, la presentaci�n resultante deber�a ser equivalente, en t�rminos de formato de la bidireccionalidad, al formato obtenido a�adiendo expl�citamente al elemento transformado un atributo dir (igual al valor heredado).