Continguts:

En aquest tema es tracten dues qüestions importants que afecten la internacionalització de l'HTML: l'especificació de l'idioma (l'atribut lang) i el sentit (l'atribut dir) del text d'un document.
ESPECIFICACIÓ DE l'IDIOMA DEL CONTINGUT: L'ATRIBUT lang
L'atribut lang s'encarrega d'especificar l'idioma (language) base dels valors dels atributs i del text del contingut d'un element.
Codis d'idioma
El valor de l'atribut lang és un codi d'idioma que identifica un idioma natural parlat, escrit o, d'altra manera, utilitzat per a la comunicació d'informació entre diferents persones. Els llenguatges de computador estan explícitament exclosos dels codis d'idioma.

La RFC1766 defineix i explica els codis d'idioma que s'han d'utilitzar en els documents HTML.

Breument, els codis d'idioma consisteixen en un codi principal i una sèrie (possiblement buida) de subcodis:
	codi-idioma = codi-principal ( "-" subcodi )*

Algunes mostres de codis d'idioma són:
	"es": espanyol
	"en": anglès 
	"en-US": anglès americà
	"en-cockney": anglès londinenc
	"i-navajo": idioma navajo parlat pels americans nadius
	"x-klingon": El tag principal "x" indica un
                     tag d'idioma experimental

Els codis principals que consten de dues lletres estan reservats per a les abreviacions d'idioma de la ISO 639. Els codis de dues lletres inclouen fr (francès), de (alemany), it (italià), nl (holandès), el (grec), es (espanyol), pt (portuguès), ar (àrab), he (hebreu), ru (rus), zh (xinès), ja (japonès), hi (indi), ur (urdu) i sa (sànscrit).

Qualsevol subcodi de dues lletres s'entén que és un codi de país de la ISO 3166.
Herència dels codis d'idioma
Un element hereta la informació del codi d'idioma d'acord amb el següent ordre de precedència (del més alt al més baix):


En aquest exemple, l'idioma principal del document és el francès ("fr"). Un paràgraf es declara com espanyol ("es"), després del qual l'idioma principal torna a ser el francès. El següent paràgraf inclou una frase inserida en japonès ("ja"), després de la qual l'idioma principal torna a ser el francès:
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
      "http://www.w3.org/TR/REC-html40/strict.dtd">
   <HTML lang="fr">
   <HEAD>
      <TITLE>Un document multilingue</TITLE>
   </HEAD>
   <BODY>
      ...Interpretat com a francès...
      <P lang="es">...Interpretat com a espanyol...
      <P>...Interpretat com a francès una altra vegada...
      <P>...Text en francès interromput per<I lang="ja">una
          mica de japonès</I>i el francès comença aquí altra vegada...
   </BODY>
   </HTML>

Nota. Les cel·les de les taules poden heretar els valors de lang, no del seu pare sino de la primera cel·la d'una expansió (span).
Interpretació dels codis d'idioma
En el context de l'HTML, un codi d'idioma hauria de ser interpretat pels agents d'usuari com una jerarquia de tokens abans que com un sol token. Quan un agent d'usuari ajusta la presentació d'acord amb la informació d'idioma (per exemple, comparant els codis d'idioma del full d'estil i els valors de l'atribut lang), sempre hauria de preferir una unificació exacta, però també hauria de considerar suficient la unificació dels codis principals. Així, si s'assigna el valor "en-US" per a l'atribut lang de l'element HTML, un agent d'usuari hauria de preferir primer la informació d'estil que unifiqui amb "en-US", i després la que unifiqui amb el valor més general "en".

Nota. Les jerarquies del codi d'idioma no garanteixen que tots els idiomes amb un prefix comú seran entesos pels qui dominen un o més d'aquells idiomes. Aquestes jerarquies permeten a un usuari sol·licitar aquesta comunalitat quan aquell usuari domini tots aquests tipus d'idiomes.
ESPECIFICACIÓ DEL SENTIT DEL TEXT I DE LES TAULES: L'ATRIBUT dir
L'atribut dir especifica el sentit bàsic del text direccionalment neutral (és a dir, el text que no té una direccionalitat (sentit) inherent tal i com està definida a Unicode) i la direccionalitat de les taules.
Introducció a l'algorisme bidireccional
El següent exemple il·lustra el comportament esperat de l'algorisme bidireccional. Implica l'anglès, una escriptura d'esquerra a dreta, i l'hebreu, una escriptura de dreta a esquerra.

Considerem el següent text d'exemple:
	english1 HEBREW2 english3 HEBREW4 english5 HEBREW6
Els caràcters d'aquest exemple (i en tots els exemples relacionats) estan emmagatzemats en el computador de la manera que es mostren aquí: el primer caràcter del fitxer és "e", el segon és "n", i l'últim és "6".

Suposem que l'idioma predominant del document que conté aquest paràgraf és l'anglès. Això significa que el sentit base és d'esquerra a dreta. La presentació correcta d'aquesta línia seria:
	english1 2WERBEH english3 4WERBEH english5 6WERBEH
	         <------          <------          <------
	            H                H                H
	------------------------------------------------->
	                        A
(A = anglès; H = hebreu)

Les línies de guions indiquen l'estructura de la frase: l'anglès és la llengua predominant i s'hi ha inserit algun text hebreu. Per a assolir la presentació correcta no es requereix codi addicional ja que els fragments en hebreu són reversats correctament pels agents d'usuari que apliquen l'algorisme bidireccional.

Si, pel contrari, l'idioma predominant del document és l'hebreu, el sentit base és de dreta a esquerra. La presentació correcta seria, per tant:
	6WERBEH english5 4WERBEH english3 2WERBEH english1
	        ------->         ------->         ------->
	           A                A                A
	<-------------------------------------------------
	                         H
En aquest cas, la frase sencera ha estat presentada de dreta a esquerra i les seqüències inserides en anglès han estat pertinentment reversades per l'algorisme bidireccional.
Herència de la informació del sentit del text
L'algorisme bidireccional d'Unicode requereix un sentit base del text per als blocs de text. Per a especificar el sentit base d'un element block-level, cal inicialitzar l'atribut dir de l'element. El valor per defecte de l'atribut dir és "ltr" (text d'esquerra a dreta).

Quan l'atribut dir es fixa per a un element block-level, aquest resta efectiu per a tota la durada de l'element i de tots els elements block-level aniuats. Inicialitzant l'atribut dir en un element aniuat se sobreescriu el valor heretat.

Per fixar el sentit base del text per a tot un document sencer, cal inicialitzar l'atribut dir de l'element HTML.

Per exemple:
	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
	"http://www.w3.org/TR/REC-html40/strict.dtd">
	<HTML dir="RTL">
	<HEAD>
	<TITLE>...un títol de dreta a esquerra...</TITLE>
	</HEAD>
	<BODY>
	   ...text de dreta a esquerra...
	   <P dir="ltr">...text d'esquerra a dreta...</P>
	   <P>...més text de dreta a esquerra...</P>
	</BODY>
	</HTML>

Els elements inline, d'altra banda, no hereten l'atribut dir. Això significa que un element inline sense un atribut dir no obre un nivell addicional d'inserció respecte l'algorisme bidireccional. (Aquí, un element es considera block-level o inline basant-se en la seva presentació per defecte. Cal notar que els elements INS i DEL poden ser block-level o inline segons el context en el que es trobin.)
Inicialitzar el sentit del text inserit
L'algorisme bidireccional d'Unicode reversa automàticament les seqüències inserides de caràcters d'acord amb la seva direccionalitat inherent (tal i com s'il·lustra en els exemples previs). Tanmateix, en general només es pot considerar un nivell d'inserció. Per a assolir nivells addicionals d'insercions de canvis de sentit, cal fer ús de l'atribut dir en un element inline.

Ara, considerem aquest exemple de text:
	english1 HEBREW2 english3 HEBREW4 english5
Suposem que l'idioma predominant del document que conté aquest paràgraf és l'anglès. A més, la frase prèvia en anglès conté una secció en hebreu que s'extén des de "HEBREW2" fins a "HEBREW4" i la secció en hebreu conté una cita en anglès (english3). La presentació desitjada per a aquest text és, per tant:
	english1 4WERBEH english3 2WERBEH english5
	                 ------->
	                    A
	          <-----------------------
	                    H
	----------------------------------------->
	                    A
Per a assolir dos canvis de sentit inserits cal subministrar informació addicional, la qual cosa es fa delimitant explícitament la segona inserció. En aquest exemple utilitzem l'element SPAN i l'atribut dir per a marcar el text:
   english1 <SPAN dir="RTL">HEBREW2 english3 HEBREW4</SPAN> english5
Els autors poden també utilitzar caràcters especials d'Unicode per a assolir múltiples canvis de sentit inserits. Per obtenir la inserció d'esquerra a dreta, cal envoltar el text inserit amb els caràcters LEFT-TO-RIGHT EMBEDDING ("LRE", 202A hexadecimal) i POP DIRECTIONAL FORMATTING ("PDF", 202C hexadecimal). Per obtenir la inserció de dreta a esquerra, cal envoltar el text inserit amb els caràcters RIGHT-TO-LEFT EMBEDDING ("RTE", 202B hexadecimal) i PDF.

Utilitzar el codi de direccionalitat HTML amb els caràcters Unicode. Els autors i els dissenyadors de software de desenvolupament haurien d'estar alerta dels conflictes que poden sorgir si s'utilitza l'atribut dir en elements inline (incloent-hi el BDO) concurrentment amb els corresponents caràcters de formatat d'Unicode. Preferentment, s'hauria d'utilitzar un dels dos mètodes exclusivament. El mètode de marques ofereix una millor garantia d'integritat estructural del document i evita alguns problemes a l'hora d'editar text HTML bidireccional amb un simple editor de text, però algun software pot ser més apte per usar caràcters Unicode. Si s'utilitzen ambdós mètodes, cal tenir molt de compte d'assegurar un aniuament adient de les marques i de la inserció o invalidació direccional, d'altra manera els resultats de la presentació són indefinits.
Invalidació de l'algorisme bidireccional: l'element BDO
L'algorisme bidireccional i l'atribut dir generalment són suficients per tractar els canvis de sentit inserits. No obstant, poden sorgir algunes situacions en què l'algorisme bidireccional resulti en una presentació incorrecta. L'element BDO permet inhabilitar l'algorisme bidireccional per a fragments de text seleccionats.

La bidireccionalitat i la codificació de caràcters. D'acord amb la RFC1555 i la RFC1556 hi ha convencions especials per a l'ús dels valors del paràmetre "charset" per a indicar tractament bidireccional en els mails MIME, en particular, per a distingir entre direccionalitat visual, implícita i explícita. El valor "ISO-8859-8" (per a l'hebreu) d'aquest paràmetre denota codificació visual, "ISO-8859-8-i" denota bidireccionalitat implícita, i "ISO-8859-8-e" denota direccionalitat explícita.

Com que l'HTML utilitza l'algorisme de bidireccionalitat d'Unicode, els documents conformats codificats usant la ISO 8859-8 han d'estar etiquetats com a "ISO-8859-8-i". El control direccional explícit és també possible amb l'HTML, però no pot ser expressat amb la ISO 8859-8, per tant "ISO-8859-8-e" no s'ha d'utilitzar.

El valor "ISO-8859-8" implica que el document està formatat visualment, abusant d'algunes marques (tals com TABLE amb alineació a la dreta i sense plegament de línies) per a assegurar una visualització raonable en agents d'usuari antics que no suporten la bidireccionalitat. Aquests documents no estan conformats segons l'especificació de l’HTML 4.0. Si és necessari poden conformar amb l'especificació de l'HTML 4.0 (i al mateix temps seran visualitzats correctament en els agents d'usuari antics) mitjançant l'addició de l'element BDO on sigui necessari. Contràriament al que es diu en la RFC1555 i la RFC1556, la ISO 8859-6 (àrab) no és una ordenació visual.
Referències a caràcters per a la direccionalitat i el control de les associacions
Com que de vegades poden sorgir ambigüetats sobre la direccionalitat (sentit) de certs caràcters (per ex., els de puntuació), l'especificació d'Unicode inclou caràcters per a permetre la resolució més adient. A més, Unicode inclou alguns caràcters per a controlar el comportament d'associació on sigui necessari (per ex., alguns casos amb les lletres aràbigues). L'HTML 4.0 inclou referències de caràcter per a aquests caràcters.

El següent extracte de DTD presenta algunes de les entitats direccionals:
   <!ENTITY zwnj CDATA "&#8204;"--=amplada zero no associativa-->
   <!ENTITY zwj CDATA "&#8205;"--=amplada zero associativa-->
   <!ENTITY lrm CDATA "&#8206;"--=marca de "d'esquerra a dreta" -->
   <!ENTITY rlm CDATA "&#8207;"--=marca de "de dreta a esquerra" -->
L'entitat zwnj s'utilitza per a bloquejar el comportament associatiu en contextos on l'associació succeïrà però no hauria de fer-ho. L'entitat zwj fa l'oposat; força l'associació quan no succeeix però hauria de fer-ho. Per exemple, la lletra aràbiga "HEH" s'utilitza per a abreujar "Hijri", el nom del sistema de calendari islàmic. Com que la forma "HEH" en sí mateixa sembla el dígit cinc tal com s'utilitza en l'escriptura aràbiga (basada en els dígits índics), per tal de preveure la confusió entre "HEH" i un últim dígit cinc d'un any, s'utilitza la forma inicial "HEH". No obstant, no hi ha cap context següent (és a dir, una lletra associada) a la que es pugui associar "HEH". El caràcter zwj facilita aquest context.

De manera similar, en els textos perses hi ha casos en què una lletra que normalment s'associaria a una lletra subseqüent, en cursiva no hauria de fer-ho. El caràcter zwnj s'utilitza per a bloquejar l'associació en aquests casos.

Els altres caràcters, lrm i rlm, s'utlitzen per a forçar la direccionalitat dels caràcters direccionalment neutrals. Per exemple, en un signe de cometes dobles entre una lletra aràbiga (de dreta a esquerra) i una lletra llatina (d'esquerra a dreta), el sentit del signe de cometes no és clar (està afitant el text àrab o el llatí?). Els caràcters lrm i rlm tenen una propietat direccional però cap propietat d'amplada i cap propietat de trencament de paraula/línia. Podeu consultar Unicode per més detalls.

Reflectir glyphs de caràcters. En general, l'algorisme bidireccional no reflecteix glyphs de caràcters sinó que els deixa inalterats. Una excepció són caràcters com els parèntesis (veieu Unicode, taula 4-7). En els casos en què es desitja obtenir un efecte de reflexe (mirall), per exemple, pels Geroglífics Egipcis, el Bustrophedon grec o efectes de disseny especials, això s'hauria de controlar amb estils.
L'efecte dels fulls d'estil sobre la bidireccionalitat
En general, el fet d'utilitzar fulls d'estil per a canviar la presentació visual d'un element de block-level a inline o viceversa és directe. No obstant, com que l'algorisme bidireccional es basa en la distinció inline/block-level, cal tenir una especial cura durant aquesta transformació.

Quan un element inline que no té un atribut dir és transformat a l'estil d'un element block-level mitjançant un full d'estil, hereta l'atribut dir del seu element de bloc pare més proper per a definir el sentit bàsic del bloc.

Quan un element de bloc que no té un atribut dir és transformat a l'estil d'un element inline mitjançant un full d'estil, la presentació resultant hauria de ser equivalent, en termes de formatat bidireccional, al format obtingut afegint explícitament un atribut dir (assignant-li el valor heretat) a l'element transformat.
Tancar
Pàgina Principal
Introducció al Manual d'HTML Dinàmic
Glossari
Referències























HTML 4.0
Introducció al manual d'HTML 4.0
Taules
Formularis
Objectes, imatges i applets
Scripts
Informació de l'idioma i sentit del text
Frames
Nous elements
Elements menyspreuats i obsolets
Fulls d'estil
Nous atributs de l'HTML 4.0
Índex d'atributs nous
Índex d'atributs menyspreuats
DTD
Annexe












Introducció als CSS
Introducció als CSS2 i al manual
Propietats CSS2
Fulls d'estil audibles
Model de caixa
Sintaxi i tipus bàsics de dades
Model de formatat visual
Detalls del model de formatat visual
Assignar valors de propietats, la cascada i l'herència
Interfície d'usuari
Efectes visuals
Text
Taules
Fonts
Contingut generat, numeració automàtica i llistes
Colors i fons
Selectors
Tipus de mitjans
Mitjans paginats
Suport de CSS2
Annexe




Introducció al DOM
DOM Nivell 1 - Nucli
DOM Nivell 1 - HTML
Articles sobre el DOM






















Programació en DHTML
Demos