Home/Blog/Why Layout Overflow Bugs Are the Silent Killer of International Releases
Strategy

Why Layout Overflow Bugs Are the Silent Killer of International Releases

Your French customer opens your app on an iPhone. The primary CTA button says "Commencer maintenant". The button width was designed for "Get started". The French text overflows onto two lines, breaks the card layout, and pushes the checkout link below the fold.

Your conversion rate in France drops 8 percent. Nobody knows why for three weeks. The problem was not translation. The problem was rendering.

What actually breaks when localized text overflows its container?

Overflow is not one bug. It is a family of bugs, each with a different impact.

  • Button and CTA overflow. The most visible failure. German expands English by 25 to 35 percent, so a button designed for "Save" (Save is 4 characters) has to fit "Speichern" (9 characters). Text wraps to two lines, breaks vertical rhythm, or worse, gets cut off with an ellipsis at "Speich...".
  • Modal title overflow. Titles designed to be single-line in English become multi-line in expanded languages. The header pushes down the body, which pushes down the CTA, which now sits below the fold on mobile.
  • Navigation overflow. Nav items designed to fit horizontally in English wrap in German, breaking the header layout entirely.
  • Form label overflow. Field labels that fit inline in English require line breaks in French. Field alignment breaks.
  • Table column overflow. Column headers that fit in English wrap in German, and either the column widens (breaking the table layout) or the header wraps (breaking the row height).

Each of these is a small defect on its own. Together, they create the "translated" feel of a product that has been localized textually but not visually.

Why do these bugs slip past normal QA?

Because normal QA does not see the app in the failing locale, at the failing viewport, on the failing content combination.

The typical reviewer workflow is a UI that shows source string, target string, and maybe a screenshot of one context. The reviewer reads "Speichern" next to "Save", confirms it is a correct translation, and moves on. They do not see the button. They do not see the button at 320px width. They do not see the button when the label above it also happens to be long, compounding the layout pressure.

Standard manual QA visits the localized app but usually on desktop, usually with typical content, usually not stress-testing every viewport. Overflow bugs hide in the intersection of specific locale, specific viewport, and specific content. That intersection is combinatorially large. Humans cannot cover it manually.

What is pseudo-locale and how does it help?

Pseudo-locale is a fake locale that transforms English strings to simulate the properties of real localization. A pseudo-localized "Save" might render as [!!! Şåvé ééé !!!]. The transformation applies three rules:

  • Character padding. Add 30 to 40 percent length to approximate German expansion.
  • Accented characters. Replace ASCII letters with accented equivalents to catch encoding and font issues.
  • Bracketing. Wrap the string in [! !] markers to make missing translations visible instantly.

Pseudo-locale is free. You enable it as a build target, run your app in it during development, and instantly see every string that would break under real localization. Overflow shows up. Missing keys show up (they display in English). Encoding issues show up. RTL support gets a related pseudo-locale that reverses direction.

The rule is: no engineer should merge UI code without opening the app in pseudo-locale at 320px first. That single practice eliminates 40 to 60 percent of overflow bugs before translation ever happens.

How do you test layout in locales you do not read?

Visual regression tests. Screenshot the rendered app in every enabled locale at every target viewport, compare against a known-good baseline, fail the build on unexpected differences.

The workflow:

  1. Establish baselines. Render every screen in every locale at every viewport. Have a native speaker verify each baseline once. Save.
  2. On every PR, re-render the changed screens in every locale and viewport. Diff against the baseline.
  3. Any pixel difference above a threshold (usually 0.1 to 0.5 percent) fails the check.
  4. Engineer reviews the diff. Accepts the new baseline (if intentional) or fixes the layout (if not).

The baseline verification is the one-time cost. After that, the tests catch overflow, wrapping, alignment issues, and font rendering problems across every locale without a human reading the strings. You do not need to speak French to see that a button now wraps.

What viewport widths and content variations should you test?

Cover the failure modes explicitly, not exhaustively. The right test matrix:

Viewport Reason
320px Smallest common mobile. Where most overflow surfaces
375px iPhone default. High traffic
768px Tablet portrait. Different breakpoints
1280px Desktop. Where designers designed

For content variation, include at least:

  • Short-value case (short user name, small number, minimal data)
  • Long-value case (long user name, large number, verbose data)
  • Empty state (no data yet)
  • Error state (validation errors visible)

You do not need every combination. You need enough to trigger the layout under both nominal and extreme content pressure.

How do you fix overflow at the CSS level?

Most overflow is preventable with the right layout patterns.

  • Fluid containers, not fixed widths. Buttons and cards should size to content up to a maximum, not fix at a specific pixel width.
  • Responsive font sizing. Use clamp() or media-query-driven sizing for headings that must fit on one line.
  • Explicit truncation for tabular data. Where fixed widths are unavoidable, truncate with ellipsis and expose the full string on hover or tap.
  • Grid layouts over floats. CSS Grid handles varying content lengths more gracefully than any float-based layout.
  • Test with the longest expected string. For fields with known-long localized versions (German verbs, Finnish compound nouns), design the layout for the long case.

Design systems that ship with localization in mind bake these patterns into their components. Retrofitting them after the fact is possible but painful.

What about right-to-left languages?

Arabic and Hebrew flip the entire layout. This is not overflow, it is direction. The failure modes are different:

  • CSS assuming left and right. Any margin-left, padding-right, or border-left that should mirror in RTL locales. Use margin-inline-start and padding-inline-end instead.
  • Icons with directional meaning. Arrows, chevrons, and progress indicators need to flip. Icons of physical objects (a coffee cup) do not.
  • Text alignment. RTL languages need text-align: start, not text-align: left.
  • Bidirectional text. Mixed LTR and RTL content (a URL inside an Arabic sentence) requires explicit dir handling to render correctly.

If you launch Arabic or Hebrew, budget a two-to-four week RTL sweep for your app's UI. Doing it locale-by-locale in production is much more expensive than a systematic pass.

The mistake to avoid

Most teams think localization defects are translation errors. They are not. Overflow, RTL, and rendering issues account for more visible defects in localized products than any translator mistake. The reason is that translators are trained to produce correct strings, and there are tools that check their work. Overflow is a rendering property that emerges from the intersection of language, viewport, and content, and it is invisible in every workflow that inspects strings in isolation. Ship pseudo-locale in development. Ship visual regression tests in CI. Fix the layout patterns that make overflow possible. Everything else is downstream of that discipline.

layout-overflowpseudo-localeresponsive-i18nui-testinglocalization-defects

Frequently asked questions

Which languages cause the most layout problems?

German consistently expands text by 25 to 35 percent, breaking button labels and navigation items. Finnish and Hungarian have similar expansion. Chinese and Japanese sometimes contract by 30 to 50 percent, which creates awkward empty space rather than overflow. Arabic and Hebrew reverse layout direction, breaking any CSS that assumes left-to-right. Thai does not use word spaces, breaking word-wrap logic. Every language has a specific failure mode, and treating them uniformly is why bugs ship.

What is pseudo-locale and why do we need it?

Pseudo-locale is a fake locale that transforms English strings by adding 30 to 40 percent character padding, replacing letters with accented equivalents, and optionally reversing text direction. Rendering the app in pseudo-locale during development surfaces overflow, missing translations, and RTL layout bugs before you spend money on real translation. It is a free QA layer that catches defects at build time, and it works even before you have a single non-English string translated.

How do we test layout for locales we cannot read?

You do not test the content. You test the rendering. Visual regression tests compare the rendered app screenshot per locale against a baseline. If a button label wraps to two lines in French but not in English, the test fails, regardless of whether the tester speaks French. Combined with pseudo-locale rendering during development, this catches 80 to 95 percent of overflow issues. The remaining 5 to 20 percent require a native speaker, but the volume is small enough to be tractable.

What viewport widths should we test at?

At minimum 320px (mobile), 768px (tablet), and 1280px (desktop). Overflow at 320px is where most defects surface because mobile has the tightest constraints. Add 375px if you have iPhone-heavy usage and 1024px for iPad. Do not test only at desktop resolutions. Mobile is where German button labels wrap to three lines and break your CTA.

Can flexible CSS eliminate the need for overflow testing?

It reduces the need, does not eliminate it. Fluid layouts and flexible containers handle most cases, but there are always edge cases: fixed-width buttons required by a design system, modal titles that must not wrap, tabular data with column headers that need to fit. For those cases you need explicit overflow handling (truncation, tooltips, responsive font sizing) and CI tests to verify it works. CSS is the first line of defense. Testing is the second.

Ship every language the day you ship English

Thalarum syncs strings from your repo, drafts translations with your glossary, routes review, and blocks broken releases in CI.

Request early access