The commissioning decision
A bilingual consultancy page contains an English service phrase inside Chinese prose. The visible words can be correct while assistive technology receives only the surrounding language. Include language boundaries in a new-page acceptance brief, separate from language-switch links and bilingual URL pairing.
Source and claim boundary
The lang attribute declares the language of an element using a BCP47 tag. A declaration on a descendant can identify a different language from its surrounding content. MDN · Checked 16 October 2026.
Filled synthetic acceptance cases
Synthetic teaching data, not client records. Review the inputs and expected outcomes before running the isolated browser exercise. On narrow screens, scroll the table.
| Input | Check | Expected |
|---|---|---|
| Chinese article lang=zh-Hans | Article declaration | Chinese context |
| English phrase lang=en-AU | Nearest declaration | English phrase context |
| English phrase with no local declaration | Inherited context | Still Chinese; review needed |
How to verify beyond appearance
- Mark actual changes of language, not every brand name automatically.
- Inspect the nearest language declarations in the fixture.
- Ask for a screen-reader check in the supported language/voice configuration and retain the observed result.
Interpret the result
DOM declarations are inspectable evidence, but they do not prove a particular pronunciation or accessibility conformance. Record the browser, screen reader and installed voices for the real test. Avoid equating a language tag with an automatic translation, a search ranking signal or an AI recommendation. Those are different claims requiring different evidence.
What this does not prove
The fixture checks declarations only. It does not play audio, install voices or certify a screen-reader experience.
Runnable fixture and handover record
Open the browser acceptance fixture · Read the test source。The fixture creates temporary elements with synthetic values inside the browser. It reads no account, uploads no file, and sends no email or form. Record the browser version, check name, observed value and pass state. Keep real integration evidence separate: a local pass is not a live delivery result.