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
| Breakpoint | Baseline | Verified |
|---|---|---|
| desktop 1440 | 58 | 100 |
| tablet 834 | 52 | 100 |
| mobile 390 | 47 | 100 |
- 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;
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.
طلبك رقم 48213
اتصل بفريق الدعم على +966 55 123 4567
التقييم 4.8 من 5 · بناءً على 1,245 مراجعة
Converted
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.
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.
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.
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.
Judgment pass
The work no codemod can do, in the order users notice it: bidi text, Arabic typography, numerals and dates, component mirroring, forms.
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 40pxmay 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--gutteris 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.
- Forced-LTR container, or a bidi override, over Arabic contentUnder a
dir="ltr"ordirection: ltrbox, mostly Arabic text starts at the wrong edge with punctuation out of order, and abidi-overridecan mirror its letters or reverse embedded numbers. - Text-align: left explicitly set on majority-Arabic textArabic is read from the right, so a block held to the left edge gives each line a ragged starting point and pulls the text away from where the reader's eye begins.
- Directional icon pointing against the sequence its control advancesOn a right-to-left page "next" runs leftward, so an arrow named
arrow-rightinside a next button, left unmirrored, tells an Arabic reader it goes back instead of forward. - Direction-sensitive physical properties without an RTL overrideWhere the stylesheet shows signs of being written left-to-right first,
margin-left,padding-rightorleftleave Arabic spacing and offsets on the wrong side; otherwise it is reported as a lower-confidence risk. - Float: left/right on content elements in RTL context without overrideA float written for a left-to-right layout keeps its physical side in Arabic, so an image meant to lead the text lands at the end of each line instead.
- TranslateX moves the element off-screen in RTLOff-canvas drawers and menus should wait behind the right edge on an Arabic page, so one parked off the left by
translateXslides in from the side the reader does not expect. - Document-level horizontal overflowWhen one element is wider than the viewport the whole page scrolls sideways, and on a phone that leaves an Arabic reader panning to reach content cut off at the edge.
- Flex row-reverse faking RTL instead of dir (tab order fights visual order)On a right-to-left page, a nav or list set to
flex-direction: row-reverseshows its items in reverse source order, so pressing Tab moves focus against the direction Arabic readers scan.
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.
- Paste the URL of your Arabic page.
- See your score and top findings.
- 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
The rest of the ladder
Other ways we can help
- We look
Arabic Readiness Certification
A pre-launch audit by people who read Arabic, ending in a certificate.See the engagement - We look
Arabic Typography & Font Audit
The layer that decides whether Arabic looks native or merely present.See the engagement - We watch
Localization QA Retainer
For teams shipping continuously without an Arabic speaker on staff.See the engagement - We rebuild
Ritla UI rollout
We replace the components that keep breaking in Arabic with Ritla components, so the fixes stay fixed.See the engagement - We design
Custom theme
Your brand as a Ritla theme: a Figma file and code on the same tokens, Arabic-first.See the engagement - You deliver
Agency partners
Resell certification and conversion under your own brand.See the engagement
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