Requires that the default human language of every page can be programmatically determined, for example with a lang attribute on the html element.
A screen reader has to know which language it is reading. If a Turkish page is not marked as Turkish, the reader may pronounce the words with English rules and the result is nonsense. The same information lets browsers choose the right fonts and hyphenation, translation tools pick the source language, and captions display correctly.
This criterion requires that the default human language of each web page can be programmatically determined. For HTML, that means a valid lang attribute on the html element.
lang on the html element (H57). In PDF, set the /Lang entry in the document catalog (PDF16).en or tr. A region subtag such as en-GB is allowed.Screen reader users, who need the right pronunciation rules. People who use text-to-speech to read more easily, including people with dyslexia and other reading or learning disabilities. Braille users, whose software chooses the right braille table. People who rely on captions that display in the right language. It also helps translation tools and search engines.
The European Accessibility Act (Directive (EU) 2019/882) applies to in-scope products and services placed on the market after 28 June 2025. Recital 47 names four principles for websites and mobile applications: perceivable, operable, understandable and robust. A programmatically available page language is part of "understandable".
The technical counterpart is the standard EN 301 549, which incorporates WCAG 3.1.1 by reference and turns it into separate clauses for each kind of ICT.
| Clause | Type of ICT | What it requires |
|---|---|---|
| 9.3.1.1 | Web pages | Web content must satisfy WCAG success criterion 3.1.1. |
| 10.3.1.1 | Non-web documents (PDF, Office files) | Documents must declare their default language where the standard applies the criterion to them. |
| 11.3.1.1 | Non-web software (native mobile apps) | Software must use the language set on the device, or declare its own language, so assistive technology can present text correctly. |
Whether and how the criterion applies to non-web documents is stated in clause 10 of the standard. Clause numbers follow the "9. + WCAG number" pattern of EN 301 549. In V3.2.1 the software clause is divided into further subclauses for open and closed functionality. Check the exact numbers in the standard when you cite them.
Standard version: EN 301 549 V4.1.1 (September 2026) is based on WCAG 2.2 and is the first version prepared specifically for the EAA. It has not yet been cited in the Official Journal of the European Union, so for now it is best treated as a voluntary technical route to the EAA's requirements. Once cited, it will give a presumption of conformity. The text of criterion 3.1.1 is the same in WCAG 2.1 and 2.2.
A note on EAA scope: Article 2(4) of the Directive excludes certain content from the requirements, for example office file formats published before 28 June 2025 and archives that are not updated after that date. Content you publish or change after that date is not covered by these exclusions.
Directive (EU) 2019/882, EUR-Lex, opens in a new tab
Without it, a screen reader falls back to a default that may be wrong for the page (H57).
<!DOCTYPE html>
<html>
<head><title>Hoş geldiniz</title></head><!DOCTYPE html>
<html lang="tr">
<head><title>Hoş geldiniz</title></head>The value must be a valid language tag.
<html lang="english"><html lang="en">A page written in Turkish but marked as English is read with the wrong pronunciation.
<html lang="en">
<body><h1>Erişilebilirlik kontrol listesi</h1><html lang="tr">
<body><h1>Erişilebilirlik kontrol listesi</h1>A region subtag is allowed and can help with spelling and pronunciation.
<html lang="en_GB"> <!-- underscore is not valid --><html lang="en-GB">The default language belongs on the root element so that it applies to the whole document, including the title.
<html>
<body lang="fr"><html lang="fr">
<body>A script that changes the language of the visible content must also change the lang attribute.
showTurkish(); // content changes, lang stays "en"showTurkish();
document.documentElement.lang = "tr";Native apps do not have a lang attribute. They take the language from the localisation that the platform selects, so provide proper localised resources rather than hard-coded strings.
import SwiftUI
struct WelcomeView: View {
var body: some View {
// The key is looked up in Localizable.strings for the user's language,
// so the text matches the language the user has chosen
Text("welcome_title")
}
}
// Localizable.strings (en)
// "welcome_title" = "Welcome";
// Localizable.strings (tr)
// "welcome_title" = "Hoş geldiniz";import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
@Composable
fun WelcomeTitle() {
// The string comes from res/values (default) or res/values-tr
// for the language the platform selects
Text(stringResource(R.string.welcome_title))
}
// res/values/strings.xml
// <string name="welcome_title">Welcome</string>
// res/values-tr/strings.xml
// <string name="welcome_title">Hoş geldiniz</string>html element have a lang attribute?html-has-lang and html-lang-valid) detect missing and invalid values. They cannot tell if the value matches the content, so a person must check that.lang attribute: The most common failure, and the easiest to fix (H57).lang="en" used for pages in another language.lang="english", lang="en_US" or an empty value.body or a wrapper: The document title and root remain unmarked.lang: The content changes, the declaration does not.