What the words hide
A form expecting a first name and a last name will fail people whose names do not split that way. A date written as digits is read two different ways depending on where the reader lives.
None of this is a translation error, and all of it is visible to the visitor within seconds of arriving.
Text that grows and text that shrinks
Copy translated out of English usually gets longer, sometimes by a third. Interfaces built to fit the original break: buttons wrap, tables push sideways, headings collide with whatever sits beside them.
The cheap fix is to design for the longest language you plan to ship rather than the one you happened to write first.
Strings belong outside the code
If text lives inside the code, every language is a development task and every typo is a deployment. If it lives in files, translation becomes a content job and adding a market stops being an engineering project.
This one decision determines whether the second language costs a fraction of the first or the same again.
- Every visible string in a file, not in the source
- One key per phrase, not one per screen
- Plurals handled by the language, not by joining strings
- A record of what was translated, so the next update is a diff
The parts machines still get wrong
Machine translation is genuinely good at volume and genuinely bad at exactly the places that matter: the button people press, the error shown when something breaks, the legal line.
A sensible split is machine for bulk content and a person for anything a user will act on or be bound by.