Most internationalization advice treats locale support as a layer: build the app, extract the strings, add the translations, ship. That model works reasonably well for adding French to an English product.
It fails for the UAE, and it fails in a specific way worth understanding, because two of the three constraints below are not string problems at all. They are schema and infrastructure problems wearing i18n clothing, and both get dramatically more expensive after your data model settles.
Here is what actually breaks.
1. RTL is a layout engine concern, not a stylesheet toggle
The naive mental model is direction: rtl and you are done. Modern CSS gets you further than it used to — logical properties (margin-inline-start, padding-inline-end, inset-inline) handle a great deal automatically if you used them from the start.
That conditional is the whole problem. Most codebases did not use them from the start. They used margin-left, padding-right, and left: 0, thousands of times, across a component library and every one-off override that accumulated on top of it.
What breaks beyond the obvious mirroring:
- Directional iconography. Back arrows, next chevrons, progress indicators, and send icons all need mirroring. Logos, media playback controls, and clock icons must not mirror. There is no automatic rule; it requires a per-icon decision, which means an audit.
-
Mixed-direction strings. An Arabic sentence containing a Latin brand name and a numeral is handled by the Unicode bidirectional algorithm, and the result is frequently not what you intended. Punctuation at boundaries lands in visually wrong positions. You need isolation marks (
U+2068/U+2069) or<bdi>around embedded runs. - Text expansion. Arabic strings can be meaningfully shorter or longer than their English equivalents. Components sized against English copy overflow or collapse. Fixed-width buttons are the usual first casualty.
- Third-party components. Your date picker, charting library, rich text editor, and map controls each have their own RTL story. Some are excellent. Some do nothing. You find out one at a time.
- Animations and gestures. Slide-in directions, swipe-to-dismiss, and carousel transitions all carry directional assumptions written when someone was thinking left-to-right.
None of this is intellectually hard. All of it is a sweep across the entire surface area of the product, which is why doing it at the end costs multiples of doing it from the beginning — and why retrofitted RTL interfaces tend to look retrofitted to people who read Arabic natively.
2. Collation and normalization break search silently
This is the one that gets shipped broken, because it produces no errors. Search simply returns fewer results than it should, and nobody files a bug because nobody knows what should have matched.
Arabic text has several sources of variance that users do not perceive as variance:
-
Alef variants.
أ,إ,آ, andاare frequently typed interchangeably. A user searching for a name spelled with one will not match a record stored with another under naive equality. -
Ta marbuta and ha.
ةandهare commonly substituted at word endings. -
Alef maqsura and ya.
ىandيlikewise. -
Diacritics (tashkeel). Usually absent, sometimes present.
U+064B–U+0652need stripping before comparison. -
Tatweel. The kashida
ـis a decorative elongation carrying no semantic meaning and must be removed. - Presentation forms. Text pasted from PDFs or legacy systems often arrives as Unicode presentation forms rather than standard letters. NFKC normalization handles this; nothing else does.
The fix is a normalized search column populated at write time — strip diacritics and tatweel, unify alef and ya and ta marbuta variants, apply NFKC — with queries normalized identically before comparison. Add an appropriate index on it.
Note the shape of that fix: a new column, written at insert time, backfilled across existing rows. That is a migration on your hottest table, plus a rewrite of every query that touches it. Cheap in week two. Genuinely disruptive in month eight with production traffic on it.
Two related traps in the same family. Person names in Arabic do not decompose reliably into first and last — a schema with first_name and last_name NOT NULL will corrupt real user data from the first week of production. And sorting requires a locale-aware collation, not byte ordering, or your alphabetical lists are arbitrary to the people reading them.
3. Data residency is decided in week one whether you decide it or not
The third constraint is the most expensive and the least visible, because it is settled by default before anyone frames it as a decision. Someone stands up infrastructure, picks the region they always pick, and the choice is made.
The regulatory picture here has four interacting layers:
- The federal data protection law, broadly GDPR-shaped — lawful basis, subject rights, breach notification, controls on cross-border transfer.
- Free zone regimes. DIFC and ADGM operate their own data protection frameworks with their own commissioners. If your entity sits in one of these, the federal law is not the complete picture.
- Sector regulators. Health data under DHA or DoH oversight and financial data under Central Bank supervision carry residency expectations stricter than the federal baseline.
- Your own entity structure. Mainland versus free zone determines which of the above applies, plus payment gateway eligibility and national digital identity integration.
Engineering consequences that follow directly:
- Region selection is a week-one decision. Both major hyperscalers run UAE regions. They cost more than European ones. That delta belongs in the budget from the start.
- Data classification belongs in the schema. You need to know which tables hold personal data, which hold health or financial data, and which hold neither — because that determines what may leave the country for analytics or support tooling.
- Third-party services are the usual leak. Analytics, crash reporting, session replay, support widgets, and model APIs all move data across borders by default. Each needs an explicit decision and usually a data processing agreement.
- Deletion must be engineered. A privacy policy promising deletion in thirty days is fiction if nobody built the cascade. Foreign keys, soft deletes, backups, and downstream analytics copies all need a defined story.
- Model calls are transfers. Routing personal data to an inference endpoint outside a permitted jurisdiction is a cross-border transfer, whatever the integration is called in your architecture diagram.
Relocating residency after schema and integrations have settled means re-architecture plus a live migration, on a team that has already spent its contingency. Compare that to twenty minutes of conversation in week one.
Where AI helps here, specifically
Worth being concrete rather than promotional, since this is the part most vendor decks overstate.
Genuinely useful: generating the normalization function and its test matrix across variant spellings; sweeping a codebase for physical CSS properties and proposing logical replacements; drafting the data classification map from an existing schema; producing migration scripts for the normalized column.
Not useful: deciding which regulator applies to you, whether a given third-party processor is acceptable, or what your data model should be when departments disagree. Those remain human, and on regulated UAE projects they are the majority of the effort — which is why a proposal offering fifty percent off "because AI" has mispriced the work rather than optimized it.
The larger shift is what became newly buildable. Reliable Arabic language handling in production moved from research problem to procurement decision in roughly two years. Bilingual document processing, mixed-language semantic search, and Arabic-and-English support triage were six-figure custom projects and are now weeks of integration work. For a bilingual market that matters more than any hourly discount.
Practical ordering
If you are starting a UAE build this quarter:
- Establish which regulatory regimes apply — federal, free zone, sector — before infrastructure exists.
- Pick the region accordingly, and put the cost delta in the budget.
- Use CSS logical properties from the first component.
- Add the normalized search column in the initial schema, not later.
- Model names as a single field with optional structured parts.
- Inventory every third-party processor with its data location before integrating it.
Six items. Cheap now, expensive later, and in two cases effectively irreversible.
Full country-level guide, including emirate-by-emirate landscape, AED budget bands, the vendor question set, and contract terms: App Development Companies in UAE: The 2026 Buyer's Guide.
Frequently Asked Questions
Do CSS logical properties fully solve RTL?
They solve layout mirroring if used consistently from the start. They do not handle directional iconography decisions, bidirectional string isolation, text expansion in fixed-size components, third-party component behaviour, or directional animations. Budget an audit regardless.
What exactly should Arabic search normalization do?
Strip diacritics (U+064B–U+0652) and tatweel, unify alef variants to a single form, normalize ta marbuta to ha and alef maqsura to ya, and apply NFKC to collapse presentation forms. Store the result in an indexed column written at insert time, and normalize queries identically.
Can I store UAE user data outside the UAE?
Sometimes — it depends on your sector and entity type rather than a blanket rule. Health data under DHA or DoH oversight and financial data under Central Bank supervision carry the strictest expectations. DIFC and ADGM entities answer to their own regimes. Resolve this before choosing a region.
Are AI API calls a cross-border data transfer?
Yes, if personal data is included in the request and the endpoint sits outside a permitted jurisdiction. Treat model providers exactly like any other subprocessor: document the transfer, execute a data processing agreement, and consider a regional deployment where residency is strict.
Why not just add RTL support later?
Because RTL touches every component, every directional asset, every animation, and every third-party integration. Late RTL is a full-surface sweep rather than a feature, and the results are visibly compromised to native readers. Logical properties from day one cost nothing extra.


Top comments (0)