Skip to content

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
Default severity
medium

When it fires

  1. medium

    A visible element's placeholder, alt, title or aria-label, or the value of 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.

  2. medium

    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.

  3. mediumlow confidence

    Every offending value is an alt or title shaped like a name: up to four capitalised words and no everyday English words, such as Six 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".

  4. medium

    The alt, title or aria-label says only a word like Image, photo, icon or logo. 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

before.html
<input type="search" placeholder="Search products">
<img src="team.jpg" alt="Our team at the office">
after.html
<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 placeholder as written, when it is untranslated.
alt
The alt text as written, when it is untranslated.
title
The title as written, when it is untranslated.
aria-label
The aria-label as written, when it is untranslated.
value
The value of a submit or button input, when it is untranslated.
genericDescription
Present when the value is a generic word like Image rather 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