Skip to main content
Tutorial

How I Handle Arabic Text Direction in React Native Apps

5 min read

Solving Arabic RTL text layout issues in React Native, from I18nManager to icon flipping

React NativeArabicRTLText DirectionI18n

I was three weeks into building Tawasul Limo — a luxury car service booking app for Abu Dhabi — when the client sent back their test build with one line that made my stomach drop: "The Arabic text looks broken but I can't explain why." Turns out, Arabic text alignment in React Native isn't "just add RTL" magic. It's 2026, and I still hit the same weird bugs when integrating right-to-left support. Here's how I fix them.

Setting Up Basic RTL Support in React Native

First thing I do: flip React Native's I18nManager. This toggles the global layout direction like so:

javascript
import { I18nManager } from 'react-native';  
I18nManager.allowRTL(true);  
I18nManager.forceRTL(true);  

Most apps pair this with react-native-localize to detect the system language. But I always force RTL for Arabic users regardless of device settings — Gulf users often keep English phones but expect Arabic UI when they switch the app language.

For text translation, I use next-intl with ICU message format. It's solid for handling noun plurals and gender cases that English devs rarely think about. (Example: Tawasul Limo had 12 different date format strings for Arabic-speaking regions.)

Component-Specific Fixes That Actually Work

Text components need attention. This isn't just about direction — Arabic typography spaces punctuation differently. A simple Text style might look like:

javascript
const styles = StyleSheet.create({
  bodyText: {
    textAlign: I18nManager.isRTL ? 'right' : 'left',
    marginBottom: 8,
    // Fixes iOS spacing issues specific to Arabic
    paddingBottom: I18nManager.isRTL ? 2 : 0,
  },
});

TextInput gets funky. Placeholder text misaligns, icons jump to wrong sides, and keyboard predictions flicker. The solution? Wrap each input in a View with explicit flexDirection: 'row' and mirror icon positions manually. I use react-native-vector-icons for custom SVGs that flip with resizeMode: I18nManager.isRTL ? 'scaleAspectFit' : 'center'.

One time, a TouchableOpacity on an RTL screen aligned its children perfectly… until I added a Pressable inside. Took me two hours of rage-debugging to realize I needed pointerEvents="auto" on the Pressable. Never again.

Styling Strategies That Survive QA

Flexbox works differently in RTL. Left/right props stay hardcoded unless you abstract them. I swap hardcoded values with variables:

javascript
const paddingStart = I18nManager.isRTL ? 'paddingRight' : 'paddingLeft';  
const borderRadius = I18nManager.isRTL ? { borderBottomEndRadius: 8 } : {};  

Or use transform matrices for complex layouts. For example, flipping a card component in Greeny Corner's AI plant identifier app:

javascript
transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }]

Testing this manually is a pain. I built a test screen with sample text nodes and directional icons. QA in Dubai usually catches two things: missing mirrored images and incorrect Text selection highlighting that bleeds outside lines.

Testing with Real Arabic Users

You can simulate RTL in Flipper, but real users find edge cases faster. For a retail app in Riyadh last year, we thought we'd covered everything until a tester opened the cart screen and said, "The '3 أيام' number should come after the word 'Days' not before." Arabic handles numerals differently for time phrases.

Debugging tip: Add a locale switcher to every app I build. Lets anyone toggle languages fast without factory-resetting their phone. It's in this GitHub repo if you want the base logic.

Frequently Asked Questions

Is Expo supported for RTL text in React Native?

Yes — Expo SDK 54+ handles RTL better after they fixed the Modal text cutoff issue in 2025. But check their community plugins — some third-party packages still break Arabic layout.

Why does my Text component look misaligned in Arabic?

Probably font metrics. Not all Google Fonts handle Arabic spacing right. Try @fontsource/tajawal instead of system fonts — it's optimized for mobile and has 9 weights.

How do I format dates in both Arabic and English?

Use new Intl.DateTimeFormat() with the locale code. For Gulf markets, I default to ar-sa (Saudi Arabic) and en-ae (UAE English). The React Native Performance guide shows exact code examples.

Do icon libraries automatically flip in RTL?

Not unless you tell them. react-native-vector-icons requires explicit flipping. Here's my trick for icons: load mirrored SVGs when RTL is active, or use transform: scaleX(-1) on individual Icons.


If you're building bilingual apps and want to dodge these bugs, I help UAE startups structure their React Native apps for multilingual scalability — book a free consultation and we'll go through your specific case. Oh, and yes: I ship builds with the test locale switcher by default now. Pain is cheaper in dev than in production.

S

Sarah

Senior Full-Stack Developer & PMP-Certified Project Lead — Abu Dhabi, UAE

7+ years building web applications for UAE & GCC businesses. Specialising in Laravel, Next.js, and Arabic RTL development.

Work with Sarah