2010-12-14 19 views
17

Mi chiedevo qual è il significato dell'uso dell'attributo "lang" e di come questo differisce dall'uso del meta tag "Content-Language"?Qual è la differenza tra l'attributo lang e il tag <meta http-equiv = "Content-Language" = "en-US">?

Si consideri il seguente codice:

<html lang="en"> 
    <head> 
     <meta http-equiv="Content-Language" content="en-US"> 
    </head>... 

La mia ipotesi è che il browser sta leggendo il valore del meta tag, ma il DOM è interessato con l'attributo "lang". È corretto? Ci sono delle sfumature di cui non sono a conoscenza?

risposta

13

L'attributo lang (sull'elemento HTML) specifica la lingua per il documento (a meno che non sia sovrascritto con un altro attributo lang che può modificare la lingua per una sezione del documento).

L'intestazione HTTP Content-Language specifica la lingua del pubblico desiderato. Questo non è lo stesso della lingua in cui il documento è effettivamente scritto. Ad esempio, parte di un corso di lingua francese potrebbe consistere in una pagina scritta in francese, ma Content-Language sarebbe it come previsto per l'apprendimento di madrelingua inglese Francese.

Da the spec:

Il campo di entità-header Content-Language descrive il linguaggio naturale (s) del pubblico destinato all'ente chiusa. Si noti che questo potrebbe non essere equivalente a tutte le lingue utilizzate all'interno del corpo dell'entità.

Meta HTTP-equiv è l'intestazione HTTP del pover'uomo. Ha tutto il significato della vera intestazione HTTP, ma meno rispetto (e supporto).

Come regola generale, Content-Language è più interessante per i motori di ricerca e l'attributo lang è di maggiore interesse per gli screen reader.

+0

Curiosamente, ho appena scoperto l'http-equiv per il content-language per avere * più * supporto per browser rispetto all'intestazione HTTP corretta! Solo Firefox ha questo diritto: http://artdent.homelinux.net/~josh/language.html –

+0

Penso che lo classificherei come un bug in Firefox. Non dovrebbe prendere il Content-Language come specificando la lingua del documento. – Quentin

+0

Secondo HTML4 (e 5), dovrebbe. –

3

Intendono la stessa cosa: impostare la lingua del contenuto in questione, tuttavia l'attributo lang ha una precedenza più alta. Vedi 8.1.2 Inheritance of language codes. Gestiscono diversi casi d'uso: l'attributo lang può essere impostato su <i lang=la>exempla gratis</i> su un singolo elemento, mentre l'intestazione Content-Language può essere configurata globalmente dal server per essere applicata a un intero set di documenti.

I suoi esempi mostrano due modi equivalenti per impostare la lingua dell'elemento html, ma dal momento che l'attributo lang ha la precedenza, il valore sarà "en" e non "en-US".

+0

Anche se entrambe le risposte sono utili, penso che questa risposta sia la più sintetica, quindi la assegnerò con il segno di spunta verde. Grazie a entrambi jleedev e David Dorward! – mariachimike

+0

Non significano la stessa cosa, la risposta di Quentin spiega la differenza –