Why the second language is deceptively easy
Two languages can almost always be brute-forced. If the second language happens to be similar in length to the first, or the team is willing to accept a slightly awkward layout in one of the two, the cracks stay hidden. A hardcoded conditional or a duplicated set of pages gets the job done, and it genuinely looks like the multi-language problem has been solved.
The third language is where averaging-out stops working. Now there are three different text lengths, three different sets of layout quirks, and the shortcut that quietly depended on there only being two options breaks in a way that's hard to patch — it usually needs to be rebuilt properly rather than extended.
Hardcoded strings hiding outside the content layer
The obvious content — headings, paragraphs, button labels — usually gets translated first, because it's the first thing anyone thinks to check. What gets missed is text living inside components rather than content: form validation messages, empty-state text, alt text on images, aria-labels, toast notifications, date and number formatting.
None of these show up on a normal page review, because they only appear under specific conditions — an empty search result, a form error, a screen reader. They surface one at a time, over weeks, each one a small fire drill instead of being caught in a single structural pass.
Layout assumptions that don't survive translation
A button sized to fit "Contact Us" doesn't necessarily fit its equivalent in another language — some languages run 30–40% longer for the same meaning, and others use scripts with entirely different line-height and character-width behavior. A layout built and tested in one language often has these assumptions baked in silently: fixed-width buttons, single-line navigation items, headlines sized to a specific character count.
This tends to survive a second language by luck as much as design. A third makes the pattern of overflow, wrapping, and clipped text visible enough that it can't be dismissed as a one-off edge case anymore.
The assets nobody thought were language-specific
Screenshots with interface text baked into the image, downloadable PDFs, Open Graph preview images, sitemap entries, canonical URLs — these are easy to treat as fixed, one-time assets rather than something that needs a version per language. They usually aren't caught until someone notices the social share preview for the Armenian page is still showing English text, or a "how it works" screenshot doesn't match the language the rest of the page is in.
None of these are hard to fix individually. What's expensive is finding them all after the fact, one inconsistency report at a time, instead of accounting for them upfront.
What we build differently from the start
Every piece of user-facing text is externalized into structured translation files from the first language, even when only one language exists at launch — not as a future-proofing exercise, but because retrofitting this later means finding every hardcoded string scattered across the codebase after the fact, which is the expensive version of the same work.
Layouts are built to tolerate variable text length from day one — flexible containers instead of fixed widths, line-clamping instead of assuming single-line fit — so the third language doesn't surface layout bugs the first language happened to hide.
We explicitly decide, page by page, what should translate and what shouldn't. Not everything needs to: legal entity names, proper nouns, and certain technical terms often stay consistent across languages by design, and deciding that deliberately is different from it happening by accident because someone forgot to translate a string.
Key takeaways
- ›Two languages can be brute-forced in a way that hides structural problems a third language exposes.
- ›The strings that get missed usually live outside the obvious content layer — error messages, alt text, empty states — and surface one at a time instead of in a single review.
- ›Layouts built around one language's text length often don't survive a language that runs meaningfully longer or shorter.
- ›Deciding what should and shouldn't be translated, page by page, produces a more consistent result than translating by default and fixing exceptions after the fact.
