Founder & Lead Engineer, RAITHub
RAITHub ships and tests production software. See QA as a Service or talk to us.
Localization (L10n) and RTL testing as a service is QA for a product in more than one language and direction: a provider tests that every locale lays out, formats and reads correctly, that right-to-left and mixed-direction text behave, and that nothing overflows. You buy it as a one-off audit, a monthly plan or a dedicated team. It suits teams expanding into new languages.
If you would rather have it tested for you, see how RAITHub would test this below, or go to the QA as a service overview. One honest line first: this is engineering and layout QA. The translated copy and its linguistic review stay with a native speaker on your team or a translator, because RAITHub delivers in English.
What is localization testing, beyond translated strings?
It is checking that the product works in each locale, not just that the words were translated. A string file can be complete and the app still break: a German label overflows a button, an Arabic screen mirrors the wrong way, a date shows in the wrong calendar, a price formats differently in an email than on the page. Localization QA covers the layout, the formatting and the logic that change with language and region.
- Layout and overflow: longer translations (German and Finnish run long) that push, wrap or clip, and truncation that lands in the right place.
- Direction: right-to-left languages such as Arabic, Hebrew, Persian and Urdu, where the whole layout mirrors, not just the text.
- Formatting: numbers, dates, calendars, currency and units, chosen on purpose per locale and consistent across screens, emails and PDFs.
- Mixed-direction text: an English brand name, an order code or a number inside an Arabic sentence, which the browser must order correctly.
- Input and fonts: locale keyboards, sorting, search, and fonts that carry the script with room for diacritics.
Why is right-to-left testing a special case?
Because direction changes the layout, not just the words. When a page switches to Arabic, the sidebar moves, the back arrow points the other way, a progress bar fills from the right, and every sentence with an English word or number becomes a bidirectional (bidi) string the browser must order. The W3C's guidance is to set direction in the markup with dir="rtl" on the html element rather than in CSS (W3C: structural markup and right-to-left text), and to use CSS logical properties such as margin-inline-start so spacing follows the reading direction without a second stylesheet (MDN: CSS logical properties). Most RTL defects come from code that ignores one of those two ideas.
RTL testing is deep enough to have its own 20-point list. For the full version, see the Arabic RTL QA checklist; this post is the commercial service wrapped around it and around the other locales.
What does a localization testing service cover?
| Area | What it answers | How it is tested |
|---|---|---|
| Layout and overflow | Does every locale fit without clipping, wrapping badly or scrolling sideways? | Per-locale screenshot tests; long-string fixtures |
| Direction and mirroring | Does the RTL layout mirror correctly, with the right icons flipped? | Both-direction screenshots; icon component tests |
| Formatting | Are numbers, dates, calendars and currency right and consistent everywhere? | Unit tests on pinned formatters |
| Mixed-direction text | Do English codes, emails and numbers sit correctly inside RTL text? | Bidi fixtures with isolation checks |
| Outside the app | Are emails, PDFs and SMS templates localized and directional too? | Render templates and screenshot them |
How do you test a locale in code?
Pin every format choice in one module and test that module, so the browser default cannot change it. Then run the same end-to-end tests once per locale and compare screenshots. A minimal example:
Free checklist
AI-Built App Launch Readiness Checklist
25 checks before you let real users in. Enter your email and we’ll reveal it below (and send you a copy).
One email, the checklist, no spam. By submitting you agree we can email you this checklist and reply to your enquiry.
// format.ts: every number and date goes through here
export type Digits = 'latn' | 'arab'
export const formatNumber = (n: number, locale: string, digits: Digits) =>
new Intl.NumberFormat(locale + '-u-nu-' + digits).format(n)
// format.test.ts
import { describe, it, expect } from 'vitest'
import { formatNumber } from './format'
describe('locale formatting is pinned, not left to the runtime', () => {
it('uses the digits we chose', () => {
expect(formatNumber(1234, 'ar-SA', 'latn')).not.toMatch(/[٠-٩]/)
expect(formatNumber(1234, 'ar-SA', 'arab')).toMatch(/[٠-٩]/)
})
})
// rtl.spec.ts (Playwright): one project per locale
import { test, expect } from '@playwright/test'
test('direction and layout hold', async ({ page }, testInfo) => {
const lang = testInfo.project.name // 'en' or 'ar'
await page.goto('/' + lang + '/checkout')
// Direction must come from the markup, per the W3C.
await expect(page.locator('html')).toHaveAttribute('dir', lang === 'ar' ? 'rtl' : 'ltr')
// No locale should push the page sideways.
const overflow = await page.evaluate(
() => document.documentElement.scrollWidth - document.documentElement.clientWidth,
)
expect(overflow).toBeLessThanOrEqual(0)
// Compare against this locale's own approved baseline.
await expect(page).toHaveScreenshot({ fullPage: true, animations: 'disabled' })
})
Playwright sets the locale per project and compares pages against per-locale baselines (Playwright: emulation, Playwright: visual comparisons), so the Arabic and English screens are only ever compared with themselves. For the digit and calendar choices, Intl accepts them as Unicode extensions on the locale (MDN: Intl.Locale numberingSystem).
Buy, build or hire?
| Route | What it costs on the market | Choose this when | Watch out for |
|---|---|---|---|
| A screenshot or L10n tool | Cloud browser testing starts around $29 to $39 a month per user (BrowserStack pricing) | Your developers own the locales and only need an environment | A tool diffs images; it does not decide what each locale should look like |
| Freelancers or crowdtesting | Upwork lists a median of $35 an hour for QA engineers (Upwork QA engineer rates) | A short pass for one new language | RTL and bidi rigour vary; coverage leaves with the person |
| An in-house QA hire | The US median wage for QA analysts and testers was $104,300 in May 2025, before benefits (US Bureau of Labor Statistics) | Many locales are core to the product and you can manage a QA lead | One hire rarely covers layout, direction and formatting across locales |
| A managed L10n testing service | Quoted per scope: an audit, a plan or a dedicated team | You are expanding into new languages or the Gulf and have no L10n QA | Agree who owns the translated copy; QA is layout and logic, not translation |
How RAITHub would test this
- Scope: list the locales, the directions (including RTL), and the critical journeys to cover per locale.
- Formatters: pin numbers, dates, calendars and currency in one tested module, so they never drift between a page and an email.
- Per-locale suite: a Playwright project per locale with its own screenshot baselines, plus attribute and overflow assertions and bidi fixtures.
- Guardrails: a lint rule that keeps physical left and right out of the CSS, run on every pull request.
- Outside the app: emails, PDFs and SMS rendered and checked per locale.
Timeline: a one-off audit is fixed in scope and dates before it starts; a plan or dedicated team runs month to month. You receive: a test plan, bug reports in your tracker, the per-locale test suite and CI configuration in your repository, a handover document, full IP and an NDA. Next step: a free 15-minute audit, then a written fixed quote. The QA proof RAITHub cites is counted test suites: TheSkinProof (the founder's own venture) runs 750+ tests, PropDesk runs 1,024, and this website runs 400+ in CI. There is no localization QA case study yet, so judge the service on the audit.
To start, tell RAITHub which locales you support. For a single pre-launch pass, use the one-off audit form. Bring two or three screens that look wrong in a new language.
When don't you need RAITHub for this?
- You need linguistic QA: grammar, tone, terminology and translation review. That needs a native speaker, not an engineering team.
- Your site is a hosted theme with built-in RTL support and no custom components. Test it by hand against the checklist.
- You need native iOS or Android RTL testing only. RAITHub tests web apps and mobile web; see the mobile testing service for native apps your team builds.
- You want testers under your own management. RAITHub does not offer staff augmentation.
Frequently asked questions
What is localization testing?
Checking that a product works in each language and region, not just that the strings were translated: layout and overflow, direction and mirroring, number, date, calendar and currency formatting, mixed-direction text, and localized emails and PDFs. It is layout and logic QA, separate from translation review.
Does localization testing include translating the content?
No. RAITHub tests the localized interface and its formatting. The translated copy and its linguistic review come from a native speaker on your team or a translator, because RAITHub delivers in English.
How do you test right-to-left layouts?
Run every screen in both directions against a checklist: direction set in markup, logical CSS, pinned formatters, mirrored directional icons, and isolated mixed-direction text. Automate it with a Playwright project per locale, screenshot baselines, an overflow check, and a lint rule that blocks left and right in CSS.
Which languages and locales do you cover?
Any the product supports. RTL languages such as Arabic, Hebrew, Persian and Urdu get the extra direction and bidi checks; long-word languages such as German and Finnish get extra overflow checks. The locale list is a scope decision made with you.
Can you automate localization checks in CI?
Yes. A Playwright project per locale with its own screenshot baselines, unit tests on the formatters, and a lint rule against physical CSS properties all run on every pull request, so a layout that was right at launch does not drift one component at a time.
How much does localization testing cost?
It depends on the number of locales, directions and journeys. Marketplace QA engineers typically charge $20 to $60 an hour. RAITHub publishes no rates and quotes a fixed price after a free audit.
Related posts
Ready to discuss your project?
Book a free 15-minute technical audit with our engineering team.