{"id":164066,"date":"2026-01-09T09:00:00","date_gmt":"2026-01-09T08:00:00","guid":{"rendered":"https:\/\/gtechgroup.it\/blog\/internazionalizzazione-html-lang-dir-multilingua\/"},"modified":"2026-01-09T09:00:00","modified_gmt":"2026-01-09T08:00:00","slug":"internazionalizzazione-html-lang-dir-multilingua","status":"publish","type":"post","link":"https:\/\/gtechgroup.it\/blog\/internazionalizzazione-html-lang-dir-multilingua\/","title":{"rendered":"Internazionalizzazione in HTML: lang, dir e Contenuti Multilingua"},"content":{"rendered":"<p style=\"text-align: justify;\">In un web sempre pi\u00f9 globale, creare siti che funzionino correttamente per utenti di lingue e culture diverse \u00e8 una necessit\u00e0, non un lusso. L&#8217;<strong>internazionalizzazione<\/strong> (spesso abbreviata in i18n) inizia dal codice HTML, con attributi e elementi progettati per gestire lingue diverse, direzioni di scrittura differenti e set di caratteri universali. In questa guida vedremo tutti gli strumenti HTML disponibili per creare siti veramente multilingua e accessibili a un pubblico globale.<\/p>\n<h2>L&#8217;Attributo lang: Dichiarare la Lingua dei Contenuti<\/h2>\n<p style=\"text-align: justify;\">L&#8217;attributo <code>lang<\/code> \u00e8 il meccanismo fondamentale in HTML per dichiarare la <strong>lingua del contenuto<\/strong>. Deve essere sempre presente sull&#8217;elemento <code>&lt;html&gt;<\/code> per dichiarare la lingua principale del documento:<\/p>\n<pre><code>&lt;html lang=\"it\"&gt;\n  &lt;head&gt;\n    &lt;title&gt;Pagina in italiano&lt;\/title&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;p&gt;Questo contenuto \u00e8 in italiano.&lt;\/p&gt;\n    &lt;blockquote lang=\"en\"&gt;\n      &lt;p&gt;This quote is in English.&lt;\/p&gt;\n    &lt;\/blockquote&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">L&#8217;attributo <code>lang<\/code> pu\u00f2 essere applicato a qualsiasi elemento HTML per indicare un cambio di lingua all&#8217;interno del documento. Nell&#8217;esempio sopra, il documento \u00e8 in italiano ma contiene una citazione in inglese. Questa dichiarazione ha effetti pratici importanti: gli <strong>screen reader<\/strong> cambiano automaticamente la voce sintetica per pronunciare il testo nella lingua corretta, i <strong>browser<\/strong> possono offrire la traduzione automatica in modo pi\u00f9 preciso, i <strong>motori di ricerca<\/strong> comprendono meglio la lingua del contenuto e le regole CSS come <code>hyphens: auto<\/code> applicano la sillabazione corretta per ogni lingua.<\/p>\n<p style=\"text-align: justify;\">I codici lingua seguono lo standard <strong>BCP 47<\/strong>. I pi\u00f9 comuni sono codici a due lettere come <code>it<\/code> (italiano), <code>en<\/code> (inglese), <code>fr<\/code> (francese), <code>de<\/code> (tedesco), <code>es<\/code> (spagnolo), ma possono includere varianti regionali come <code>en-US<\/code> (inglese americano), <code>en-GB<\/code> (inglese britannico), <code>pt-BR<\/code> (portoghese brasiliano) o <code>zh-Hans<\/code> (cinese semplificato). La specificit\u00e0 \u00e8 importante: <code>en-GB<\/code> indica al browser di usare la sillabazione e le regole tipografiche dell&#8217;inglese britannico, che differiscono da quelle americane.<\/p>\n<h2>L&#8217;Attributo dir e il Testo Bidirezionale<\/h2>\n<p style=\"text-align: justify;\">Non tutte le lingue si scrivono da sinistra a destra. L&#8217;arabo, l&#8217;ebraico, il persiano e l&#8217;urdu si scrivono da <strong>destra a sinistra<\/strong> (RTL, Right-To-Left). L&#8217;attributo <code>dir<\/code> indica al browser la direzione di scrittura del testo:<\/p>\n<pre><code>&lt;html lang=\"ar\" dir=\"rtl\"&gt;\n  &lt;body&gt;\n    &lt;h1&gt;\u0645\u0631\u062d\u0628\u0627 \u0628\u0627\u0644\u0639\u0627\u0644\u0645&lt;\/h1&gt;\n    &lt;p&gt;\u0647\u0630\u0627 \u0646\u0635 \u0628\u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0639\u0631\u0628\u064a\u0629.&lt;\/p&gt;\n    &lt;p dir=\"ltr\" lang=\"en\"&gt;This paragraph is in English.&lt;\/p&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">I valori possibili sono: <code>ltr<\/code> (left-to-right, default), <code>rtl<\/code> (right-to-left) e <code>auto<\/code> (il browser determina la direzione in base al contenuto). L&#8217;impostazione <code>dir=\"rtl\"<\/code> non si limita a invertire l&#8217;allineamento del testo: inverte anche il layout della pagina, la direzione dello scroll, l&#8217;ordine delle colonne nelle tabelle e il posizionamento di elementi come le icone di chiusura nelle finestre di dialogo.<\/p>\n<p style=\"text-align: justify;\">La sfida maggiore si presenta con il <strong>testo bidirezionale<\/strong> (bidi), dove contenuti in lingue con direzioni opposte coesistono nello stesso paragrafo. L&#8217;algoritmo bidirezionale Unicode del browser gestisce automaticamente la maggior parte dei casi, ma a volte servono interventi espliciti.<\/p>\n<h2>Elementi BDO e BDI per Testo Misto<\/h2>\n<p style=\"text-align: justify;\">HTML offre due elementi specifici per gestire il testo bidirezionale. L&#8217;elemento <code>&lt;bdo&gt;<\/code> (Bidirectional Override) <strong>sovrascrive<\/strong> l&#8217;algoritmo bidirezionale, forzando una direzione specifica:<\/p>\n<pre><code>&lt;!-- Forzare il testo da destra a sinistra --&gt;\n&lt;p&gt;La parola &lt;bdo dir=\"rtl\"&gt;HELLO&lt;\/bdo&gt; scritta al contrario.&lt;\/p&gt;\n&lt;!-- Risultato: La parola OLLEH scritta al contrario. --&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">L&#8217;elemento <code>&lt;bdi&gt;<\/code> (Bidirectional Isolation) <strong>isola<\/strong> un pezzo di testo dal contesto bidirezionale circostante, permettendo all&#8217;algoritmo Unicode di analizzarlo indipendentemente. Questo \u00e8 particolarmente utile quando si inseriscono dati generati dagli utenti (nomi, commenti) che potrebbero essere in qualsiasi lingua:<\/p>\n<pre><code>&lt;ul&gt;\n  &lt;li&gt;Primo classificato: &lt;bdi&gt;\u0645\u062d\u0645\u062f&lt;\/bdi&gt; - 95 punti&lt;\/li&gt;\n  &lt;li&gt;Secondo classificato: &lt;bdi&gt;Marco&lt;\/bdi&gt; - 87 punti&lt;\/li&gt;\n  &lt;li&gt;Terzo classificato: &lt;bdi&gt;\u05e9\u05e8\u05d4&lt;\/bdi&gt; - 82 punti&lt;\/li&gt;\n&lt;\/ul&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Senza <code>&lt;bdi&gt;<\/code>, un nome in arabo o ebraico potrebbe confondere l&#8217;algoritmo bidirezionale, causando il riordino errato del testo circostante (come il punteggio che appare nel posto sbagliato). Con <code>&lt;bdi&gt;<\/code>, ogni nome viene isolato e la frase circostante mantiene il suo ordine corretto.<\/p>\n<h2>Hreflang per la SEO Multilingua<\/h2>\n<p style=\"text-align: justify;\">Per siti disponibili in pi\u00f9 lingue, il tag <code>&lt;link rel=\"alternate\" hreflang=\"xx\"&gt;<\/code> indica ai motori di ricerca le <strong>versioni alternative della stessa pagina<\/strong> in lingue diverse. Questo \u00e8 cruciale per la SEO internazionale, poich\u00e9 evita problemi di contenuto duplicato e aiuta Google a servire la versione linguistica corretta nei risultati di ricerca:<\/p>\n<pre><code>&lt;link rel=\"alternate\" hreflang=\"it\" href=\"https:\/\/esempio.it\/\"&gt;\n&lt;link rel=\"alternate\" hreflang=\"en\" href=\"https:\/\/esempio.it\/en\/\"&gt;\n&lt;link rel=\"alternate\" hreflang=\"fr\" href=\"https:\/\/esempio.it\/fr\/\"&gt;\n&lt;link rel=\"alternate\" hreflang=\"de\" href=\"https:\/\/esempio.it\/de\/\"&gt;\n&lt;link rel=\"alternate\" hreflang=\"x-default\" href=\"https:\/\/esempio.it\/en\/\"&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Il valore speciale <code>x-default<\/code> indica la pagina da mostrare quando la lingua dell&#8217;utente non corrisponde a nessuna delle versioni disponibili. \u00c8 fondamentale che ogni pagina referenzi <strong>tutte<\/strong> le versioni alternative, inclusa se stessa, e che la relazione sia bidirezionale (la pagina italiana referenzia quella inglese e viceversa). Per una guida completa sull&#8217;ottimizzazione SEO delle pagine HTML, consultate il nostro articolo su <a href=\"https:\/\/gtechgroup.it\/blog\/html-seo-strutturare-pagine-motori-ricerca\/\">HTML e SEO<\/a>.<\/p>\n<h2>Charset UTF-8 e Configurazione Multilingua<\/h2>\n<p style=\"text-align: justify;\">La corretta codifica dei caratteri \u00e8 il prerequisito fondamentale per qualsiasi sito multilingua. Il <code>&lt;meta charset=\"UTF-8\"&gt;<\/code> deve essere il <strong>primo elemento nel &lt;head&gt;<\/strong>, idealmente entro i primi 1024 byte del documento:<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"it\"&gt;\n&lt;head&gt;\n  &lt;meta charset=\"UTF-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n  &lt;title&gt;Sito Multilingua&lt;\/title&gt;\n&lt;\/head&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\"><strong>UTF-8<\/strong> supporta praticamente tutti i sistemi di scrittura del mondo: latino, cirillico, greco, arabo, ebraico, cinese, giapponese, coreano, devanagari e migliaia di altri caratteri, inclusi emoji. Non c&#8217;\u00e8 ragione per utilizzare codifiche diverse da UTF-8 nel web moderno. Codifiche come ISO-8859-1 o Windows-1252 supportano solo un sottoinsieme limitato di caratteri e possono causare la comparsa dei caratteri &#8220;mojibake&#8221; (testo illeggibile con simboli casuali) quando il contenuto include caratteri non supportati.<\/p>\n<p style=\"text-align: justify;\">Per la configurazione pratica di un sito multilingua, oltre all&#8217;HTML \u00e8 necessario che anche il server invii l&#8217;header HTTP <code>Content-Type: text\/html; charset=UTF-8<\/code> e che il database utilizzi la codifica UTF-8 (preferibilmente <code>utf8mb4<\/code> in MySQL per supportare tutti i caratteri Unicode, inclusi gli emoji). La <strong>content negotiation<\/strong> \u2014 il meccanismo con cui il server sceglie automaticamente la lingua in base all&#8217;header <code>Accept-Language<\/code> del browser \u2014 \u00e8 un&#8217;opzione aggiuntiva ma non dovrebbe mai essere l&#8217;unico meccanismo: l&#8217;utente deve sempre poter scegliere manualmente la lingua preferita.<\/p>\n<p style=\"text-align: justify;\">Hai bisogno di aiuto con l&#8217;internazionalizzazione del tuo sito web? <strong>G Tech Group<\/strong> offre servizi di sviluppo web professionale e consulenza tecnica. Contattaci a <strong>support@gtechgroup.it<\/strong> o via WhatsApp al <strong>0465 84 62 45<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In un web sempre pi\u00f9 globale, creare siti che funzionino correttamente per utenti di lingue e culture diverse \u00e8 una necessit\u00e0, non un lusso. L&#8217;internazionalizzazione&hellip;<\/p>\n","protected":false},"author":2,"featured_media":164246,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"1246","_seopress_titles_title":"Internazionalizzazione in HTML: lang, dir e Contenuti Multilingua %%sep%% %%sitename%%","_seopress_titles_desc":"Guida completa all'internazionalizzazione HTML: attributo lang, dir per testo bidirezionale, hreflang, charset UTF-8 e configurazione di siti multilingua.","_seopress_robots_index":"","footnotes":""},"categories":[1246],"tags":[1551,787],"class_list":["post-164066","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-html","tag-accessibilita-web","tag-sviluppo-web"],"_links":{"self":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/164066","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/comments?post=164066"}],"version-history":[{"count":0,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/164066\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media\/164246"}],"wp:attachment":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media?parent=164066"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/categories?post=164066"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/tags?post=164066"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}