Your Product Works in English. What Happens Everywhere Else?
Share this post

A mid-sized SaaS company spent four months preparing its first non-English release. Product marketing translated the landing pages. A localization vendor translated the in-app strings. Legal reviewed the German terms of service. The launch date was set, the press release drafted, the regional sales team hired.

Three weeks after the German version went live, the churn numbers for that cohort were worse than the English-language baseline from the same acquisition channels. Support tickets mentioned a settings page where two buttons overlapped. A finance-adjacent feature showed invoice totals that looked wrong to German users, even though the underlying math was correct. The date picker on the billing page confused people migrating from a competitor that used a different date order. None of this showed up in the localization vendor's translation review, because none of it was a translation problem. It was a testing gap dressed up as a language problem.

This is the pattern this article is about. Most companies budget for translation. Far fewer budget for testing the product against the structural consequences of supporting another language — text that expands past its container, numbers that mean something different when the separators change, a layout that assumes left-to-right reading, and business logic that quietly assumes an English-speaking, US-formatted, Latin-alphabet world. Translation makes the words correct. It does nothing for the code that renders around those words.

QAtronic works with software teams on quality strategy across markets, and the pattern above is close to the median experience of a first international launch, not an outlier. This piece is a practical breakdown of what actually breaks when a product meets a new locale, why conventional QA processes miss it, and how to build a testing discipline — proportionate to your size and risk — that catches these defects before customers do.

Why "We Localized It" and "We Tested It" Are Different Claims

Ask an engineering leader whether their product is tested, and they will describe a CI pipeline, a suite of unit and integration tests, maybe a QA team running exploratory sessions before release. Ask the same leader whether their product is tested for the German market, and the answer usually collapses into: "the strings are translated, and someone reviewed them."

Those are not the same question. A translated string is a correct sentence sitting inside a system that was never verified to render it correctly, calculate around it correctly, or sort, filter, and search it correctly. The translation vendor's job is linguistic accuracy. Nobody in that relationship is contractually or practically responsible for what happens when "Subscription" becomes "Abonnement" and the button it sits inside was sized for six characters.

This distinction matters because of where responsibility silently falls through the cracks. Product management commissions translation. A localization vendor or in-house linguist delivers translated strings. Someone imports them into the codebase, sometimes through a translation management system, sometimes by hand. The build compiles. Nobody in that chain has looked at a rendered screen in the target locale before it reaches either a demo, a beta customer, or — more often than teams want to admit — production.

Manual or automated functional testing, in most organizations, runs exclusively in the source language, usually English, with source-locale formatting. A test suite with hundreds of passing assertions can be telling you nothing about German, Japanese, or Arabic behavior, because every one of those assertions was written and executed against English strings in US date and currency formats. Passing tests are evidence the logic works for the case tested. They are not evidence the product works for a customer whose language, script, number format, or reading direction differs from the one the tests exercise.

This is not a criticism of test-writing discipline. It is a description of a blind spot that exists by default and has to be deliberately closed. The rest of this article maps where that blind spot actually causes damage, because "test in other languages" is too vague an instruction to act on. The failures cluster into a small number of categories, and each one has a distinct root cause and a distinct testing approach.

Internationalization vs. Localization: Where the Testing Responsibility Splits

The industry uses two words that get conflated constantly, and the conflation is exactly where the accountability gap opens up.

Internationalization (often abbreviated i18n, because there are 18 letters between the "i" and the "n") is engineering work. It means designing and building the product so that it can support multiple languages, scripts, regions, and formatting conventions without code changes. Internationalization is done once, by engineers, and it lives in the codebase: externalizing strings instead of hard-coding them, using locale-aware libraries for dates and numbers instead of string concatenation, supporting Unicode text throughout the stack, and building layouts that don't assume a fixed text length or a fixed reading direction.

Localization (l10n) is the ongoing adaptation of the internationalized product for a specific market: translating strings, adjusting imagery and color choices where culturally relevant, adapting currency and units, and sometimes adjusting business logic for local regulatory or market norms. Localization happens repeatedly, once per target market, and is often owned by content, marketing, or a translation vendor.

Here is the accountability gap in one sentence: internationalization is an engineering responsibility that determines whether localization is even possible without defects, but it is almost never tested as its own discipline — it is assumed to be "done" once a translation management system is wired up, and then all subsequent attention shifts to localization quality (is the translation accurate, is the tone right) rather than internationalization quality (does the system behave correctly regardless of language).

A product can have excellent localization — fluent, culturally appropriate translations reviewed by native speakers — sitting on top of poor internationalization, and the result is precisely the pattern from the opening of this article: linguistically perfect text that overflows its container, invoice numbers that are technically accurate but formatted in a way that reads as wrong, and a settings page that silently breaks because a string concatenation assumed a specific word order.

The practical implication for a QA strategy: internationalization defects need to be caught by engineering-owned testing, ideally automated and run continuously, before a single string goes to translation. Localization defects — translation accuracy, tone, cultural fit — need a different kind of review, typically involving native speakers or in-market reviewers, and they need to happen after internationalization testing has confirmed the product can safely display arbitrary text in arbitrary scripts and directions. Doing localization review before internationalization testing means reviewers spend their time flagging structural bugs that have nothing to do with translation quality, which is both inefficient and demoralizing for the linguists doing the review.

The Text Problem: Expansion, Truncation, and Concatenation

The single most common category of localization defect is also the easiest to explain and the easiest to prevent: text in other languages is rarely the same length as text in English, and interfaces built and tested only in English tend to assume it will be.

German, as a rule of thumb widely used in localization engineering, expands by roughly 30 to 35 percent relative to English for UI strings, sometimes more for compound nouns. A short English label like "Settings" becomes "Einstellungen." A three-word phrase can become a six-word phrase. Finnish, Russian, and many other languages show similar expansion patterns for short UI strings, where the relative overhead of grammatical case endings is proportionally largest on short words. The direction is not universal — Chinese and Japanese text is frequently shorter in character count than the English equivalent, but the visual width of CJK characters is larger per character, so a text container sized by character count rather than pixel width still breaks, just in the opposite way.

The result, in a product that was designed and pixel-tested only against English strings, is a predictable set of failures: labels that wrap onto a second line and push other elements down, buttons that clip their text, tab labels that truncate mid-word with no ellipsis handling, form fields where the label overlaps the input, and modal dialogs where a translated warning message no longer fits above the fold.

Truncation is the more insidious version of this problem, because it often does not look broken — it looks like a design decision. A string cut off with an ellipsis reads as intentional. But if the truncated string was a warning, an error message, or a legal disclosure, truncation silently deletes the second half of information the user needed. In regulated contexts — consent language, refund terms, data-processing notices — a truncated translated string is not a cosmetic bug. It can be a compliance gap, because the full disclosure that a legal or privacy team approved is not the string that actually renders.

Concatenation is a separate and often worse failure mode. Concatenation means building a sentence at runtime by joining string fragments and a variable, for example constructing "You have 3 new messages" as "You have " + count + " new messages". This works in English because English word order is fixed and predictable. It breaks in any language with different word order, different pluralization rules, or grammatical gender that changes based on the noun being counted. A famous, widely cited category of localization bug involves exactly this: strings that read correctly in English and produce grammatically broken or semantically wrong sentences in German, Russian, Arabic, or Polish, because the code assumed a fixed sentence structure that only happens to hold in English.

What to test, specifically:

  • Render every screen with pseudo-translated strings 30–50% longer than the English source (see the pseudolocalization section below) and check for wrapping, clipping, overlap, and truncation across every breakpoint the product supports, not just desktop.
  • Search the codebase for string concatenation patterns that build sentences from fragments and variables rather than using a message-formatting library (such as ICU MessageFormat) that allows the entire sentence, including variable placement, to be translated as a unit.
  • Verify that every truncated string has a mechanism to reveal the full text — a tooltip, an expand affordance, or a layout that avoids truncation for legally or functionally critical content — and treat any truncation of legal, consent, or safety-relevant text as a release blocker, not a design note.
  • Check components with fixed pixel widths (badges, pills, table columns, sidebar navigation) specifically, since these tend to be styled once against short English labels and never revisited.

Direction Is Not a Font Setting: Testing Right-to-Left Layouts

Arabic, Hebrew, Farsi, and Urdu are read right to left, and a meaningful share of SaaS companies expanding into the Middle East or serving Arabic- or Hebrew-speaking users treat this as a CSS property: set dir="rtl", flip the stylesheet, done. The W3C's own internationalization guidance for specification authors is explicit that this assumption is wrong at a more fundamental level than most teams realize: text direction and language are semantically distinct properties, and direction cannot be reliably inferred from language alone — a page can contain right-to-left text embedded inside a left-to-right document, or vice versa, and the correct handling depends on explicit metadata at the string or block level rather than a single global flag.

In practice, this means right-to-left support is not "flip the layout." It is a set of interacting concerns:

Bidirectional text. Real-world Arabic and Hebrew interfaces frequently mix right-to-left prose with left-to-right content: numbers, email addresses, product SKUs, English brand names, code snippets. Naively flipping the whole layout to right-to-left breaks these embedded left-to-right runs, producing text where digits or Latin words appear reversed or where the reading order of a mixed sentence becomes ambiguous. The W3C's guidance recommends using directional isolation controls to wrap embedded runs of the opposite direction, rather than relying on the browser or renderer to guess correctly — and guessing is exactly what happens if a team has never tested a screen containing both scripts at once.

Mirroring versus non-mirroring elements. In a right-to-left layout, navigation chevrons, progress indicators, and the general reading flow of a page should mirror — a "next" arrow that pointed right in English should point left in Arabic, because the reading flow itself flips. But not everything should mirror: icons that represent real-world objects with an inherent orientation (a clock, a play button, a company logo) typically should not flip, and naive "flip everything" CSS rules mirror these incorrectly, producing icons that look subtly wrong to every right-to-left user even if no one on the testing team can immediately articulate why.

Form and table logic. Right-to-left layouts affect the tab order of forms, the alignment of table columns, the direction of horizontal scrolling, and the placement of icons relative to text inside buttons and inputs. A checkout form that was never tested in an RTL context frequently ends up with an address field where the cursor behaves in a disorienting way when the user types a mix of Arabic text and Latin-script postal codes.

What to test, specifically:

  • Test with at least one real bidirectional data set — a name in Arabic script paired with a Latin-script email address and a numeric ID — rather than a screen with uniformly right-to-left placeholder text, since uniform text hides the bugs that only appear when directions mix.
  • Build or use an RTL pseudo-locale in addition to a genuine Arabic or Hebrew locale; a pseudo-locale can be generated automatically and run in CI on every build, catching structural mirroring bugs long before a native Arabic speaker ever reviews a screen.
  • Explicitly review every icon in the design system and classify it as "should mirror" or "should not mirror" once, rather than leaving the decision to whatever the CSS framework's default RTL behavior happens to be.
  • Test keyboard navigation and tab order in RTL mode specifically, since tab order bugs in RTL forms are among the least visible defects in a sighted click-through review and among the most disruptive for actual users, particularly for accessibility-dependent users navigating by keyboard.

Numbers, Dates, and Calendars: The Quiet Corruption of Meaning

Nothing in localization testing produces more confidently wrong output than numeric and date formatting, because the output usually still looks like a valid number or date — it is simply the wrong one, and nothing in the interface signals that anything is off.

Consider a date rendered as 03/04/2026. In the United States, this is March 4th. In Germany, the UK, and most of the rest of the world, it is April 3rd. Neither rendering is broken in the sense of throwing an error or displaying garbage — both are perfectly well-formed dates. The defect is invisible at the code level and only becomes visible when a human reads it and draws the wrong conclusion, which is exactly the kind of defect that automated testing focused on "does it render without error" will never catch, and that only a test explicitly checking the correct value for a target locale will surface.

This category of defect shows up across a long list of surfaces: invoice and subscription renewal dates, SLA deadlines, data export timestamps, log timestamps shown to end users, "last updated" labels, calendar integrations, and any UI showing relative time ("3 days ago") where the underlying date arithmetic needs to respect the viewer's calendar and time zone, not just their language.

Number formatting has a parallel and, in financial contexts, higher-stakes version of the same problem. Most of the world outside the English-speaking countries and a handful of others uses a comma as the decimal separator and a period (or a space) as the thousands separator — the reverse of US convention. A price rendered as 1.234,56 is one thousand two hundred thirty-four point five six in most of continental Europe, and it is easy to see how a system that renders 1,234.56 verbatim to a German user, or worse, one that parses a German-formatted number using US separator assumptions, produces numbers that are off by three orders of magnitude. This is not hypothetical: currency and number-parsing bugs of exactly this shape are a recurring category of defect in systems that accept locale-formatted input from users — a support form, a bulk CSV import, a manual invoice adjustment — and pass it through code that assumes a single separator convention.

Currency itself introduces a further layer: which currency symbol appears, where it appears relative to the number (before or after, with or without a space), and whether the displayed currency matches the currency the customer is actually being billed in, are three independent things that can each be individually correct or individually wrong. A price correctly converted to euros but displayed with a dollar sign, or displayed with the euro sign in the wrong position for German typographic convention, both read as "wrong" to the customer even though the underlying value might be accurate.

Calendars introduce the least commonly tested and most consequential edge case for products with any presence in the Middle East, parts of Asia, or Ethiopia: the Gregorian calendar is not universal. Products handling scheduling, subscription billing, or compliance deadlines for users in regions where other calendar systems have official or cultural use need to at least verify that Gregorian dates are computed correctly across boundary conditions (this is a distinct problem from full alternate-calendar support, which is a larger internationalization investment most SaaS products reasonably choose not to make, and choosing not to make it is a legitimate scoping decision — the failure is not making that decision consciously, and not testing that the Gregorian fallback behaves correctly and communicates clearly).

What to test, specifically:

  • For every screen displaying a date, verify it uses a locale-aware formatting function (not a hand-built string template) and spot-check the rendered output for at least three locales with genuinely different date orders: US (MM/DD/YYYY), most of Europe (DD/MM/YYYY), and ISO-adjacent conventions used in parts of Asia (YYYY/MM/DD).
  • Test number and currency parsing, not just display, anywhere the product accepts numeric input from a user whose browser or account is set to a non-US locale — this is the direction of the bug that actually loses money, as opposed to display bugs that merely confuse.
  • Explicitly test ambiguous dates (the 1st through 12th of any month) rather than dates that happen to disambiguate themselves (the 25th), since ambiguous dates are exactly the ones where a format mismatch is invisible until someone acts on the wrong interpretation.
  • Confirm that the currency symbol, its position, and the actual billed currency are independently verified for each supported locale, particularly after any payment provider or pricing page change, since these three elements are frequently maintained by different teams (design, engineering, finance) who each assume the others have it covered.

Pluralization and Grammar: Why English Rules Don't Generalize

English pluralization is deceptively simple: a noun is either singular or it takes an "s" (with a manageable list of irregular exceptions). This simplicity leads to a very common internationalization shortcut: build a UI string like "{count} item(s)" or write conditional logic like count === 1 ? "item" : "items", and assume this pattern generalizes. It does not, and the Unicode Common Locale Data Repository (CLDR) — the standard reference most modern internationalization libraries rely on for locale data — documents why in detail.

CLDR defines up to six plural categories that languages draw from: zero, one, two, few, many, and other. English only uses two of these (one and other). Arabic uses all six, with distinct grammatical forms depending on whether a quantity is zero, exactly one, exactly two, a small number (a "few," with specific numeric ranges depending on the exact language variant), a larger number (a "many"), or the general case. Russian and Polish use three categories with numeric boundaries that do not map onto English "singular vs. plural" at all — in Russian, the grammatical form used for "2 files" is different from the form used for "5 files," which is different again from "21 files," because Russian plural category selection depends on the last digit and the last two digits of the number in ways that have no equivalent in English grammar.

A codebase that hard-codes an English-style singular/plural branch, then hands the resulting string to a translator, puts the translator in an impossible position: there is no correct Russian or Arabic translation of a UI pattern that only has two branches when the target language grammatically requires three or six. The translator either produces grammatically incorrect text to fit the available slots, or the localization vendor has to go back to engineering and demand a code change — which is exactly the kind of late-stage, expensive rework that proper internationalization testing exists to prevent.

The correct engineering pattern, and the one CLDR-aware libraries (ICU MessageFormat, and its equivalents in most major i18n frameworks) are built around, is to define plural rules per category rather than per number, so the translation step provides one string per grammatical category the target language actually requires, and the runtime selects the correct one based on the CLDR plural rule for that locale and that specific count.

Beyond pluralization, several other grammar-driven i18n concerns follow the same shape — an English-shaped code assumption that silently breaks for other languages:

Grammatical gender. Many languages assign gender to nouns, which affects the form of adjectives, articles, and sometimes verbs referring to that noun. A UI that dynamically inserts a product name or category into a sentence template can produce grammatically inconsistent sentences in gendered languages if the template doesn't account for the gender of the inserted term — a problem with no clean general solution, but one that at minimum needs to be a known, tested limitation rather than a surprise discovered by a native speaker after launch.

Sorting order. Alphabetical sorting is locale-dependent in ways that go beyond character order. German sorting treats umlauted characters differently depending on context (sometimes as the base letter, sometimes as the base letter followed by "e"). Several languages have letters that sort in a position that doesn't match Unicode code point order at all. A list, table, or search-result sort that uses a naive byte or code-point comparison rather than a locale-aware collation function will produce a sort order that looks obviously wrong to a native reader, even though nothing in the code "crashed."

What to test, specifically:

  • Confirm the codebase uses a CLDR-aware pluralization mechanism for any UI string involving a count, and treat any hard-coded singular/plural conditional as an internationalization defect regardless of whether it currently ships to a market that needs more than two plural forms — it will eventually.
  • Test count-driven strings specifically at the numeric boundaries that differ between English and the target language's plural categories (for Russian, test 1, 2, 5, 21, and 22, since these hit different plural categories).
  • Test locale-aware sorting on any user-facing list or table with a real data set that includes accented and non-Latin characters relevant to the target market, comparing the rendered order against what a native speaker of that language would expect.

Pseudolocalization: Finding i18n Bugs Before a Single Word Is Translated

Every category of defect described above shares one important property: none of them requires an actual translation to exist in order to be tested. This is the basis of pseudolocalization, a testing technique with roots in Microsoft's internal development process in the late 1990s that was formalized as a developer-facing feature during the Windows Vista era, when Microsoft shipped built-in "pseudo locales" designed to stress Western, right-to-left, and CJK-adjacent rendering characteristics without waiting for real translations.

Pseudolocalization works by mechanically transforming source-language strings — typically English — into a synthetic variant that remains readable to an English-speaking QA engineer or developer but deliberately exercises the properties that break internationalization-fragile code. A pseudo-localized string typically:

  • Expands the string length by a fixed percentage (commonly 30–50%) using padding characters, to catch layout overflow before a real German or Finnish translation exists.
  • Replaces Latin characters with accented look-alikes (turning "Account Settings" into something like "[Àççôûñţ Šéţţîñĝš]") to catch hard-coded assumptions about a limited character set (ASCII-only string handling, font glyph coverage, text-width calculations that don't account for diacritics).
  • Wraps the string in bracket characters, so any string that gets silently concatenated, truncated, or omitted from the localization pipeline is immediately visible — a raw, un-bracketed English string appearing on a pseudo-localized screen is an instant, unambiguous signal that a hard-coded string slipped past the externalization process.
  • Optionally applies right-to-left or CJK-style pseudo-transformations to catch bidirectional layout and wide-character rendering bugs independently of whether the team currently has a real Arabic or Japanese translation available.

The strategic value of pseudolocalization is timing. Real translation is typically the last step before a release, often turned around by a vendor or contractor under time pressure, which means any internationalization bug discovered at that stage is discovered at the worst possible moment — too late to fix without either delaying the release or shipping the defect. Pseudolocalization can run automatically on every build, in CI, long before a translator has been engaged, which converts internationalization testing from a pre-launch fire drill into a continuous, cheap, automated gate that fails loudly the moment a text-expansion or hard-coded-string regression is introduced, regardless of which markets are currently in scope.

What a practical pseudolocalization setup looks like:

Most modern internationalization frameworks (ICU-based systems, most major JavaScript, Java, and mobile i18n libraries) either ship pseudolocalization support directly or can generate a pseudo-locale from the same source string catalog used for real translations, meaning the investment is primarily a CI configuration change rather than a new translation workflow. A practical setup runs a pseudo-locale build on every pull request touching UI code, takes automated screenshots of key screens in that pseudo-locale, and either fails the build automatically on layout overflow (where screenshot diffing tools are in place) or requires a QA sign-off on the pseudo-locale screenshots before merge. Teams without visual regression tooling can still get significant value from a much simpler version: running the application manually in the pseudo-locale for an hour before each release and walking through primary user flows, which reliably surfaces the highest-impact truncation and overflow bugs even without automation.

The Translation Pipeline Is a Production System, Not a Handoff

Once internationalization testing has established that the product can safely display arbitrary text in arbitrary scripts, lengths, and directions, the remaining risk shifts to the translation pipeline itself — and this pipeline deserves the same operational scrutiny a team would apply to any other system that data flows through, because it fails in exactly the same ways: partial updates, silent staleness, and version mismatches.

String extraction and context. Translators do a measurably better job, with fewer round-trip questions and fewer contextually wrong translations, when they can see where and how a string is used — is "Post" a verb (submit) or a noun (a blog post)? Is "Close" a button that dismisses a dialog or a state describing a deal? Products that export a flat list of strings with no screenshots, no UI context, and no notes on variable substitution reliably produce translations that are grammatically correct and contextually wrong, which is a different and often harder-to-catch defect than an obvious typo, because it looks fine to anyone who doesn't already know what the string is supposed to mean in context.

Staleness and partial translation. In any product under active development, English strings change continuously — new features ship, copy gets revised, error messages get clarified — while translation into other languages happens in batches, on a cadence set by the vendor relationship or the translation management system's sync schedule. This creates a structural, ongoing risk of partial localization: a screen where eleven of twelve strings are correctly translated and the twelfth silently falls back to English (or worse, to a stale, previously translated version that no longer matches the current English copy) because it was added or changed after the last translation sync. This is not a one-time bug to fix; it is an ongoing operational condition that needs monitoring, the same way a team monitors for stale caches or replication lag, because the underlying cause — asynchronous update cycles between two systems — never goes away.

Translation memory and consistency drift. Most professional translation workflows use translation memory (a database of previously translated segments) to keep terminology consistent and reduce cost on repeated phrases. Consistency drift happens when the same English term gets translated two different ways in two different contexts because two different translators worked on the content at two different times without shared translation memory, or because the memory itself was seeded inconsistently. The result is a product that uses two different German words for "Dashboard" on two different screens — individually correct, collectively confusing, and a strong signal to attentive customers that the product's localization was assembled rather than designed.

Encoding and rendering integrity through the pipeline. Every hop a translated string takes — export from source, import into a translation management platform, export from the platform, import back into the codebase or CMS — is an opportunity for encoding corruption, especially for non-Latin scripts. Mojibake (garbled character rendering caused by an encoding mismatch) is a category of bug that automated internationalization testing in the pseudo-locale will not catch, because pseudolocalization typically stays within a controlled character set; it requires testing with real translated content, ideally sourced directly from the actual pipeline the product uses in production, not a manually pasted sample.

What to test, specifically:

  • Build an automated or scheduled check that compares the source-language string catalog against each target-language catalog and flags any string present in the source that is missing, stale, or unchanged since a source-string modification — this converts "we hope the translation sync worked" into a verifiable, monitored condition.
  • Run at least one full regression pass per target language using strings sourced from the actual translation pipeline (not placeholder or pseudo-localized text) before each market-facing release, specifically to catch encoding corruption and contextual mistranslation that pseudolocalization cannot detect.
  • Establish a lightweight terminology glossary for core product nouns (the names of your core objects and features) and check new translations against it, either through the translation management platform's built-in glossary features or through a manual spot-check, to catch consistency drift before it compounds across dozens of screens.

A Localization QA Maturity Model

Because "how much localization testing is enough" depends heavily on company stage, market ambition, and risk tolerance, a maturity model is more useful here than a single checklist. The five levels below describe a realistic progression, not a standard every company needs to reach — the right target level depends on how much revenue and regulatory exposure sits behind international markets, a question addressed later in this article.

Level 0 — Untested. Strings are translated and imported. No one has looked at a rendered screen in the target language before customers do. Defects are discovered through support tickets, churn analysis, or, in the least favorable case, a public screenshot on social media. This is the default state for most companies before their first serious international push, not a failure of judgment so much as a predictable consequence of nobody having explicitly owned the gap.

Level 1 — Manual spot-check. Someone — often a bilingual employee, not a dedicated tester — clicks through the primary user flows in the target language before each release and reports obvious visual breakage. This catches the most glaring overflow and truncation bugs but is inconsistent, non-repeatable, dependent on one person's availability and thoroughness, and provides no coverage of numeric, date, or pluralization logic, which are rarely visible from a casual click-through.

Level 2 — Pseudolocalization in CI. The product includes a pseudo-locale build that runs automatically, at minimum on every UI-affecting pull request, and QA reviews pseudo-locale screenshots (manually or via automated visual diffing) before merge. This is the point at which internationalization testing stops depending on any individual's language skills and becomes a repeatable engineering gate, and it is a reasonable target for most growth-stage SaaS companies with two or three active international markets.

Level 3 — Locale regression suite with real translations. In addition to pseudolocalization, the team maintains an automated or semi-automated regression pass using actual translated strings for each supported locale, covering date, number, currency, and pluralization logic with locale-specific test data (not just visual screenshots), and treats translation staleness as a monitored condition rather than a manual check. This level typically requires either an in-house localization engineer or a close, structured relationship with the translation vendor, and is appropriate for companies where international revenue is a meaningful and growing share of the business.

Level 4 — Continuous, native-reviewed locale quality. The organization combines automated locale regression with a standing relationship with native-speaking reviewers (in-market employees, contracted linguists, or a structured beta program) who periodically review live product surfaces for both correctness and cultural fit, and localization defects are tracked, triaged, and prioritized with the same rigor as any other production defect category, including service-level expectations for fixing a broken translated string. This level is appropriate for enterprise SaaS companies and any company where a localization defect carries direct regulatory, contractual, or reputational exposure — for example, financial services or healthcare-adjacent products operating under specific national consumer-protection or disclosure requirements.

Most companies significantly overestimate which level they are at, because Level 0 and Level 1 both feel like "we handle localization" from inside product and marketing, since translated strings visibly exist in the product. The honest self-assessment question is not "do we have translations," but "has anyone verified, systematically and repeatably, what a customer in that market actually sees."

Building a Locale Regression Suite That Doesn't Rot

A locale regression suite that is built once and never revisited degrades quickly, because the product keeps shipping new strings and new screens while the suite stays static — this is the same rot pattern that affects any test suite, but it is worse for localization tests specifically because the failure mode (a new, untested screen with an untranslated or overflowing string) is invisible to anyone not deliberately looking at that locale.

A durable approach has three components working together rather than any single tool:

Coverage tied to the string catalog, not to a fixed list of screens. Rather than maintaining a hand-picked list of "screens we test in German," tie locale test coverage to the string extraction process itself: any new string added to the source catalog should trigger, at minimum, a pseudo-locale check on the screen that introduced it, so coverage grows automatically with the product surface area instead of lagging behind it.

Visual regression testing scoped to layout-sensitive components, not full-page screenshots. Full-page pixel-diffing across every locale for every release is expensive to maintain and generates enough false positives (a shifted ad banner, a changed date that legitimately differs day to day) that teams often abandon it within a few months. A more durable approach scopes automated visual regression to specific layout-sensitive components — navigation bars, buttons with dynamic text, form labels, data tables with numeric columns — where text-length and formatting sensitivity is highest, and treats those as the automated gate, while full-screen locale review remains a periodic manual or native-reviewer activity rather than a per-build automated check.

A living defect taxonomy. Every localization bug found — whether through pseudolocalization, native review, or a support ticket — should be tagged by category (text overflow, date/number formatting, pluralization, RTL mirroring, translation staleness, contextual mistranslation) rather than filed as a generic bug. Over six to twelve months, this taxonomy reveals which category is actually driving the most defects in your specific codebase, which is rarely evenly distributed — some products have almost no date/number problems but chronic truncation issues because of a particular design system's fixed-width components, while others have the opposite pattern. This data should directly inform where the next round of internationalization engineering investment goes, rather than spreading effort evenly across all categories described in this article regardless of which ones are actually costing you defects.

Who Actually Owns This Inside the Organization

Localization quality fails organizationally almost as often as it fails technically, because it sits at the intersection of four functions that each reasonably believe another function has it covered.

Product management commissions the market expansion and often treats "translation is ordered" as the completion criterion, because translation is the visible, billable, trackable line item — a purchase order for a localization vendor is legible in a way that "did anyone test the rendered product" is not.

Engineering owns internationalization — the code-level capability to support other languages — but internationalization work is frequently treated as a one-time technical debt cleanup ("we internationalized the app in Q2 last year") rather than an ongoing quality property that new code can silently regress, the same way security or accessibility can regress if it isn't continuously verified.

The localization vendor or in-house linguist owns translation accuracy and is, correctly, not responsible for how the translated string renders in a UI they typically never see running live — most translation workflows hand translators a spreadsheet or a translation-management-tool interface, not a live, interactive build of the product.

QA owns functional correctness but, absent an explicit mandate, tests in the source language by default, because that is where the test cases, the test data, and usually the testers' own language fluency live.

The practical fix is not to invent a fifth function; it is to make internationalization testing an explicit, named line item within the QA function's existing mandate, with a clear owner — even if that owner is a fraction of one engineer's time, dedicated specifically to locale regression rather than assumed to be covered by general QA activity — and to require a locale sign-off (even a lightweight, pseudo-locale-based one) as a formal release gate for any market where the company has committed revenue or regulatory exposure. Without a named owner and a gate, localization testing reliably loses every prioritization conversation to features and to English-language bug fixes, because its cost is diffuse and its absence is invisible until a specific, embarrassing incident makes it visible.

What Localization Debt Actually Costs

Localization debt — the accumulated gap between what a product's international markets need and what has actually been tested and fixed — is easy to underinvest in because its costs are indirect, delayed, and hard to attribute, compared to the very direct, immediate cost of a translation invoice.

Churn attribution difficulty. A user who abandons a signup flow because a date picker confused them, or who churns because an invoice looked wrong even though it was arithmetically correct, does not file a bug report explaining why. They simply leave, and the resulting churn gets attributed to generic causes — product-market fit, pricing, competition — because the specific, fixable, localization-shaped cause is invisible in standard funnel and retention analytics unless someone specifically segments by locale and looks for anomalies relative to comparable cohorts.

Support cost concentration. Localization defects generate a disproportionate volume of support contacts relative to their apparent severity, because the customer experiencing a confusing date or an overlapping button correctly perceives it as a bug, but support agents — often without the language skills or locale awareness to diagnose the root cause quickly — frequently misclassify these tickets, extending resolution time and, in cases involving billing confusion, sometimes escalating to refund requests that would not have occurred if the underlying formatting had been correct.

Trust cost in regulated or high-consideration purchases. For financial, healthcare-adjacent, legal, or other high-consideration B2B products, a visibly broken or oddly formatted translated screen does more reputational damage than the same defect would in a low-consideration consumer product, because international enterprise buyers explicitly evaluate whether a vendor can be trusted to operate correctly in their market as part of the procurement decision — a localization defect surfaced during a trial or proof-of-concept can read as evidence the vendor is not seriously invested in that market, independent of the product's actual functional quality.

Rework cost concentration at the worst possible time. Internationalization defects caught late — during or after translation, rather than before — are dramatically more expensive to fix than the same defect caught pre-translation, both because the code fix itself may now require re-translation of affected strings (particularly for pluralization and concatenation fixes, which often require restructuring the string itself, not just the surrounding code) and because late-stage fixes compete directly with a fixed launch date, creating pressure to ship the defect rather than delay the market entry.

None of these costs show up as a single line item that a finance team can point to and say "this is what localization debt cost us this quarter." That invisibility is precisely why localization debt persists in organizations that would never tolerate an equivalent, equally invisible level of debt in security or reliability — the cost is real and recurring, but nothing in standard reporting surfaces it as a named category, so it competes poorly against costs that do have a name.

Startups, Scale-Ups, and Enterprises: Different Failure Modes

Early-stage startups entering a second market typically have the smallest surface area to test and the least organizational capacity to build dedicated locale QA infrastructure. The realistic, proportionate move at this stage is Level 1 or Level 2 of the maturity model above: a disciplined manual review before each release plus, if engineering capacity allows, a basic pseudo-locale build. The highest-leverage single investment at this stage is fixing string concatenation and hard-coded pluralization logic early, because retrofitting these patterns later, once dozens of features depend on them, is substantially more expensive than building correctly from the start — this is one of the few areas of technical debt where the "fix it later" option gets meaningfully more expensive over time rather than staying roughly flat.

Scale-up companies with multiple active international markets and growing international revenue are the segment most likely to be significantly underinvesting relative to their actual exposure, because they have outgrown the informal, one-person-spot-checks-it model but have not yet built the dedicated ownership and tooling that enterprise-scale localization requires. This is also the segment where the ROI case for investment is clearest and most demonstrable, because there is usually enough international revenue and enough historical churn and support data to build a real, defensible cost model for localization debt, rather than relying on a hypothetical argument.

Enterprise SaaS companies, particularly those selling into regulated industries or into markets with specific consumer-protection or language-access requirements (several jurisdictions have legal requirements around providing certain disclosures, terms, or accessibility features in the local language), face the highest stakes and generally have — or should have — reached Level 3 or Level 4 of the maturity model. For this segment, localization QA gaps are not just a product-quality or churn issue; they can be a contractual or regulatory compliance issue, particularly for consent language, terms of service, accessibility disclosures, and any consumer-facing financial disclosure that the enterprise buyer's own legal or compliance team may review as part of a vendor assessment.

When Full Localization Testing Is Overkill

Not every product needs Level 3 or Level 4 maturity, and building it prematurely is a real cost, not a safety margin. A few honest exceptions are worth naming, because a project instructed to always argue for more testing rigor tends to lose credibility with the audience it's trying to persuade.

A product with a genuinely small, well-understood set of target markets that share close linguistic and formatting conventions — for example, a company serving only English-speaking markets (US, UK, Canada, Australia) with minor date-format differences — has a much smaller blast radius than a company translating into a dozen languages across multiple scripts and directions, and can reasonably operate at Level 1 with careful attention to the specific format differences that do exist (date order, in this example) rather than building the full apparatus described in this article.

An early-stage product still searching for product-market fit, with international expansion driven by opportunistic inbound demand rather than a deliberate go-to-market strategy, should generally not invest in Level 3+ infrastructure, because the product itself, its core workflows, and its target customer profile are all still likely to change substantially — building durable locale regression tooling against a product surface that may be significantly different in six months is premature optimization, and the money and engineering time are better spent elsewhere until the international thesis is validated.

A product whose international users are internal, low-volume, or non-revenue-generating (for example, a small pilot with a handful of users in a new market before a committed launch) can reasonably defer investment until the pilot converts into a committed, revenue-bearing market entry, using that pilot period specifically to gather the churn, support, and usage data that will make the later investment case concrete rather than hypothetical.

The judgment call in all three cases is the same: match the investment to actual and near-term committed exposure, not to a generic standard of thoroughness, and revisit the decision explicitly — on a schedule, not just when something breaks — as international revenue and market count grow.

The Localization Surface Beyond the UI: Notifications, Emails, and Support Content

Most localization QA effort, understandably, concentrates on the in-app interface, because it's the surface a QA team can click through directly. This concentration leaves a set of equally customer-visible surfaces almost entirely untested in most organizations, precisely because reaching them requires triggering a real event rather than navigating a screen.

Transactional emails — password resets, invoice receipts, shipping confirmations, subscription renewal notices — are frequently generated from a separate templating system than the main application UI, sometimes maintained by a different team (marketing operations, a CRM platform, a billing system's own notification layer) with its own, often less mature, translation workflow. It is a common and specific failure pattern for a product's core UI to be fully and carefully localized while its transactional emails silently ship in English to every customer regardless of their locale setting, because the email templating system was never included in the same internationalization audit as the application code. The customer experience this produces is jarring in a specific way: a customer who has configured their account for German, and who sees a fully German interface, receives an English-language invoice email — a mismatch that reads as more careless than a fully English product would, because it demonstrates the localization was applied unevenly rather than not at all.

Push notifications carry an additional constraint that email and in-app text do not: severe length limits, often around 40-50 characters for a title on some platforms before truncation, which makes the text-expansion problem described earlier in this article considerably more acute — a notification title that fits comfortably in English can genuinely have no non-truncated translation in a language with 30% average expansion, forcing either a shorter, less specific translated message or an accepted truncation, and this trade-off should be a deliberate content decision, tested and reviewed per locale, rather than whatever the notification happens to render as by default.

Support and help-center content — knowledge base articles, in-app tooltips linking to help documentation, chatbot or support-ticket auto-responses — is frequently the last content type to receive translation investment, if it receives any at all, because it is high in volume and lower in perceived urgency than product UI strings. The result for a customer in a non-English market is a product interface that looks fully localized right up until the moment they need help, at which point they are redirected to English-only documentation — an experience that undermines confidence in the product precisely at the moment the customer is already frustrated or confused, which is the worst possible moment for that gap to appear.

What to test, specifically: confirm that transactional email and notification templates are included in the same internationalization audit and translation pipeline as the main application, rather than treated as a separate, lower-priority system; test push notification titles and bodies at their real character limits in the target language, not just in English, to catch cases where the message needs an entirely different, shorter phrasing rather than a direct translation; and, at minimum, audit which support and help-center content categories are translated versus English-only, and make that gap a visible, deliberate scoping decision communicated to support teams, rather than an undocumented condition that support agents discover reactively when a non-English-speaking customer asks for help in a language the documentation doesn't cover.

Mobile-Specific Localization Considerations

Mobile applications introduce several localization concerns that have no direct equivalent in web products, and a testing plan built primarily around a web application's localization needs will systematically miss them.

App store metadata is a separate localization surface from the app itself. The app name, description, screenshots, and keywords shown in an app store listing are configured and translated independently of the in-app strings, using entirely separate tooling (the app store platform's own localization interface) from whatever translation management system feeds the application build. It is entirely possible, and not uncommon, for an app's store listing to be professionally translated and its actual in-app experience to lag behind, or vice versa — a mismatch that a customer discovers immediately upon opening the app for the first time, which is a particularly costly place for a localization gap to surface, since it directly undermines the download decision the store listing was designed to drive.

On-device keyboard and input method behavior varies by locale in ways that affect form testing. Testing a form only with a source-language virtual keyboard misses input method editor (IME) behavior relevant to Japanese, Korean, and Chinese text entry, where a user types phonetic input that gets converted into the target script through a multi-step process the keyboard manages — a text field that doesn't handle IME composition events correctly can behave in ways that are invisible when tested only with direct Latin-alphabet input, such as submitting a form prematurely on a keystroke that was actually part of an in-progress IME composition rather than a completed character.

Screenshots used in onboarding and marketing screens embedded in the app binary are a common source of hard-coded, untranslated content. Onboarding carousels and empty-state illustrations frequently contain baked-in text inside an image asset rather than an overlaid, translatable string layer, because it's simpler for a designer to produce one polished image than to coordinate a design system that separates text from illustration. This is internationalization debt in visual form, and it is easy to miss in a code-level audit because grep-based searches for hard-coded strings won't find text embedded inside an image file — it requires a visual walk-through specifically looking for baked-in text in illustrations and onboarding assets.

Device and OS-level locale settings can diverge from the app's own language setting, particularly on shared or family devices, or when a user has deliberately set their device to a different language than their preferred app language for reasons unrelated to the product (for example, a bilingual professional using an English-language device OS but preferring the app itself in their first language). A mobile app that derives formatting decisions from the device locale while deriving translated strings from an in-app language preference can produce internally inconsistent output — French UI text alongside US-formatted dates — that neither setting alone would predict, and that is specifically worth testing as a deliberate mismatch scenario rather than assuming the two settings always agree.

What to test, specifically: verify app store listing translations against the actual in-app experience for each supported market before a release, treating a mismatch between the two as a release-blocking defect rather than a cosmetic inconsistency; include IME-based text entry in form and search testing for any market where Japanese, Korean, or Chinese input is expected, using an actual IME rather than pasted text, which bypasses the composition behavior entirely; audit onboarding and empty-state visual assets specifically for baked-in text that a string-catalog audit would miss; and explicitly test the case where device-level locale and in-app language preference disagree, since this combination is common in practice and rarely represented in a team's default test accounts.

A Practical Sequence for Testing a New Market Launch

For a team about to enter a genuinely new market for the first time, the following sequence reflects the dependency order described throughout this article — each step depends on the one before it, and skipping ahead (for example, sending strings to translation before internationalization testing is complete) is the single most common cause of expensive late-stage rework.

  1. Internationalization audit. Before any translation work begins, audit the codebase for hard-coded strings, string concatenation patterns, non-CLDR pluralization logic, and locale-naive date/number formatting. Fix what is feasible before proceeding; document what is deferred, and treat deferred items as known, tracked risk rather than silent gaps.
  2. Pseudolocalization pass. Run the product through a pseudo-locale build and walk through every primary user flow — signup, core feature usage, billing, account settings — looking specifically for overflow, truncation, hard-coded strings that didn't get pseudo-translated, and layout breakage.
  3. Fix structural defects found in step 2. This step should complete before translation begins, because fixing layout and concatenation issues after translation frequently requires re-translating affected strings.
  4. Commission translation with context. Provide the translation vendor or linguist with screenshots, in-context previews, and notes on variable substitution and pluralization requirements, not just a flat string list.
  5. Real-translation regression pass. Once translations are integrated, run a full regression pass using the actual translated content, checking date, number, currency, and pluralization behavior with locale-specific test data, and checking for encoding corruption and truncation that the pseudo-locale pass could not detect.
  6. Native-speaker or in-market review. Have a native speaker — ideally someone with product or business context, not just linguistic fluency — review the live or staging build for cultural fit, tone, and contextual accuracy, focusing especially on high-visibility surfaces: onboarding, pricing, billing, and legal/consent screens.
  7. Establish ongoing monitoring before launch, not after. Set up the translation-staleness check and locale-tagged defect tracking described earlier in this article before the market goes live, so that the first new feature shipped after launch is covered by the same process rather than reopening the gap immediately.
  8. Post-launch cohort analysis. Once the market has live users, explicitly segment retention, support ticket volume, and conversion funnels by locale for at least the first two full billing cycles, specifically looking for anomalies relative to comparable existing markets — this is the step most commonly skipped, and it is the step that actually confirms whether the testing investment worked.

Questions Executives Should Ask Before Signing Off on a Launch

A small set of direct questions, asked in a launch readiness review, tends to surface the gap between "we localized it" and "we tested it" faster than a general status update will:

Has anyone on the team actually used the product end-to-end in the target language, on both desktop and mobile, or has verification been limited to reviewing a spreadsheet of translated strings? Have we tested with pseudo-localized or real translated content specifically at the numeric boundaries where pluralization rules change (not just "1" and "many")? What happens today if a translation is missing or stale for a string added after the last translation sync — does it silently fall back to English, and would anyone notice? Who owns locale quality as an ongoing responsibility after launch, as opposed to who commissioned the initial translation? What is our plan for detecting a localization-driven churn or support pattern in the first two billing cycles, and who is accountable for reviewing that data specifically, rather than assuming it will surface through general metrics review?

None of these questions requires deep technical expertise to ask, and the value of asking them in a formal readiness review is precisely that they force an explicit answer instead of an assumed one.

FAQ

Is pseudolocalization a replacement for testing with real translations? No. Pseudolocalization catches structural internationalization defects — overflow, truncation, hard-coded strings, basic bidirectional layout issues — cheaply and early, before real translations exist. It cannot catch translation accuracy, tone, cultural fit, or encoding corruption introduced by the translation pipeline itself, all of which require testing with actual translated content.

How much does localization testing typically cost relative to translation itself? This varies too much by product complexity and market count to state a reliable industry-wide figure, and any specific percentage claimed without a cited source should be treated skeptically. The more useful framing is that internationalization defects caught before translation are consistently cheaper to fix than the same defects caught after translation or after launch, because late fixes often require re-translation in addition to the code change, and because late fixes compete with a fixed launch date.

Do we need native speakers on staff to do localization QA properly? Not for every level of the maturity model described in this article. Levels 1 and 2 (manual spot-checks and pseudolocalization) can be done effectively by non-native speakers or through automation, since they target structural rather than linguistic defects. Levels 3 and 4 do benefit significantly from native-speaker involvement, but this can be a contracted reviewer, an in-market employee whose primary role is elsewhere, or a structured beta-user program, rather than a dedicated in-house hire for every supported language.

Should we internationalize the product before we have committed to any specific international market? Generally yes, for the core engineering practices — externalized strings, CLDR-aware pluralization, locale-aware date and number formatting — because these are substantially cheaper to build in from the start than to retrofit, and they carry near-zero cost if international expansion never happens. Full localization investment (translation, native review, dedicated regression suites) should wait for a committed market decision, as described in the maturity model above.

What's the single highest-leverage fix for a team just starting this work? Eliminating string concatenation that builds sentences from fragments and variables, replacing it with a message-formatting approach that lets the entire sentence — including word order and pluralization — be translated as a unit. This single pattern is responsible for a large share of the "grammatically broken translation" defects that are hardest and most expensive to fix retroactively, because fixing it after the fact usually means re-architecting the string and re-translating it, rather than adjusting a single formatting function.

How does this relate to accessibility testing? The two disciplines overlap more than teams expect, because both require the product to correctly handle non-default rendering conditions — a screen reader announcing content in a different order than it visually appears is structurally similar to a right-to-left layout rendering in the wrong visual order, and both are caught by the same underlying discipline of testing semantic structure rather than assuming a single, default rendering path is the only one that matters.

Conclusion: Fluency Is Not the Bar

The uncomfortable truth underneath this entire article is that a fluent, accurate translation is the easiest part of entering a new market, and it is the part every company already budgets for, because it is visible, billable, and easy to explain to a board. The harder, less visible part — verifying that the product built and tested exclusively in English behaves correctly once it stops being exclusively English — is where the actual risk concentrates, precisely because it is easy to mistake "translated" for "tested."

The distinction to hold onto is simple: translation makes the words correct. It does nothing for the container the words sit in, the numbers they're calculated around, or the grammar the code assumes when it builds a sentence at runtime. Those are engineering questions, not linguistic ones, and they need engineering-owned testing — proportionate to your company's actual international exposure, not maximal by default — to catch before a customer in Munich, Riyadh, or Tokyo becomes the first person to notice.

The next time an international launch is on the roadmap, the question worth asking in the readiness review is not "is the translation ready." It's "has anyone actually used this, end to end, in that language, on a real device, looking for the twelve categories of defect that translation alone will never catch."

QAtronic helps engineering and product teams build locale testing into the release process itself — from internationalization audits and pseudolocalization pipelines to full locale regression suites — so that international launches are tested with the same rigor as any other release, rather than treated as a translation-and-hope exercise. If an international expansion is on your roadmap and you're not confident in the answer to "has anyone actually tested this," that's a conversation worth having before the launch date is set, not after the first support tickets arrive.

Recent posts

September 4, 2026
Saga Compensation Testing: The Rollback No One Checks
September 4, 2026
Post-Acquisition Technical Integration: The First 100 Days
September 4, 2026
Why Coding Interviews Don't Predict Software Quality