Localization in Product Apps
- Jiyu Yan
- Engineering
- 20 Mar, 2026
Localization is not only replacing English strings with another language.
In a product app, language touches workflow. It changes labels, validation messages, dates, empty states, permissions copy, documentation, support notes, and sometimes the shape of a form. If those details are scattered, localization becomes risky and expensive.
The first boundary is text ownership. A component should not hide important product language in random inline strings if that text needs translation later.
const messages = {
importStarted: "Import started.",
importFailed: "Import failed. Check the error file and try again.",
};
This tiny example is not a full i18n system. It just shows the habit: product messages are data the app should be able to find, review, and replace.
Validation messages deserve special care. A generic error like “Invalid input” may be technically true, but it does not help the user fix the problem. A translated bad error is still a bad error.
Dates and numbers are another place where localization becomes product behavior. A status page should not make users guess whether 05/06/2026 means May 6 or June 5. Formatting should match the user’s locale, for example through Intl.DateTimeFormat, or the product should use an unambiguous format.
There is also a routing decision. Some apps need localized URLs. Some only need localized content behind the same route. That choice affects SEO, bookmarks, support links, analytics, and caching. I would not add multilingual routing unless the product actually needs it.
The trade-off is maintenance. A localization system adds files, keys, review steps, and testing needs. It can also make simple copy changes slower. That is why I prefer adding structure around the areas that matter first: validation, navigation, empty states, and high-risk workflows.
I also try to keep message keys close to the product concept, not the current English sentence.
Weak key: submitButtonText
Better key: request.submit.action
The better key describes the role of the message. The English copy can change without making the key meaningless.
I would start localization early if the product clearly needs multiple languages. I would wait if the product is still exploring basic workflow shape. Premature localization can make rough product changes slower.
The practical goal is simple: users should understand what happened, what they can do next, and what went wrong. Localization is part of that promise.