WCAG framgångskriterier · Level AA

WCAG 3.1.2: Språk för delar

WCAG 3.1.2 kräver att alla stycken, fraser eller avsnitt av webbinnehåll som är skrivna på ett annat språk än sidans primära språk måste identifieras programmatiskt med hjälp av lang-attributet. Detta gör det möjligt för hjälpmedelstekniker, särskilt skärmläsare, att automatiskt byta talsyntesmotor och återge innehållet korrekt för användare som är beroende av ljudutmatning.

Vad denna regel innebär

WCAG 3.1.2 — Language of Parts är ett kriterium på nivå AA under principen Begriplig. Det bygger direkt på 3.1.1 (Language of Page), som kräver att huvudspråket för en hel sida deklareras. Kriterium 3.1.2 går längre: varje gång ett stycke, en fras eller en del av innehållet är skrivet på ett språk som är annat än sidans standardspråk, måste den delen ha ett lang-attribut som identifierar dess specifika språk.

I praktiska HTML-termer innebär detta att lang-attributet ska tillämpas på alla element som omsluter ett språkskifte. Attributvärdet måste vara en giltig BCP 47-språktagg — till exempel lang='en' för engelska, lang='fr' för franska, lang='de' för tyska eller lang='tr' för turkiska. Regionsundertaggar (såsom lang='en-US' eller lang='tr-TR') är tillåtna och rekommenderas när dialektspecifik uttal spelar roll.

Ett godkänt resultat uppstår när varje tydligt avgränsad språklig sektion som en mänsklig läsare skulle uppfatta som tillhörande ett annat språk är innesluten i ett element med korrekt lang-attribut. Ett underkänt resultat uppstår när ett stycke på ett annat språk finns men saknar lang-attribut, eller har ett felaktigt — till exempel att märka en fransk mening som lang='de'.

WCAG erkänner tre uttryckliga undantag från detta kriterium. För det första behöver egennamn — personnamn, varumärken, geografiska namn — inte språktaggas även när de kommer från ett annat språk. För det andra är tekniska termer som erkänns som ordförråd inom huvudspråket (såsom den latinska frasen in vitro som används på en medicinsk sida på engelska) undantagna. För det tredje är ord med obestämt språkligt ursprung — ord som har absorberats så fullständigt i huvudspråket att deras ursprung är oklart — också undantagna. Dessa undantag speglar den praktiska verkligheten att många lånord inte kräver ett uttalsskifte för att förstås korrekt.

lang-attributet kan placeras på vilket HTML-element som helst, inklusive <span>, <p>, <div>, <blockquote>, <section> eller till och med <td> i en tabellcell. Attributet ärvs av alla underordnade element, så det räcker att tagga en överordnad behållare om ett helt block är på målspråket. Du behöver bara tagga enskilda inline-element när korta fraser är insprängda i annars enspråkiga stycken.

Varför det är viktigt

De primära mottagarna av detta kriterium är skärmläsaranvändare, särskilt personer som är blinda eller har nedsatt syn. Skärmläsare förlitar sig på text-till-tal-motorer (TTS) som är språkspecifika. När en turkisk skärmläsare stöter på en fransk mening utan ett lang='fr'-attribut försöker den uttala de franska orden med turkiska fonetiska regler, vilket ger ett resultat som till stor del är obegripligt. Lyssnaren kanske inte ens inser att ett språkskifte har skett — hen hör helt enkelt förvrängt ljud och tappar förståelsen för innehållet helt.

Föreställ dig ett verkligt scenario som är vanligt på turkiska e-handels- och turismsajter: en produktsida skriven på turkiska som innehåller varumärket och en kort marknadsföringsfras på engelska, följt av en juridisk friskrivning på franska för europeiska kunder. Utan språktaggning på de engelska och franska segmenten kommer en blind användare som förlitar sig på en turkisk TTS-röst att höra tre segment som alla uttalas som om de vore turkiska. Den engelska sloganen kan möjligen gissas genom fonetisk likhet, men den franska juridiska texten blir helt obegriplig — vilket kan göra att användaren missar kritisk avtals- eller säkerhetsinformation.

Användare med kognitiva funktionsnedsättningar som förlitar sig på uppläsningsverktyg (inte bara dedikerade skärmläsare) påverkas också. Många vanliga läshjälps-tillägg i webbläsare använder lang-attributet för att välja rätt röst. Utan det ignorerar verktyget antingen språkskiftet eller använder en enda röst för hela sidan, vilket försämrar förståelsen.

Utöver tillgänglighet ger korrekt språktaggning mätbara SEO-fördelar. Sökmotorer använder lang-attribut för att indexera flerspråkigt innehåll korrekt, vilket förbättrar sannolikheten att språkspecifika sidor visas i geografiskt och språkligt riktade sökresultat. Webbläsare använder också attributet för att erbjuda korrekta översättningsförslag, och stavningskontroller refererar till det för att använda rätt ordbok. Sammanfattningsvis gynnar korrekt språkmärkning alla användare — inte bara dem med funktionsnedsättningar.

Det uppskattas att över 2,2 miljarder människor världen över har någon form av synnedsättning, och tiotals miljoner förlitar sig dagligen på skärmläsare. Flerspråkigt webbinnehåll blir alltmer norm i internationella marknader, vilket gör efterlevnad av Language of Parts kritisk för alla webbplatser som betjänar en global eller flerspråkig publik.

Relaterade Axe-core-regler

WCAG 3.1.2 kräver manuell testning eftersom automatiserade verktyg inte pålitligt kan identifiera vilka delar av en sidas text som är skrivna på ett annat språk än sidans standardspråk utan att använda algoritmer för språklig detektion (NLP) — och även dessa kan vara osäkra vid korta fraser, egennamn och teknisk terminologi.

  • Manuell granskning — språkdetection: Automatiska skannrar som axe-core kan verifiera att lang-attributet på <html>-elementet finns och är giltigt (täcks av reglerna html-has-lang och html-lang-valid), men de kan inte läsa igenom hela textinnehållet och avgöra om ett visst stycke språkligt sett är franska, tyska eller japanska. Ett verktyg har ingen semantisk förståelse av huruvida strängen "Bonjour tout le monde" är franska eller en påhittad fras, så det kan inte flagga avsaknaden av lang='fr' på det omgivande elementet.
  • Manuell granskning — felaktiga lang-värden: Om en utvecklare har placerat ett lang-attribut på ett element men angett fel språkkod (till exempel märkt spansk text som lang='pt') kommer automatiserade verktyg att se en giltig BCP 47-tagg och rapportera inget fel. Endast en mänsklig granskare som kan läsa båda språken kan identifiera felmatchningen.
  • Manuell granskning — omfattningen av språkskiften: Även när lang-attribut finns måste en människa bekräfta att attributet täcker hela den främmande språkliga passagen — inte bara första meningen, och utan att spilla över i angränsande innehåll som tillhör huvudspråket. Automatiserade verktyg saknar läsförståelse för att kunna göra denna bedömning.

Hur man testar

  1. Automatiserad grundskanning: Kör axe DevTools (webbläsartillägg eller CI-integration) eller Google Lighthouse mot sidan. Leta efter eventuella överträdelser av html-has-lang eller html-lang-valid — dessa indikerar att även sidans språkliga grunddeklaration saknas eller är felaktig, vilket är ett grundläggande problem att åtgärda innan du tar itu med 3.1.2. Observera att inget av verktygen kommer att flagga saknade inline-lang-attribut, så detta steg etablerar endast en baslinje.
  2. Visuell innehållsgranskning: Läs igenom hela sidans innehåll och identifiera varje stycke, fras eller block som tydligt är skrivet på ett annat språk än det deklarerade sidanspråket. För en lista över dessa element och notera deras position i DOM:en. Kontrollera varje element (eller dess närmaste förfader) för ett lang-attribut i webbläsarens DOM-inspektör (webbläsarens DevTools → fliken Elements). Verifiera att värdet är en giltig BCP 47-tagg som matchar innehållets faktiska språk.
  3. Skärmläsartest — NVDA + Firefox (Windows): Öppna sidan med NVDA aktivt i Firefox. Navigera genom innehållet med piltangenterna, med fokus på de främmande språkliga passager du identifierat. Lyssna noga: NVDA ska automatiskt byta uttal när den stöter på ett korrekt taggat lang-attribut. Om den främmande texten läses med standardspråkets uttalsregler utan någon märkbar röstförändring saknas sannolikt lang-attributet eller är felaktigt.
  4. Skärmläsartest — JAWS + Chrome (Windows): Med JAWS igång i Chrome, använd den virtuella markören för att läsa igenom sidan. JAWS beter sig på samma sätt som NVDA — den byter TTS-motor baserat på lang-värden. Aktivera utförligt tal-läge för att höra språkannonseringar. Notera alla passager där uttalet låter felaktigt för det synliga språket.
  5. Skärmläsartest — VoiceOver + Safari (macOS/iOS): Aktivera VoiceOver och navigera på sidan med VO+högerpil. För mobila tester på iOS, svep genom innehållet. VoiceOver i Safari respekterar också lang-attribut och byter röster i enlighet med detta. Om din enhet har röstpaket installerade för de förväntade främmande språken kommer du att höra en tydlig röstförändring på korrekt taggade element.
  6. BCP 47-taggvalidering: För alla lang-värden du hittar, validera dem mot IANA Language Subtag Registry eller använd en onlinevalidator för BCP 47. Vanliga misstag inkluderar att använda lang='en-us' (gemener i regionskoden är tekniskt giltigt men okonventionellt) eller ogiltiga koder som lang='english'.

Hur man åtgärdar

Främmande fras inline i ett turkiskt stycke — Felaktigt

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

Främmande fras inline i ett turkiskt stycke — Korrekt

<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>

Blockcitat med flera meningar på ett främmande språk — Felaktigt

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

Blockcitat med flera meningar på ett främmande språk — Korrekt

<!-- 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>

Tvåspråkig navigationsmeny — Felaktig

<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>

Tvåspråkig navigationsmeny — Korrekt

<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>

Tabell med flerspråkiga dataceller — Felaktig

<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>

Tabell med flerspråkiga dataceller — Korrekt

<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>

Vanliga misstag

  • Att utelämna lang-attribut på korta inline-fraser: Utvecklare taggar ofta större avsnitt på främmande språk men missar korta fraser som en tvåords engelsk marknadsföringsslogan inbäddad i en annars turkisk mening. Även enstaka ord på främmande språk som inte är undantagna egennamn eller tekniska termer kräver taggning.
  • Att använda en felaktig BCP 47-tagg: Att skriva lang='english', lang='turkish' eller lang='français' i stället för korrekta ISO-koder (lang='en', lang='tr', lang='fr') gör attributet ogiltigt och skärmläsare kan ignorera det helt.
  • Att förlita sig på CSS eller visuell stil för att antyda ett språkskifte: Att ändra typsnitt, färg eller kursivera främmande text signalerar språkskillnaden för seende användare men ger ingen programmatisk information till hjälpmedelsteknik. lang-attributet är den enda mekanism som fungerar för skärmläsare.
  • Att anta att skärmläsaranvändare kommer att "lista ut det" från sammanhanget: Att förvänta sig att en blind användare ska dra slutsatsen att en förvrängd passage egentligen är franska eftersom den omgivande turkiska texten refererade till Frankrike är en orimlig förväntan som lägger förståelsebördan på användaren.
  • Att bara tagga det första elementet i ett flerelementsblock på främmande språk: Om tre på varandra följande <p>-element innehåller en fransk passage, innebär att bara sätta lang='fr' på det första stycket att de två återstående styckena lämnas otaggade. Korrekt tillvägagångssätt är antingen att omsluta alla tre i ett överordnat element med lang='fr' eller att lägga till attributet på varje stycke individuellt.
  • Att blanda ihop egennamn med fullständiga fraser på främmande språk: WCAG-undantaget för egennamn omfattar namn som "Paris" eller "Volkswagen" — inte hela meningar eller marknadsföringstexter skrivna på franska eller tyska. Utvecklare missbrukar ibland detta undantag för att motivera att de hoppar över lang-taggning på omfattande innehåll på främmande språk.
  • Dynamiskt injicerat innehåll som saknar språkattribut: När innehåll på främmande språk laddas via JavaScript (till exempel ett CMS-styrt FAQ-block eller en översatt produktbeskrivning hämtad från ett API) glömmer utvecklare ofta att inkludera lang-attributet i den injicerade HTML-koden. Server- eller klientbaserade renderingskedjor måste föra vidare språklig metadata tillsammans med textinnehållet.
  • Att använda xml:lang i HTML5-dokument utan lang: I XHTML-sammanhang var xml:lang det korrekta attributet. I HTML5 är lang det korrekta attributet. Att endast använda xml:lang i ett HTML5-dokument kan fungera i vissa webbläsare men stöds inte universellt av alla hjälpmedelstekniker.
  • Att placera lang på en alltför bred behållare som också innehåller innehåll på huvudspråket: Att omsluta en sektion som innehåller både turkisk och fransk text helt i lang='fr' gör att de turkiska delarna uttalas fel. Attributets omfattning måste exakt matcha språkgränsen.
  • Att inte testa med faktiska skärmläsare efter att ha gjort åtgärder: Utvecklare lägger ofta till lang-attribut och anser att åtgärden är klar utan att verifiera det faktiska TTS-resultatet. Testning med NVDA, JAWS eller VoiceOver är det enda sättet att bekräfta att uttalsförbättringen är märkbar för slutanvändare.

Relation till Turkiets tillgänglighetsreglering

Turkiets Presidential Circular 2025/10, publicerad i Official Gazette nr 32933 den 21 juni 2025, etablerar ett bindande ramverk för digital tillgänglighet för ett brett spektrum av offentliga och privata aktörer. Cirkuläret inför formellt WCAG 2.2 som teknisk standard, med nivå AA-konformitet som grundläggande krav för rättslig efterlevnad.

WCAG 3.1.2 — Language of Parts är ett kriterium på nivå AA, vilket placerar det direkt inom det obligatoriska konformitetsmålet som definieras av cirkuläret. Aktörer som driver flerspråkiga webbplatser — vilket är vanligt i Turkiet med tanke på landets position som en knutpunkt för europeisk, mellanöstern- och centralasiatisk handel — har en förstärkt skyldighet att implementera detta kriterium korrekt. En turkisk bank som publicerar villkor för utländsk valuta på engelska, en teleoperatör som inkluderar roamingvillkor på tyska eller en sjukhuswebbplats som återger patientinformationsblanketter på arabiska måste alla säkerställa att varje passage på främmande språk är programmässigt taggad.

De aktörstyper som omfattas av cirkuläret inkluderar offentliga institutioner och myndigheter, e-handelsplattformar, banker och finansiella institutioner, sjukhus och vårdgivare, telekomföretag med 200,000 eller fler abonnenter, resebyråer, privata transportföretag och privatskolor auktoriserade av Ministry of National Education (MoNE). För alla dessa aktörer kan underlåtenhet att uppnå nivå AA-konformitet — inklusive 3.1.2 — leda till administrativa sanktioner och diskvalificering från att erhålla Accessibility Logo (Erişilebilirlik Logosu) som utfärdas av Ministry of Family and Social Services.

Erişilebilirlik Logosu erkänns i allt högre grad som en förtroendesignal på den turkiska marknaden, särskilt inom e-handel och finansiella tjänster. Att uppnå och behålla logotypen kräver påvisad efterlevnad av alla kriterier på nivå AA, och Language of Parts är särskilt relevant för turkiska aktörer som betjänar internationella kunder eller publicerar juridiskt bindande dokument på flera språk. Eftersom turkisk lag kräver att vissa upplysningar (såsom information om konsumenträttigheter och villkor för finansiella produkter) ska vara begripliga för användare med funktionsnedsättningar är språktaggning inte bara en teknisk bästa praxis — den är en del av skyldigheten till tillgänglig kommunikation som är inbäddad i cirkulärets bredare mandat.

Organisationer som eftersträvar logotypen rekommenderas att genomföra strukturerade innehållsrevisioner för att identifiera alla passager på främmande språk i sina digitala tillgångar, implementera en utvecklingsprocess som säkerställer att lang-attribut tillämpas i innehållshanteringslagret och inkludera Language of Parts i sina regelbundna tillgänglighetstestningsprotokoll tillsammans med automatiserade och manuella granskningscykler.