R012: Untranslated attribute text (placeholder, alt, title, aria-label, button value)
Screen readers speak alt and aria-label aloud and placeholders say what to type, so English left there fails Arabic users even on an otherwise translated page.
The check
- Id
- R012
- Category
- Untranslated content
- Default severity
When it fires
A visible element's
placeholder,alt,titleoraria-label, or thevalueof a submit or button input, has no Arabic in it and at least four Latin letters left once brand names, URLs and codes are set aside.Fix: Translate these attribute strings.
The same untranslated string sits on several elements, as it does when it comes from a shared card or component template. It is reported once, with a count, so one template cannot crowd out every other finding.
Fix: Translate this string once in the shared template, it repeats across the page.
low confidence
Every offending value is an
altortitleshaped like a name: up to four capitalised words and no everyday English words, such asSix Flags. That is usually a brand or a person, so it is reported at low confidence.Fix: Translate it if it is descriptive text; if it is a brand or a person, mark it translate="no".
The
alt,titleoraria-labelsays only a word likeImage,photo,iconorlogo. That describes nothing in any language, so the finding is about the description, not the translation.Fix: Write what the image shows, in Arabic, or mark it decorative with alt="" if it carries no meaning. A screen reader announcing "صورة" for every image is the same silence as no alt at all.
What it leaves alone
Hidden elements, code blocks, and anything under translate="no" or a non-Arabic lang. A value with any Arabic letter or Arabic-Indic digit in it counts as translated.
Broken, then fixed
<input type="search" placeholder="Search products">
<img src="team.jpg" alt="Our team at the office"><input type="search" placeholder="ابحث في المنتجات">
<img src="team.jpg" alt="فريقنا في المكتب">Check it by hand
Run [...document.querySelectorAll('[placeholder], [alt], [title], [aria-label]')].flatMap((e) => ['placeholder', 'alt', 'title', 'aria-label'].map((a) => e.getAttribute(a))).filter((v) => v && /[A-Za-z]{4,}/.test(v) && !/\p{Script=Arabic}/u.test(v)) in the DevTools console. It lists attribute text with no Arabic in it; names can stay, the rest needs translating.
What the report shows you
Each R012 finding carries the fields below that apply to it, so you can see why it fired without rerunning the scan.
- placeholder
- The
placeholderas written, when it is untranslated. - alt
- The
alttext as written, when it is untranslated. - title
- The
titleas written, when it is untranslated. - aria-label
- The
aria-labelas written, when it is untranslated. - value
- The
valueof a submit or button input, when it is untranslated. - genericDescription
- Present when the value is a generic word like
Imagerather than a description. - occurrences
- When the string repeats: how many elements on the page carry it.
Components that pass it by construction
These Ritla UI components satisfy R012 by how they are built. Used as documented, they do not bring this defect onto your page.
Does your page trip R012?
Paste a URL. Ritla renders the page on desktop, tablet and mobile, runs every check, and shows the top issues with screenshot evidence.
Scan a page freeBrowse the checks