- Success Criterion 3.1.1
- Conformance level A
Multilingual Site Serving Every Locale With the Same Lang Value
3.1.1 — Language of Page
Scenario
Setting
A government tax-filing portal
What’s wrong
Multi-lingual sites serving all locales from one template with hard-coded original language.
Example
<!-- Served at /fr/formulaire-impot regardless of locale -->
<html lang="en">
<body>
<h1>Declaration de revenus</h1>
<p>Remplissez le formulaire ci-dessous avant le 30 avril.</p>
</body>
</html> Why it matters
Every locale, including the French filing form, ships with lang="en" baked in from the original template, so French-speaking filers get English pronunciation on legally important deadlines.
How to test
Check multiple locale versions of a multi-lingual site: if all locales are served from one template with a hard-coded original-language lang value, it fails for translated versions.
How to fix
Generate the lang attribute from the active locale variable at render time, never from a value copied into the base template.
<!-- Served at /fr/formulaire-impot -->
<html lang="fr">
<body>
<h1>Declaration de revenus</h1>
<p>Remplissez le formulaire ci-dessous avant le 30 avril.</p>
</body>
</html> Outcome
A filer completing the French form hears every deadline and instruction spoken in correctly accented French.
Who is affected
Screen reader users filing taxes in a non-English locale risk mishearing dates and penalty warnings that were never translated at the markup level.
Learn more
- Understanding Understanding document (opens in a new tab)
Related scenarios
- Page Published With No Language Declared in the Code
- HTML Element Missing Its Language Attribute Entirely
- Page’s Declared Language Not Matching Its Actual Content
- Language Attribute Set to an Invalid or Malformed Value
- Language Switcher That Doesn’t Update the Page’s Lang Attribute
- Language Attribute Set on the Body Instead of the HTML Root