Software internationalization (internationalization of software, internationalization tool, localization vs translation): the engineering that makes a product localizable, and how i18n, l10n and translation differ

Software internationalization, i18n, is the engineering done once so that a product can be localized for any locale afterwards: every user-facing string moved out of the code into a keyed catalog, plurals and placeholders written so a translator can reorder and vary them, dates, numbers and currencies formatted by locale rather than by hand, text direction and fonts handled, and layouts that stretch when a language runs longer. The internationalization of software is the foundation; localization is each locale built on it; translation is one field of localization. This page sets out what the engineering covers, what an internationalization tool does, and how localization vs translation is settled for the team that owns the strings.

What internationalization covers

Strings in a catalog, not in code, so that a pseudo-locale build finds nothing that stays in English. Messages written in a format that carries plurals and placeholders as data the translator's tool can validate, ICU MessageFormat, gettext plural forms or Fluent. Locale-aware formatting for dates, numbers, currencies and units, drawn from the locale data rather than written per screen. Text direction and font fallback for scripts the source language does not use. And layouts that grow with the text. Each of those done once is a class of defect that never appears in any locale's build.

What an internationalization tool does

An internationalization tool finds the strings still in the code and moves them into the catalog, validates that placeholders and plurals are well formed in the source before they reach a translator, and runs the pseudo-locale build that proves the catalog is complete and the layouts stretch. The localization testing checklist on this site counts what that build finds, hardcoded strings as a catalog gap of their own, with no account, and the catalog those strings should be in is what Xlifflane Pro keeps.

Localization vs translation, settled

Translation is the rendering of a string in another language, and it is one field in the localization record. Localization is the whole of adapting the product for a locale, the plural forms, the formats, the layouts, the tests and the translation together. Internationalization is what makes localization possible without a rewrite. A team asking which of the three it needs usually needs all three in that order, and the one it has skipped is the one the next locale's build will find.

Questions people ask about software internationalization

Can a product be localized without being internationalized?

Only by rewriting it locale by locale, which is what internationalization exists to avoid. A product with strings in its code has to be changed in code for every locale; one with a catalog is changed in the catalog.

What is the difference between i18n and l10n?

i18n is internationalization, the engineering done once; l10n is localization, done for each locale. The numbers are the letters between the first and last of each word.

Which message format should a team internationalize with?

One its translators' tools validate: ICU MessageFormat, gettext plural forms or Fluent are the common choices, and each carries plurals and placeholders as data rather than as text the translator has to guess at.

Sources

Related answers

Start Xlifflane ProKeep the string catalog, not the spreadsheet of strings