R010: Visible Latin-script body text above thresholds on an Arabic page
Latin-script passages left on an Arabic page, a single sentence or a large share of the whole page, tell the reader the translation stopped partway.
The check
- Id
- R010
- Category
- Untranslated content
- Default severity
When it fires
A visible block of text on an Arabic page has no Arabic in it and at least three Latin words left once brand names, URLs, emails and codes are set aside. Each block is its own finding, up to ten per page.
Fix: Translate this passage or mark it as intentionally foreign with a lang attribute.
Those untranslated passages add up to more than 15% of the letters on the page. The page gets one critical finding in place of the per-passage ones: it is substantially not in Arabic.
Fix: Complete the translation before shipping to Arabic users; partial pages erode trust faster than fully-English ones.
What it leaves alone
Text hidden from screen readers with aria-hidden, code and pre blocks, anything under translate="no" or a non-Arabic lang, and text that mixes Arabic with Latin, which the direction checks cover. Text inside forms is R071's, and link, button, tab and menu text is R011's, so one string is never reported twice.
Broken, then fixed
<p>أدر مشاريعك بسهولة من لوحة تحكم واحدة.</p>
<p>Start your free trial today and invite your team.</p><p>أدر مشاريعك بسهولة من لوحة تحكم واحدة.</p>
<p>ابدأ تجربتك المجانية اليوم وادعُ فريقك.</p>Check it by hand
Run [...document.querySelectorAll('p, li, td, h1, h2, h3')].filter((e) => e.checkVisibility() && !/\p{Script=Arabic}/u.test(e.textContent) && /[A-Za-z]{2,}\s+[A-Za-z]{2,}\s+[A-Za-z]{2,}/.test(e.textContent)).map((e) => e.textContent.trim()) in the DevTools console. It lists visible blocks with no Arabic and at least three Latin words; anything that is not a name or a deliberate quotation needs translating.
What the report shows you
Each R010 finding carries the fields below that apply to it, so you can see why it fired without rerunning the scan.
- text
- Per passage: the untranslated text, cut to 160 characters.
- latinWordsAfterAllowlist
- Per passage: how many Latin words are left once brand names, URLs and codes are set aside.
- cappedAt
- When more than ten passages qualify: the cap on how many are reported.
- totalCandidates
- Reported with the cap: how many passages qualified in all.
- unallowedLatinChars
- Page level: the Latin letters in untranslated passages, once brand names and codes are set aside.
- totalVisibleLetters
- Page level: every visible letter on the page, Arabic, Latin or other.
- ratio
- Page level:
unallowedLatinCharsdivided bytotalVisibleLetters, from 0 to 1. - sampleSelectors
- Page level: up to five of the untranslated passages, as places to start.
Does your page trip R010?
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