Criteri di successo WCAG · Level AA

WCAG 3.1.2: Lingua delle parti

WCAG 3.1.2 richiede che qualsiasi passaggio, frase o sezione di contenuto web scritto in una lingua diversa dalla lingua principale della pagina sia identificato in modo programmabile utilizzando l’attributo lang. Questo consente alle tecnologie assistive, in particolare ai lettori di schermo, di cambiare automaticamente i motori di pronuncia e di riprodurre il contenuto in modo accurato per gli utenti che si affidano all’output audio.

Cosa Significa Questa Regola

WCAG 3.1.2 — Language of Parts è un criterio di livello AA sotto il principio Comprensibile. Si basa direttamente sul 3.1.1 (Language of Page), che richiede che la lingua principale di un’intera pagina sia dichiarata. Il criterio 3.1.2 va oltre: ogni volta che un passaggio, una frase o una sezione di contenuto è scritto in una lingua diversa dalla lingua predefinita della pagina, quella porzione deve avere un attributo lang che identifichi la sua lingua specifica.

In termini pratici di HTML, questo significa applicare l’attributo lang a qualsiasi elemento che racchiuda un cambio di lingua. Il valore dell’attributo deve essere un tag di lingua BCP 47 valido — per esempio, lang='en' per l’inglese, lang='fr' per il francese, lang='de' per il tedesco o lang='tr' per il turco. I sottotag di regione (come lang='en-US' o lang='tr-TR') sono consentiti e consigliati quando la pronuncia specifica del dialetto è importante.

Un pass si verifica quando ogni segmento linguistico distinto che una persona che legge percepirebbe come appartenente a una lingua diversa è racchiuso in un elemento con il corretto attributo lang. Un fail si verifica quando è presente un passaggio in un’altra lingua ma non ha alcun attributo lang, o ne ha uno errato — per esempio, etichettare una frase francese come lang='de'.

WCAG riconosce tre eccezioni esplicite a questo criterio. Primo, i nomi propri — nomi di persona, nomi di marca, nomi geografici — non necessitano di marcatura della lingua anche quando provengono da un’altra lingua. Secondo, i termini tecnici che sono riconosciuti come elementi di vocabolario all’interno della lingua principale (come la locuzione latina in vitro usata in una pagina medica in inglese) sono esenti. Terzo, le parole di lingua indeterminata — parole che sono state assorbite così profondamente nella lingua principale che la loro origine è ambigua — sono anch’esse esenti. Queste eccezioni riflettono la realtà pratica per cui molti prestiti linguistici non richiedono un cambio di pronuncia per essere compresi correttamente.

L’attributo lang può essere inserito su qualsiasi elemento HTML, inclusi <span>, <p>, <div>, <blockquote>, <section> o anche <td> in una cella di tabella. L’attributo è ereditato da tutti gli elementi discendenti, quindi è sufficiente marcare un contenitore di alto livello se l’intero blocco è nella lingua di destinazione. È necessario marcare singoli elementi inline solo quando brevi frasi sono intercalate in paragrafi altrimenti monolingui.

Perché È Importante

I principali beneficiari di questo criterio sono gli utenti di screen reader, in particolare le persone cieche o con ipovisione. Gli screen reader si basano su motori di sintesi vocale (TTS) specifici per lingua. Quando uno screen reader turco incontra una frase francese senza un attributo lang='fr', tenta di pronunciare le parole francesi usando le regole fonetiche turche, producendo un output in gran parte incomprensibile. La persona che ascolta potrebbe non rendersi nemmeno conto che è avvenuto un cambio di lingua — sente semplicemente un audio confuso e perde completamente la comprensione del contenuto.

Si consideri uno scenario reale comune sui siti di e‑commerce e turismo turchi: una pagina di prodotto scritta in turco che include il nome del marchio e un breve slogan di marketing in inglese, seguito da una clausola legale in francese per i clienti europei. Senza marcatura della lingua sui segmenti in inglese e francese, una persona cieca che si affida a una voce TTS turca sentirà tre segmenti tutti pronunciati come se fossero in turco. Lo slogan inglese può essere intuibile per somiglianza fonetica, ma il testo legale francese diventa completamente incomprensibile — con il rischio che la persona perda informazioni contrattuali o di sicurezza critiche.

Anche le persone con disabilità cognitive che si affidano a strumenti di lettura tramite sintesi vocale (non solo screen reader dedicati) sono interessate. Molte estensioni browser mainstream di assistenza alla lettura usano l’attributo lang per selezionare la voce corretta. In sua assenza, lo strumento ignora il cambio di lingua o si limita a una singola voce per l’intera pagina, compromettendo la comprensione.

Oltre all’accessibilità, una corretta marcatura della lingua fornisce misurabili benefici SEO. I motori di ricerca usano gli attributi lang per indicizzare correttamente i contenuti multilingue, migliorando la probabilità che le pagine specifiche per lingua compaiano nei risultati di ricerca mirati geograficamente e linguisticamente. Anche i browser usano l’attributo per offrire suggerimenti di traduzione accurati, e gli strumenti di controllo ortografico lo usano per applicare il dizionario corretto. In sintesi, una corretta marcatura della lingua avvantaggia tutte le persone — non solo quelle con disabilità.

Si stima che oltre 2,2 miliardi di persone nel mondo abbiano qualche forma di deficit visivo, e decine di milioni si affidano quotidianamente agli screen reader. I contenuti web multilingue sono sempre più la norma nei mercati internazionali, rendendo la conformità a Language of Parts fondamentale per qualsiasi sito che serva un pubblico globale o multilingue.

Regole Axe-core Correlate

WCAG 3.1.2 richiede test manuali perché gli strumenti automatici non possono identificare in modo affidabile quali porzioni del testo di una pagina sono scritte in una lingua diversa da quella predefinita senza applicare algoritmi di rilevamento del linguaggio naturale (NLP) — e persino questi possono essere incerti con frasi brevi, nomi propri e terminologia tecnica.

  • Ispezione manuale — rilevamento della lingua: Gli scanner automatici come axe-core possono verificare che l’attributo lang sull’elemento <html> sia presente e valido (coperto dalle regole html-has-lang e html-lang-valid), ma non possono leggere l’intero corpo del testo e determinare se un dato passaggio è linguisticamente francese, tedesco o giapponese. Uno strumento non ha alcuna comprensione semantica del fatto che la stringa "Bonjour tout le monde" sia francese o una frase inventata, quindi non può segnalare l’assenza di lang='fr' sull’elemento circostante.
  • Ispezione manuale — valori lang errati: Se uno sviluppatore ha inserito un attributo lang su un elemento ma ha assegnato il codice di lingua sbagliato (per esempio, marcando testo spagnolo come lang='pt'), gli strumenti automatici vedranno un tag BCP 47 valido e non segnaleranno errori. Solo una persona che legga entrambe le lingue può identificare la discrepanza.
  • Ispezione manuale — ambito dei cambi di lingua: Anche quando gli attributi lang esistono, una persona deve confermare che l’attributo copra l’intera estensione del passaggio in lingua straniera — non solo la prima frase, e senza estendersi al contenuto adiacente che appartiene alla lingua principale. Gli strumenti automatici non hanno la capacità di comprensione del testo necessaria per fare questo tipo di valutazione.

Come Eseguire i Test

  1. Scansione automatizzata di base: Esegui axe DevTools (estensione del browser o integrazione CI) o Google Lighthouse sulla pagina. Cerca eventuali violazioni di html-has-lang o html-lang-valid — queste indicano che persino la dichiarazione della lingua a livello di pagina è mancante o errata, il che è un problema preliminare da risolvere prima di affrontare il 3.1.2. Nota che nessuno dei due strumenti segnalerà attributi lang inline mancanti, quindi questo passaggio serve solo a stabilire una base.
  2. Audit visivo del contenuto: Leggi l’intero contenuto della pagina e identifica ogni passaggio, frase o blocco che è visibilmente scritto in una lingua diversa da quella dichiarata per la pagina. Mantieni un elenco di questi elementi, annotando la loro posizione nel DOM. Controlla ciascun elemento (o il suo antenato più vicino) per un attributo lang nell’ispettore DOM del browser (DevTools del browser → pannello Elements). Verifica che il valore sia un tag BCP 47 valido che corrisponda alla lingua effettiva del contenuto.
  3. Test con screen reader — NVDA + Firefox (Windows): Apri la pagina con NVDA attivo usando Firefox. Naviga nel contenuto con i tasti freccia, concentrandoti sui passaggi in lingua straniera che hai identificato. Ascolta con attenzione: NVDA dovrebbe cambiare automaticamente la pronuncia quando incontra un attributo lang corretto. Se il testo in lingua straniera viene letto con le regole di pronuncia della lingua predefinita senza alcun cambiamento di voce percepibile, è probabile che l’attributo lang sia mancante o errato.
  4. Test con screen reader — JAWS + Chrome (Windows): Con JAWS in esecuzione in Chrome, usa il cursore virtuale per leggere la pagina. Il comportamento di JAWS rispecchia quello di NVDA — cambierà motore TTS in base ai valori lang. Abilita la modalità di lettura dettagliata per ascoltare gli annunci di lingua. Annota eventuali passaggi in cui la pronuncia suona errata rispetto alla lingua visibile.
  5. Test con screen reader — VoiceOver + Safari (macOS/iOS): Attiva VoiceOver e naviga nella pagina con VO+freccia destra. Per i test su mobile in iOS, scorri il contenuto con i gesti. VoiceOver in Safari rispetta anch’esso gli attributi lang e cambia voce di conseguenza. Se sul dispositivo sono installati i pacchetti vocali per le lingue straniere previste, sentirai un cambiamento di voce distinto sugli elementi correttamente marcati.
  6. Validazione dei tag BCP 47: Per qualsiasi valore lang che trovi, validalo rispetto all’IANA Language Subtag Registry o usa un validatore BCP 47 online. Errori comuni includono l’uso di lang='en-us' (il codice regione in minuscolo è tecnicamente valido ma poco convenzionale) o codici non validi come lang='english'.

Come Correggere

Frase straniera inline in un paragrafo in turco — Errato

<p>
  Bu ürün uluslararası standartlara uygundur ve
  <em>state of the art</em> teknoloji kullanmaktadır.
</p>

Frase straniera inline in un paragrafo in turco — Corretto

<p>
  Bu ürün uluslararası standartlara uygundur ve
  <!-- lang='en' tells screen readers to switch to an English TTS engine -->
  <em lang='en'>state of the art</em> teknoloji kullanmaktadır.
</p>

Blocco di citazione multi-frase in lingua straniera — Errato

<blockquote>
  <p>La liberté commence où l'ignorance finit.</p>
  <p>— Victor Hugo</p>
</blockquote>

Blocco di citazione multi-frase in lingua straniera — Corretto

<!-- lang='fr' applied to the blockquote covers all descendant content -->
<blockquote lang='fr'>
  <p>La liberté commence où l'ignorance finit.</p>
  <p>— Victor Hugo</p>
</blockquote>

Menu di navigazione bilingue — Errato

<nav>
  <ul>
    <li><a href='/tr/anasayfa'>Anasayfa</a></li>
    <li><a href='/en/home'>Home</a></li>
    <li><a href='/de/startseite'>Startseite</a></li>
  </ul>
</nav>

Menu di navigazione bilingue — Corretto

<nav>
  <ul>
    <!-- Primary language (Turkish) needs no extra attribute if html lang='tr' -->
    <li><a href='/tr/anasayfa'>Anasayfa</a></li>
    <!-- English and German links receive their own lang attributes -->
    <li><a href='/en/home' lang='en'>Home</a></li>
    <li><a href='/de/startseite' lang='de'>Startseite</a></li>
  </ul>
</nav>

Tabella con celle dati multilingue — Errato

<table>
  <tr>
    <th>Ülke</th>
    <th>Slogan</th>
  </tr>
  <tr>
    <td>Fransa</td>
    <td>Liberté, Égalité, Fraternité</td>
  </tr>
  <tr>
    <td>Almanya</td>
    <td>Einigkeit und Recht und Freiheit</td>
  </tr>
</table>

Tabella con celle dati multilingue — Corretto

<table>
  <tr>
    <th>Ülke</th>
    <th>Slogan</th>
  </tr>
  <!-- lang applied to individual td elements containing foreign text -->
  <tr>
    <td>Fransa</td>
    <td lang='fr'>Liberté, Égalité, Fraternité</td>
  </tr>
  <tr>
    <td>Almanya</td>
    <td lang='de'>Einigkeit und Recht und Freiheit</td>
  </tr>
</table>

Errori Comuni

  • Omettere gli attributi lang su brevi frasi inline: Gli sviluppatori spesso marcano ampie sezioni in lingua straniera ma trascurano brevi frasi come uno slogan di marketing inglese di due parole inserito in una frase altrimenti in turco. Anche i termini stranieri di una sola parola che non sono nomi propri esenti o vocabolario tecnico richiedono la marcatura.
  • Usare un tag BCP 47 errato: Scrivere lang='english', lang='turkish' o lang='français' invece dei corretti codici ISO (lang='en', lang='tr', lang='fr') rende l’attributo non valido e gli screen reader potrebbero ignorarlo del tutto.
  • Affidarsi a CSS o allo stile visivo per implicare un cambio di lingua: Cambiare il font, il colore o mettere in corsivo il testo straniero segnala la differenza di lingua alle persone vedenti ma non fornisce alcuna informazione programmatica alle tecnologie assistive. L’attributo lang è l’unico meccanismo che funziona per gli screen reader.
  • Dare per scontato che le persone che usano screen reader “lo capiranno” dal contesto: Aspettarsi che una persona cieca deduca che un passaggio dal suono confuso è in realtà francese perché il testo turco circostante faceva riferimento alla Francia è un’aspettativa irragionevole che sposta l’onere della comprensione sulla persona.
  • Marcare solo il primo elemento di un blocco in lingua straniera composto da più elementi: Se tre elementi <p> consecutivi contengono un passaggio in francese, inserire lang='fr' solo sul primo paragrafo lascia i restanti due paragrafi non marcati. L’approccio corretto è racchiudere tutti e tre in un elemento genitore con lang='fr' o aggiungere l’attributo a ciascun paragrafo individualmente.
  • Confondere i nomi propri con frasi complete in lingua straniera: L’eccezione WCAG per i nomi propri copre nomi come "Paris" o "Volkswagen" — non intere frasi o testi pubblicitari scritti in francese o tedesco. Gli sviluppatori a volte applicano in modo errato questa eccezione per giustificare l’omissione della marcatura lang su contenuti sostanziali in lingua straniera.
  • Contenuto iniettato dinamicamente privo di attributi di lingua: Quando contenuti in lingua straniera sono caricati tramite JavaScript (per esempio, un blocco FAQ gestito da CMS o una descrizione di prodotto tradotta recuperata da un’API), gli sviluppatori spesso dimenticano di includere l’attributo lang nel markup iniettato. Le pipeline di rendering lato server o lato client devono trasmettere i metadati di lingua insieme al contenuto testuale.
  • Uso di xml:lang in documenti HTML5 senza lang: Nei contesti XHTML, xml:lang era l’attributo appropriato. In HTML5, l’attributo corretto è lang. Usare solo xml:lang in un documento HTML5 può funzionare in alcuni browser ma non è universalmente supportato da tutte le tecnologie assistive.
  • Inserire lang su un contenitore troppo ampio che include anche contenuto nella lingua principale: Racchiudere una sezione che contiene sia testo in turco sia in francese interamente in lang='fr' farà sì che le parti in turco vengano pronunciate in modo errato. L’ambito dell’attributo deve corrispondere con precisione al confine linguistico.
  • Non testare con screen reader reali dopo aver applicato le correzioni: Gli sviluppatori spesso aggiungono attributi lang e considerano la correzione completata senza verificare l’effettivo output TTS. Testare con NVDA, JAWS o VoiceOver è l’unico modo per confermare che il miglioramento della pronuncia sia percepibile alle persone che usano questi strumenti.

Relazione con le Normative Sull’Accessibilità della Turchia

La Circolare Presidenziale 2025/10 della Turchia, pubblicata nella Gazzetta Ufficiale n. 32933 il 21 giugno 2025, stabilisce un quadro vincolante per l’accessibilità digitale in un’ampia gamma di enti pubblici e privati. La circolare incorpora formalmente WCAG 2.2 come standard tecnico, con la conformità di livello AA che funge da requisito di base per l’adempimento legale.

WCAG 3.1.2 — Language of Parts è un criterio di livello AA, che lo colloca pienamente all’interno dell’obiettivo di conformità obbligatorio definito dalla circolare. Gli enti che gestiscono siti web multilingue — cosa comune in Turchia, dato il ruolo del paese come crocevia del commercio europeo, mediorientale e centroasiatico — hanno un obbligo accresciuto di implementare correttamente questo criterio. Una banca turca che pubblichi condizioni in valuta estera in inglese, un operatore di telecomunicazioni che includa clausole sugli accordi di roaming in tedesco o il sito di un ospedale che riproduca moduli di consenso del paziente in arabo devono tutti assicurarsi che ogni passaggio in lingua straniera sia marcato a livello programmatico.

Le tipologie di enti coperte dalla circolare includono istituzioni e agenzie pubbliche, piattaforme di e‑commerce, banche e istituzioni finanziarie, ospedali e fornitori di servizi sanitari, società di telecomunicazioni con 200,000 o più abbonati, agenzie di viaggio, società di trasporto private e scuole private autorizzate dal Ministero dell’Istruzione Nazionale (MoNE). Per tutti questi enti, il mancato raggiungimento della conformità di livello AA — incluso il 3.1.2 — può comportare sanzioni amministrative e l’inidoneità a ottenere il Logo di Accessibilità (Erişilebilirlik Logosu) rilasciato dal Ministero della Famiglia e dei Servizi Sociali.

L’Erişilebilirlik Logosu è sempre più riconosciuto come un segnale di fiducia nel mercato turco, in particolare nell’e‑commerce e nei servizi finanziari. Ottenere e mantenere il logo richiede una conformità dimostrata a tutti i criteri di livello AA, e Language of Parts è particolarmente rilevante per gli enti turchi che servono clienti internazionali o pubblicano documenti legalmente vincolanti in più lingue. Dato che la legge turca richiede che alcune informative (come gli avvisi sui diritti dei consumatori e le condizioni dei prodotti finanziari) siano comprensibili alle persone con disabilità, la marcatura della lingua non è solo una buona pratica tecnica — è parte dell’obbligo di comunicazione accessibile incorporato nel mandato più ampio della circolare.

Alle organizzazioni che mirano a ottenere il logo si consiglia di condurre audit strutturati dei contenuti per identificare tutti i passaggi in lingua straniera nelle proprie proprietà digitali, implementare un processo di sviluppo che imponga l’applicazione dell’attributo lang a livello di gestione dei contenuti e includere Language of Parts nei propri protocolli regolari di test di accessibilità insieme a cicli di revisione automatizzati e manuali.