Índice
Esta sección do documento trata duas questións importantes que afectan a internacionalización da HTML: a especificación do idioma (o atributo lang ) e a dirección (o atributo dir ) do texto dun documento.
Pode-se utilizar a información especificada co atributo lang para que o axente de usuário controle a representación de diferentes maneiras. Algunhas situacións nas que a información sobre o idioma fornecida polo autor pode ser útil incluen:
O atributo lang especifica o idioma do conteúdo do elemento e dos valores dos atributos; a sua releváncia para un atributo dado depende da sintaxe e a semántica do atributo e da operación implicada.
O propósito do atributo lang é permitir que os axentes de usuário mostren o conteúdo con máis sentido baseando-se na práctica cultural aceitada dun idioma dado. Isto non implica que os axentes de usuário deban mostrar os caracteres típicos dun idioma concreto con menos sentido; os axentes de usuário deben-se esforzar en mostrar todos os caracteres, sen importar o valor especificado en lang .
Por exemplo, se os caracteres do alfabeto grego aparecen no meio dun texto en galego:
<P><Q lang="gl">Os seus super-poderes eran o resultado das
radiacións γ,</Q> explicou.</P>
un axente de usuário (1) deberia tentar mostrar o conteúdo en galego de maneira apropriada (p.ex., ao seleccionar as aspas de citación) e (2) debe esforzar-se en mostrar-lo mesmo se non é un carácter do galego.
Consulte a sección sobre caracteres que non se poden mostrar para información relacionada.
O valor do atributo lang é un código de idioma que identifica unha língua natural falada, escrita ou usada doutra maneira para a comunicación de información entre persoas. As linguaxes informáticas excluen-se explicitamente dos códigos de idioma.
[RFC1766] define e explica os códigos de idioma que se deben utilizar nos documentos HTML.
Brevemente, os códigos de idioma consisten nun código primário e talvez unha série vacia de sub-códigos:
código-de-idioma = código-primário ( "-" sub-código )*
Velaqui alguns códigos de idioma:
Na [ISO639] reservan-se códigos primários de duas cifras paraabreviaturas de idiomas. Códigos de duas letras incluen fr (francés), de (alemán), it (italiano), nl (holandés), el (grego), es (español), pt (portugués), ar (árabe), he (hebreu), ru (ruso), zh (chinés), ja (xaponés), hi (hindi), ur (urdu), e sa (sánscrito).
Entende-se que calquer sub-código de duas letras é un código de país da [ISO3166] .
Un elemento herda información de código de idioma dacordo coa orde de precedéncia seguinte (de maior a menor):
Content-Language: en-cockney
Neste exemplo, a linguaxe primária do documento é o francés ("fr"). Un parágrafo declara-se como español ("es") e logo a linguaxe primária volve a ser francés. O parágrafo seguinte inclui unha frase embebida en xaponés ("ja") e logo a linguaxe primária torna a ser o 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>
...Intepretado como francés... <P lang="es">...Interpretado como español... <P>...Interpretado como francés outra vez... <P>...Texto en francés interrompido por<EM lang="ja">texto en
xaponés</EM>O texto en francés volve a comezar aqui... </BODY> </HTML>
No contexto da HTML, os axentes de usuário deberian interpetar un código de idioma como unha hierarquia de elementos máis que como un elemento único. Cando un axente de usuário axusta a representación dacordo coa información de idioma (por exemplo, comparando códigos de idioma e valores lang de follas de estilo), deberia sempre favorecer unha equivaléncia exacta, mais deberia tamén considerar que poida chegar coa equivaléncia dos códigos primários. Asi, se o atributo lang de "en-US" se aplica ao elemento HTML , un axente de usuário deberia preferir sempre a información de estilo que corresponda con "en-US" primeiro e logo co valor máis xeral "en".
Nota. As hierarquias de códigos de idiomas non garanten que todos os idiomas cun prefixo comun vaian ser comprendidos por quen dominen un ou máis deses idiomas. Permiten que un usuário solicite esta característica de valores comuns cando sexa o caso para ese usuário.
Definicións do atributo
Ademáis de especificar o idioma dun documento co atributo lang , os autores poden necesitar especificar a direccionalidade de base (esquerda a direita ou direita a esquerda) de fragmentos do texto dun documento, de estrutura de tabela, etc. Isto fai-se co atributo dir .
A especificación [UNICODE] asigna-lle a direccionalidade aos caracteres e define un algoritmo (complexo) para determinar a direccionalidade correcta dun texto. Se un documento non contén un carácter mostrábel de direita a esquerda, un axente de usuário conforme non ten por que aplicar o algoritmo bidireccional [UNICODE] . Se un documento contén caracteres de direita a esquerda, e se o axente de usuário mostra estes caracteres, o axente de usuário debe usar o algoritmo bidireccional.
Ainda que Unicode especifique caracteres especiais que traten a dirección do texto, a HTML oferece construtos de código de nível superior que fan o mesmo: o atributo dir (non confundir co elemento DIR ) e o elemento BDO . Asi, para expresar unha citación en hebreu, é máis intuitivo escreber
<Q lang="he" dir="rtl">...citación en hebreu...</Q>
que o equivalente con referéncias Unicode:
‫״...citación en hebreu...״‬
Os axentes de usuário non deben utilizar o atributo lang para determinar a direccionalidade do texto.
O atributo dir é herdado e pode ser anulado. Consulte a sección sobre herdanza da información sobre a dirección do texto para máis detalles.
O exemplo seguinte ilustra o comportamento esperado do algoritmo bidireccional. Incorpora o inglés, que se escrebe de esquerda a direita, e o hebreu, que se escrebe de direita a esquerda.
Considere o texto de exemplo seguinte:
inglés HEBREU2 inglés3 HEBREU4 inglés5 HEBREU6
Os caracteress deste exemplo (e de todos os exemplos relacionados) armacenan-se no computador tal e como se mostran aqui: o primeiro carácter do ficheiro é "i", o segundo é "n" e o derradeiro é "6".
Supoña que o idioma predominante do documento que contén este parágrafo é o inglés. Isto significa que que a dirección base é de esquerda a direita. A apresentación correcta desta liña seria:
inglés1 2UERBEH inglés3 4UERBEH inglés5 6UERBEH
<------ <------ <------
H H H
------------------------------------------------->
E
As liñas de trazos indican a estrutura da oración: o inglés predomina e hai algo de texto embebido en hebreu. Lograr a representación correcta non require maior codificación, xa que os axentes que apliquen o algoritmo bidireccional invirten correctamente os fragmentos en hebreu.
Se, doutra parte, o idioma predominante do documento é o hebreu, a dirección de base é direita a esquerda. A representación correcta é polo tanto:
6UERBEH inglés5 4UERBEH inglés3 2UERBEH inglés1
-------> -------> ------->
E E E
<-------------------------------------------------
H
Neste caso, a oración completa apresenta-se de direita a esquerda e o algoritmo bidireccional invertiu apropriadamente as secuéncias embebidas en inglés.
O algoritmo bidireccional de Unicode require unha dirección de texto base para os blocos de texto. Para especificar a dirección de base dun elemento do nível de bloco, indique-o no atributro dir . O valor por omisión do atributo dir é "ltr" (texto de esquerda a direita).
Cando se asigna o atributo dir para un elemento de nível de bloco, manten-se válido encanto dura o elemento e calquer elemento a nível de bloco aniñado. Se se indicar un atributo dir nun elemento aniñado, anula-se o valor herdado.
Para marcar a dirección de texto base dun documento inteiro, indique-se o atributo dir do elemento HTML .
Por exemplo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<HTML dir="RTL">
<HEAD>
<TITLE>...título de direita a esquerda...</TITLE>
</HEAD>
...texto de direita a esquerda... <P dir="ltr">...texto de esquerda a direita...</P>
<P>...texto de direita a esquerda outra vez...</P>
</HTML>
Os elementos de liña, por outra banda, non herdan o atributo dir . Isto significa que un elemento de liña sen atributo dir non abre un nível adicional de embebido a respeito do algoritmo bidireccional. (Aqui, un elemento considera-se que é de nível de bloco ou de liña baseando-nos na sua apresentación por omisión. Observe-se que os elementos INS e DEL poden ser de nível de bloco ou de liña dependendo do seu contexto).
O algoritmo bidireccional [UNICODE] invirte automaticamente secuéncias de caracteres embebidas dacordo coa sua direccionalidade inerente (como se ilustra nos exemplos anteriores). Porén, en xeral só se pode responsabilizar de un nível de embebido. Para atinxir máis níveis de mudanza na dirección embebida, hai que facer uso do atributo dir dun elemento de liña.
Considere o mesmo texto de exemplo que antes:
inglés1 HEBREU2 inglés3 HEBREU4 inglés5 HEBREU6
Supoña que o idioma predominante do documento que contén este parágrafo é inglés. Ademáis, a oración en inglés anterior contén unha sección en hebreu que se extende desde HEBREU2 a HEBREU4 e a sección en hebreu contén unha cita en inglés (inglés3). A apresentación desexada do texto é portanto:
inglés1 4UERBEH inglés3 2UERBEH inglés5 6UERBEH
------->
E
<-----------------------
H
------------------------------------------------->
E
Para lograr dous cámbios na dirección embebida, debemos fornecer información adicional, que facemos delimitando explicitamente o segundo embebido. Neste exemplo, usamos o elemento SPAN e o atributo dir para etiquetar o texto:
inglés1 <SPAN dir="RTL">HEBREU2 inglés3 HEBREU4</SPAN> inglés5 HEBREU6
Os autores poden usar tamén os caracteres especiais de Unicode para lograr cámbios na dirección embebida múltipla. Para lograr un embebido de esquerda a direita, rodee o texto embebido cos caracteres LEFT-TO-RIGHT EMBEDDING (embebido de esquerda a direita, "LRE", hexadecimal 202A) e POP DIRECTIONAL FORMATTING (salto de formatado de dirección, "PDF", hexadecimal 202C). Para lograr un embebido de esquerda a direita, rodee o texto embebido cos caracteres RIGHT-TO-LEFT EMBEDDING (embebido de direita a esquerda, "RTE", hexadecimal 202B) e PDF.
Uso do código de direccionalidade da HTML con caracteres Unicode. Os autores e deseñadores de aplicacións de creación deberian ter en conta que aparecen conflitos se se usa o atributo dir con elementos de liña (incluído BDO ) xunto cos caracteres de formato correspondentes de [UNICODE] . Preferibelemente haberia que utilizar exclusivamente un ou o outro. O método do código garante mellor a integridade estrutural do documento e alívia alguns problemas ao editar texto HTML bidireccional cun editor de texto simples, mais algunhas aplicacións poden ser máis capaces de usar os aracteres [UNICODE] . Se se usaren os dous métodos, haberia que extremar a atención para asegurar-se o aniñado apropriado do código e o embebido direccional ou anular; doutro modo, os resultados mostrados son imprevisíbeis.
<!ELEMENT BDO - - (%inline;)* -- anulación da bidireccionalidade I18N -->
<!ATTLIST BDO
%coreattrs; -- id, class, style, title --
lang %LanguageCode; #IMPLIED -- código de idioma --
dir (ltr|rtl) #REQUIRED -- direccionalidade --
>
Etiqueta inicial: requerida, Etiqueta final: requerida
Definicións do atributo
Atributos que se definen noutro sítio
O algoritmo de bidireccionalidade e o atributo dir normalmente abondan para controlar os cámbios de dirección embebidos. Porén, poden-se dar situacións nas que o algoritmo bidireccional produza unha representación incorrecta. O elemento BDO permite que os autores desactiven o algoritmo de bidireccionalidade para fragmentos de texto seleccionados.
Considere un documento que conteña o mesmo texto que antes:
inglés1 HEBREU2 inglés3 HEBREU4 inglés5 HEBREU6
mais supoña que este texto xa foi posto en orde visual. Unha razón disto pode ser que o padrón MIME ( [RFC2045] , [RFC1556] ) favorece a orde visual, isto é, que as secuéncias de caracteres de direita a esquerda insiren-se de direta a esquerda no fluxo de bytes. Nun e-mail, o anterior poderia ser formatado, incluídos os saltos de liña, como:
inglés1 2UERBEH inglés3
4UERBEH inglés5 6UERBEH
Isto entra en conflito co algoritmo bidireccional do [UNICODE] porque ese algoritmo invertiria 2UERBEH, 4UERBEH , e 6UERBEH unha segunda vez, mostrando as palabras en hebreu de esquerda a direita en vez de de direita a esquerda.
A solución neste caso é anular o algoritmo bidireccional colocando o trozo do email nun elemento PRE (para conservar os saltos de liña) e cada liña dun elemento BDO , cuxo atributo dir sexa LTR:
<PRE>
<BDO dir="LTR">inglés1 2UERBEH inglés3</BDO>
<BDO dir="LTR">4UERBEH inglés5 6UERBEH</BDO>
</PRE>
Isto di-lle ao algoritmo bidireccional "Deixa-me de esquerda a direita!" e produciria a representación desexada:
inglés1 2UERBEH inglés3
4UERBEH inglés5 6UERBEH
Haberia que usar o elemento BDO en cenários nos que se requira o control sobre a orde de secuéncia (p.ex.: números de partes en vários idiomas). O atributo dir é obrigatório para este elemento.
Os autores poden usar tamén caracteres de Unicode especiais para anular o algoritmo bidireccional -- LEFT-TO-RIGHT OVERRIDE (202D) ou RIGHT-TO-LEFT OVERRIDE (hexadecimal 202E). O carácter POP DIRECTIONAL FORMATTING (hexadecimal 202C) remata calquer anulación bidireccional.
Nota. Lembre que se producen conflitos se se utiliza o atributo dir con elementos de liña (incluído BDO ) xunto cos caracteres de formato de [UNICODE] correspondentes.
Bidireccionalidade e codificación de caracteres Dacordo con [RFC1555] e [RFC1556] , hai convencións especiais para o uso dos valores de parámetro"charset" para indicar o tratamento da bidireccionalidade en correo MIME, en concreto para distinguir entre direccionalidade visual, implícita e explícita. O valor do parámetro "ISO-8859-8" (para o hebreu) denota codificación visual, "ISO-8859-8-i" denota bidireccionalidade implícita e "ISO-8859-8-e" denota direccionalidade explícita.
Dado que a HTML usa o algoritmo de bidireccionalidade de Unicode, os documentos conformes codificados usando ISO 8859-8 deben-se etiquetar como "ISO-8859-8-i". O control direccional explícito tamén é posíbel con HTML, mais non pode ser expresado con ISO 8859-8, de modo que non se deberia utilizar "ISO-8859-8-e".
O valor "ISO-8859-8" implica que o documento se formata visualmente, usando mal algo de código (tal como TABLE con aliñamento à direita e sen axuste automático de liñas) para asegurar-se unha representación razoábel en axentes de usuário máis antigos que non aceitan a bidireccionalidade. Tais documentos non son conformes con esta especificación. De ser necesário, poden-se facer conformes coa especificación actual (e ao mesmo tempo mostrarán-se en axentes de usuário máis antigos) adicionando código BDO onde for necesário. Ao contrário do que se di en [RFC1555] e [RFC1556] , ISO-8859-6 (árabe) non é ordenación visual.
Dado que por veces se dan ambigüidades sobre a direccionalidade de certos caracteres (p.ex.: pontuación) a especificación [UNICODE] inclue caracteres que permiten a sua resolución adecuada. Asi mesmo, Unicode inclue alguns caracteres para controlar o comportamento de unión onde sexa necesário (p.ex., algunhas situacións coas letras do árabe). A HTML 4 inclue referéncias a caracteres para eses caracteres.
O seguinte fragmento de DTD apresenta algunhas das entidades direccionais:
<!ENTITY zwnj CDATA "‌"--=separador de ancho cero-->
<!ENTITY zwj CDATA "‍"--=conector de ancho cero-->
<!ENTITY lrm CDATA "‎"--=marca de esquerda a direita-->
<!ENTITY rlm CDATA "‏"--=marca de direita a esquerda-->
A entidade zwnj usa-se para bloquear o comportametno de unión en contextos nos que se daria, mais nos que non deberia. A entidade zwj fai o contrário; obriga a unir cando non se daria, mais si deberia. Por exemplo, a letra árabe "HEH" usa-se para abreviar "Hijri", o nome do sistema de calendário islámico. Dado que a forma isolada de "HEH" parece-se ao díxito cinco tal e como se emprega na escrita árabe (baseada en díxitos índicos), para evitar a confusión de "HEH" cun díxito cinco final dun ano, usa-se a forma inicial de "HEH". Porén, non hai un contexto que o siga (isto é, unha letra de unión) à que se poida unir "HEH". O carácter zwj fornece ese contexto.
De maneira parecida, nos textos en Persa, hai casos nos que unha letra que normalmente uniria unha letra posterior nunha conexión cursiva e non deberia. Usa-se o carácter zwnj para bloquear a unión en tais casos.
Os outros caracteres, lrm e rlm, usan-se para forzar a direccionalidade ou caracteres direccionalmente neutros. Por exemplo, se aparecen unhas aspas dobres entre unha letra árabe (direita a esquerda) e latina (esquerda a direita), a dirección das aspas non está clara (está a citar o texto en árabe ou en latino?). Os caracteres lrm e rlm teñen unha propriedade de dirección mais non un ancho e non unha propriedade de salto de palabra ou de liña. Consulte [UNICODE] para máis detalles.
Símbolos de caracteres reflectidos. En xeral, o algoritmo de bidireccionalidade non reflecte símbolos de caracteres senón que os deixa intactos. Unha exceición son os caracters tais como os parénteses (ver [UNICODE] , tabela 4-7). En casos onde si se quer reflectir, por exemplo nos hieroglifos exípcios, no bustrofedon grego, en efectos de deseño especiais, isto haberia que controlá-lo con estilos.
En xeral, o uso das follas de estilo para modificar a representación visual dun elemento de nível de bloco a de liña ou viceversa é doado. Porén, dado que o algoritmo de bidireccionalidade descansa sobre a dstinción de nível de liña e de bloco , hai que prestar especial atención durante a transformación.
Cando se transforma un elemento de liña que non ten o atributo dir ao estilo de elemento de bloco por meio dunha folla de estilo, herda o atributo dir do seu elemento de bloco pai para definir a dirección de base do bloco.
Cando se modifica un elemento de bloco que non ten un atributo dir a un estilo de elemento de liña, a representación representa deberia ser equivalente, en termos de formato de bidireccionalidade, ao formato obtido de adicionar explicitamente un atributo dir (asignado o valor herdado) ao valor transformado.