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
 

Uso de controles Unicode para texto bidi

Audiencia de destino: autores de contenido para idiomas basados en HTML o XML (usando editores o lenguaje de script), los desarrolladores de script (PHP, JSP, etc.) y todos aquellos que se pregunten cómo lograr el flujo de texto adecuado para scripts de derecha a izquierda en donde no estén disponibles las etiquetas adecuadas.

Pregunta

Si no puedo utilizar etiquetas para ordenar el texto bidireccional de manera correcta, ¿qué puedo hacer?

Información preliminar

Todo el texto se debería almacenar en 'orden lógico', es decir, los caracteres en memoria progresan en una solo dirección según la pronunciación del texto. No obstante, cuando se visualiza texto, aún en la misma línea, los caracteres que se utilizan en los sistemas de escritura de derecha a izquierda, como el árabe, el hebreo, el thaana, el urdu, etc., deben progresar de derecha a izquierda, mientras que los caracteres para otros sistemas, como el latino, y los números progresan de izquierda a derecha. Para lograr la reorganización visual, se utiliza el algoritmo bidireccional (bidi) Unicode.

El algoritmo bidi afecta la dirección del texto al considerar las propiedades direccionales de cada carácter. Sin embargo, con frecuencia, cuando se combinan sistemas de escritura, el algoritmo necesita un poco de ayuda para determinar cómo se deberían posicionar las partes del texto al visualizarse. Por ejemplo:

Mostramos ejemplos con texto en sistemas de escritura reales de derecha a izquierda, pero en caso de que el agente de usuario no soporte los sistemas de derecha a izquierda de manera adecuada, utilizamos gráficos cuando el resultado visual es importante. Al hacer clic en el gráfico View code., usted abre una versión de texto en una ventana nueva. (Esto también le permite examinar el texto fuente.) También mostramos una versión solo de ASCII, justo después, que presenta el texto en inglés en minúscula y el hebreo o árabe, en mayúsculas. El orden y la posición de los caracteres en la versión solo de ASCII refleja los del original.

Esta oración de ejemplo muestra lo que se obtiene si confiamos únicamente en el algoritmo bidireccional. Esto es incorrecto. Dado que la cita entera está escrita en hebreo, el texto "W3C" y la coma deberían aparecer a la izquierda (es decir, al final) del texto en hebreo.

Ver código.Incorrectly nested phrases.

Versión ASCII:
el título dice "YTIVITCA NOITAZILANOITANRETNI, w3c" en hebreo.

El resultado correcto, cuando se muestre, debería verse así:

Ver código.Correctly nested phrases.

Versión ASCII:
el título dice "w3c, YTIVITCA NOITAZILANOITANRETNI" en hebreo.

En otros casos, es conveniente anular (es decir, deshabilitar) completamente el efecto del algoritmo bidireccional.

Normalmente utilizaríamos las etiquetas para controlar esto, pero a veces (idealmente, sería el caso de las etiquetas preexistentes en donde no se hubiera contemplado la necesidad de soporte bidi) las etiquetas no están disponibles. Este artículo analiza cómo usted puede utilizar los caracteres de control Unicode para estos casos.

Para obtener más información sobre cómo funciona el algoritmo bidi y dónde necesita ayuda, lea Lo que necesita saber sobre el algoritmo bidi y el lenguaje de etiquetas en línea.

Respuesta

Casos de uso

Es importante comenzar con decir que, para las personas que desarrollan contenido, existen algunas ventajas del uso de etiquetas, si está disponible, para controlar el comportamiento bidireccional (bidi) en vez de los caracteres de control Unicode (lea controles Unicode vs. etiquetas para soporte bidi). Si está diseñando o actualizando un esquema o una especificación, de verdad debería implementar las etiquetas para controlar el comportamiento bidi en lugar de depender de los caracteres de control Unicode y evitar la creación de contextos en donde no se puede utilizar el lenguaje de etiquetas (por ejemplo, texto en idioma natural en valores de atributo). Para obtener más información, consulte Mejores prácticas para la internacionalización de XML.

Sin embargo, los caracteres de control Unicode pueden ser útiles en situaciones donde el etiquetado no está disponible. Por ejemplo, las etiquetas preexistentes, como elementos title de HTML y cualquier valor de atributo HTML que contenga texto en idioma natural.

Si se está trabajando con caracteres de control Unicode, sólo deberían usarse para los controles en línea. Los controles de caracteres bidi que expanden los párrafos o los elementos de listas, etc., no funcionan bien para el etiquetado de nivel de bloque, debido a la manera en la que se manejan los espacios en blanco en el texto fuente y al requisito de manejar las etiquetas preexistentes y el alcance mediante la jerarquía del etiquetado.

Pares de caracteres de control

Unicode proporciona códigos de formato invisibles y especiales para establecer la dirección base para anular el algoritmo bidireccional en texto plano. Incluye lo siguiente:

Estos caracteres se utilizan en pares. Uno de los primeros cuatro caracteres mencionados anteriormente se utiliza para indicar el comienzo de una extensión de texto; el último carácter (PDF) en cada caso pone fin a dicha extensión.

Los caracteres de control integrados establecen la dirección base para el texto que rodean. Los caracteres de anulación deshabilitan el algoritmo bidi por completo para el texto que rodean.

Si no comprende cuándo es importante establecer la dirección base, lea Lo que necesita saber sobre el algoritmo bidi y el etiquetado en línea.

El siguiente ejemplo ilustra cómo estos caracteres de control podrían utilizarse en texto plano:

A continuación, se muestra una sugerencia en HTML que incluye el título del documento al que se lo relaciona, y cierto texto que indica el idioma del documento destino. Observe que el texto '(FAQ)' aparece hacia la derecha del texto persa. Esto es incorrecto.

Ver código.A tooltip without control characters.

Versión ASCII:
'SNOITSEUQ DEKSA YLTNEUQERF (faq)' [en persa].

El título correcto tiene el texto '(FAQ)' a la izquierda del texto persa, como se muestra a continuación.

Ver código.A tooltip with control characters.

Versión ASCII:
'(faq) SNOITSEUQ DEKSA YLTNEUQERF' [en persa].

Para lograr el efecto deseado, agregamos dos caracteres de control invisibles, U+202B, INTEGRACIÓN DE DERECHA A IZQUIERDA (RLE), y U+202C, FORMATO DIRECCIONAL POP (PDF), representados en el siguiente recorte de código como entidades de caracteres numéricos:

title="'‫...‬' [in Persian]"

(Para compararlo con la forma de lograr el mismo resultado si el etiquetado está disponible, vea la siguiente sección titulada Correspondencias.)

Caracteres RLM y LRM

Otros dos caracteres de control direccional invisibles proporcionados por Unicode generalmente no tienen etiquetas equivalentes y deberían utilizarse en forma literal o de caracteres. Son menos problemáticos porque se los utiliza individualmente, es decir, no se los utiliza en pares para delimitar las extensiones de texto como los otros caracteres de control que hemos mencionado. Su uso probablemente sea mucho más común que el de los controles de estado que se describieron.

Por ejemplo, la imagen que aparece a continuación muestra lo que probablemente vea cuando confíe solamente en el algoritmo bidireccional para mostrar un número de dirección en MAC en un contexto de derecha a izquierda.

Ver código.Dirección en MAC ordenada en forma correcta.

La imagen siguiente muestra el resultado esperado.

Ver código.Dirección en MAC ordenada en forma incorrecta.

Para lograr el efecto deseado, simplemente agregamos dos caracteres de control invisibles, U+200E, SIGNO DE IZQUIERDA A DERECHA (RLM) justo antes del inicio del número.

(Podríamos haber logrado el mismo resultado con el uso de los códigos de estado antes mencionados, pero esto es más simple, y, por lo tanto, lo recomienda el Estándar Unicode.)

Para obtener más información sobre cómo utilizar estos dos caracteres, lea Lo que necesita saber sobre el algoritmo bidi y el etiquetado en línea.

A propósito

Correspondencias

Si existe el etiquetado direccional y se puede utilizar, estos códigos de control deberían ser equivalentes en comportamiento al etiquetado. La siguiente tabla (adaptada de Unicode en XML y otros lenguajes de etiquetas) proporciona las etiquetas adecuadas para reemplazar cada conjunto de códigos.

Carácter Código Etiquetado equivalente Comentario
LRE U+202A dir = "ltr" atributo en un elemento de bloque o en línea
RLE U+202B dir = "rtl" atributo en un elemento de bloque o en línea
LRO U+202D <bdo dir = "ltr">  
RLO U+202E <bdo dir = "rtl">  
PDF U+202C nada cuando se utiliza para darle fin a la RLE o LRE (el cierre lo da la etiqueta final del elemento que incluye el atributo dir)
</bdo> cuando se utiliza para darle fin a la RLO o LRO

Con el uso de HTML, en un contexto que permita el uso del lenguaje de etiquetas, se codificaría la estrategia correspondiente a la visualización del texto en el ejemplo de la sección "Pares de caracteres de control", arriba, de la siguiente manera:

See '<a dir="rtl" lang="fa" href="...">...</a>' [in Persian].

Obtendría este resultado:

Ver código.Correctly ordered text.

En el caso del XML tendría que usar las etiquetas bidi provistas en el DTD o esquema y aplicar la direccionalidad con CSS.

Observe cómo el lenguaje de etiquetas utilizado para soportar el atributo dir también se usa para soportar la información de idioma. Es frecuente encontrar el lenguaje de etiquetas donde debe estar, cuando se necesite un atributo dir. (La información de idioma no se puede expresar con los caracteres de control.)

Observe que una diferencia importante entre el lenguaje de etiquetas y los códigos de control es que un solo atributo dir puede corresponder a toda una página o sección de una página, mientras que el efecto de LRE/RLE termina al final del párrafo.

Dinos qué piensas (en Inglés).

Suscripción a feed RSS.

Nuevos recursos

Noticias de la página de inicio

Twitter (Noticias de la página de inicio)

‎@webi18n

Lecturas complementarias

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

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

Traducido del inglés con fecha 2009-07-10. Traducción modificada por última vez el 2011-05-30 10:57 GMT.

Para ver el historial de cambios del documento, busque qa-bidi-unicode-controls en la bitácora de internacionalización.