Quality & Team

Internationalization & Localization

Intermediate

We serve customers across many countries, languages, and locales. The product cannot assume everyone speaks English, lives in one timezone, or uses one currency and date format. Internationalization (i18n) is building the product so it can adapt. Localization (l10n) is the actual translations and regional formats. Designing for this from the start is far cheaper than adding it later.

Common beginner assumptions cause problems later: that text is English and fits a fixed space, that dates are "obviously" dd/mm or mm/dd, that names have a first and last name, that everyone uses the same number and currency format, and that a string is just a string. None of these hold across locales. i18n means moving text out into resources, handling Unicode properly, and formatting dates, numbers, and currency by locale.

For us this also affects correctness and compliance. Timezones and date formats matter for audit and transactions (store UTC, display local). Currency must be explicit (see Money & Currency). And names and addresses vary far more than a Western format assumes.

Build to adapt

Hard-coded, assumed format var msg = "Payment of £" + amount + " on " + date.ToString("dd/MM/yyyy");

Hard-coded English and £, an assumed date format, and a string that cannot be translated. Wrong for a euro customer, confusing for a US date reader, and untranslatable.

Localised, explicit var msg = string.Format(L["PaymentOn"], // translatable, placeholdered
money.Format(culture), // amount + currency, locale-aware
date.ToLocal(tz).ToString("d", culture));

Text comes from resources, currency and date format follow the user's locale, and the timestamp is converted from UTC for display.

Avoid locale assumptions

Self-review checklist

Why it matters: Locale assumptions built into code are painful and expensive to remove later, and they cause real bugs: wrong dates on transactions, broken layouts, mangled names, and currency confusion. These erode trust with international customers. Building i18n-ready from the start keeps the product correct and welcoming in every market we enter.