Skip to content

RTL conversion

LTR to RTL conversion, measured before and after

We take the product from its measured score to a clean one, and the scan is the receipt.

Price
$5K–$30K+ per project
Timeline
3–10 weeks by scope
Starts with
A free scan
Readiness scoreSpecimen
Readiness score at each breakpoint: the baseline scan and the verified scan
BreakpointBaselineVerified
desktop 144058100
tablet 83452100
mobile 39047100
PR · physical to logical propertiescodemod
- margin-left: 24px;+ margin-inline-start: 24px;- text-align: left;+ text-align: start;- float: right;+ float: inline-end;- border-radius: 8px 0 0 8px;+ border-start-start-radius: 8px;
Why this exists

The deliverable is a number that moves: your Arabic readiness score, measured before, worked on, and measured again at all three breakpoints until it is clean. How much of that is a codemod depends entirely on how your CSS was written. A codebase in physical properties converts largely automatically; a modern Tailwind or Bootstrap 5 one is already logical at the utility level, and the real work is copy, dates, numerals, typography and the vendor CSS you inherited. We run the free conversion plan against your repository in the first call, which takes a minute, and quote from what it actually finds rather than from what the pitch assumes.

This is for you if

The situations this engagement was built for.

  • Your product was built left to right and now has to work in Arabic

  • You have an Arabic build, and it looks like an English page wearing Arabic words

  • Your team knows the stack but not the Arabic-specific edge cases, and cannot afford to learn them on customers

  • You need a number to show that the work was done, not a claim that it was

The difference

Same screen, same words, converted

One order screen in two states: as shipped, and converted. Switch between Before and After. The Arabic is identical. The numbered pins mark the decisions that separate them, and each is a check the engine runs.

BeforeAfter
رحلةالرحلاتالفنادقحسابي

طلبك رقم 48213

تم شحن طلبكقيد التجهيز

اتصل بفريق الدعم على +966 55 123 4567

التقييم 4.8 من 5 · بناءً على 1,245 مراجعة

الاسم الكاملالاسم كما في الهويةالبريد الإلكترونيname@company.comالإجمالي249.00 ر.سشامل الضريبةتأكيد الطلب

Converted

  1. R020highThe layout mirrorsReading order, status and actions move to the side an Arabic reader starts from.
  2. R021mediumNumbers hold togetherA phone number stays in order inside Arabic text, isolated rather than scrambled.
  3. R070mediumInputs take the right directionName fields follow the text typed into them; email stays left to right on purpose.
  4. R061mediumOne numeral systemDigits commit to one system instead of drifting mid-sentence.

Illustrative: live HTML and CSS. Drawn from our own fixtures and public-site scans, not a client engagement.

Scope

What is in the engagement

What you get

  • A baseline scan, archived, so the before is a measurement rather than a memory
  • A scoped plan run against your own repository, before anything is quoted
  • Automated codemods where the CSS is physical, delivered as reviewable pull requests
  • Every transform the tooling declined, listed for a human decision rather than guessed
  • Arabic typography done properly: face selection, line-height, no tracking on connected script
  • Component mirroring, forms and input direction, numeral and currency policy agreed with you
  • A directionality lint rule left behind, so the work does not rot
  • Verification scans at all three breakpoints, iterated to clean, then a dated certificate

What we need from you

  • Repository access, or a fork we can open pull requests against
  • A staging environment where the scanner can reach the Arabic build
  • One decision-maker for the policy questions: numerals, dates, currency, tone

What this does not cover

  • Direction supplied by a framework you load from a CDN. We flag it and quote separately, because fixing it means vendoring a fork you would then own
  • Third-party embeds and iframes, which we can measure and cannot edit
  • Translation itself: we audit and correct Arabic that exists, we do not write it from scratch

Process

How it runs

Timeline: 3–10 weeks by scope. Every step ends with something you can see.

  1. Week 1

    Plan and quote

    A full crawl, and the free conversion plan run against your repository in the first call. We quote from templates and rule clusters the plan actually finds, and write the exclusions into the scope.

  2. Week 1

    Baseline

    The before scan is archived and never re-run. You see the number and accept it as the starting point, so the improvement at the end is a measurement rather than a memory.

  3. Weeks 1 to 3

    Automated pass

    Codemods where the CSS is physical, one reviewable pull request per concern. Every transform the tooling declines is listed for a human decision instead of guessed.

  4. Weeks 2 to 8

    Judgment pass

    The work no codemod can do, in the order users notice it: bidi text, Arabic typography, numerals and dates, component mirroring, forms.

  5. Final week

    Verify and certify

    Scans at every breakpoint, diffed against the baseline and iterated to clean. A dated certificate records the result, and a lint rule stays in your CI so it holds.

Declines

What a conversion will not convert

If your framework already writes logical CSS (Bootstrap 5, Tailwind's logical utilities, anything built after about 2021), a conversion may find very little to convert. ritla convert plan answers that in a minute, free, before anyone signs anything.

Everywhere the codemod stops, it says so. That list is the deliverable's most useful page: each line is a place your codebase made a decision a machine must not re-make on its own. These are the kinds.

Direction your own CSS already handles
A declaration inside a selector scoped to a direction ([dir="rtl"] .card, html[lang="ar"]) is your RTL handling, not a defect. Converting it would overwrite a decision somebody made deliberately, so it is listed and left.
Shorthands that might be asymmetric on purpose
padding: 0 16px 0 40px may be an indent that belongs on one side, or a mistake. The difference is intent, and intent is not in the stylesheet, so every asymmetric shorthand is read by a person rather than flipped by a script.
Values that come from a custom property
margin-left: var(--gutter) cannot be converted without knowing what --gutter is and where else it is used. Resolving it is a judgment about your token system, which is yours.
Build output
A minified bundle is converted by converting the source it was built from. Editing the artifact would be undone by the next build and would hide the real change from your own diff.
Assets with no directional signal
An arrow, a chevron or a gradient may need mirroring. A filename rarely says which, so directional-looking assets are listed for a person to look at rather than flipped on a guess.
Anything the walk could not read
A symbolic link is not followed, and a file that cannot be parsed is not silently skipped: both are recorded. A conversion that reports "0 declines" about files it never opened is the one failure this list exists to make impossible, and it happened once.

Backed by the engine

The checks this engagement leans on

Every finding starts as one of these, with evidence attached. Each has its own page explaining when it fires and how to fix it. Browse every check.

Get started

Scan first. Then we talk about your findings.

The scan takes about a minute and costs nothing. Your inquiry arrives with it attached, so the reply starts from evidence about your site rather than questions about it.

  1. Paste the URL of your Arabic page.
  2. See your score and top findings.
  3. Tell us what you need. A person replies within one working day.

Start with a scan

We would rather look before we talk. Give us the URL and we will run the same scan the homepage runs, then you can tell us what you need.

FAQ

Questions about the RTL conversion

Find out where your Arabic stands

A free scan of one page, scored and explained in about a minute. If it tells you everything you needed, that is a good outcome too.

Start with a free scanAll services