i18n
In short: Abbreviation for “internationalization” (18 letters between i and n) — preparing software to work in several languages and regions.
In more detail: i18n covers, for example, moving text out into translation files, formatting date/number/currency according to locale, and accounting for text direction (LTR/RTL). The actual translation into a specific language, by contrast, is called “localization” (l10n). At Emzett, i18n is implemented via next-intl.
In Depth
These numeronyms all follow the same pattern: the first and last letter plus the number of letters in between. Besides i18n (internationalization) and l10n (localization), there’s also, for example, a11y (accessibility) or k8s (Kubernetes) — a convention from the 1970s, originally used to note long words in a space-saving way on punch cards/terminals.
Typical i18n work steps in an application:
- Text extraction: all text hardcoded in the code is moved out into separate translation files (e.g.
de.json,en.json), instead of being hardcoded in the source code. - Locale detection: the application determines which language/region the user prefers — via browser headers, a URL prefix (
/de/...,/en/...), or a stored user setting. - Formatting: numbers, dates, and currencies are displayed differently depending on locale (e.g.
1.234,56 €in Germany vs.$1,234.56in the US) — dedicated APIs likeIntl.NumberFormatexist for this, instead of programming it yourself. - Plural rules: different languages have different plural forms (German: singular/plural; some languages like Polish have more forms) — i18n libraries handle this via special pluralisation syntax, instead of simple string concatenation.
At Emzett, the URL structure itself now runs entirely in English (e.g. /shop, /help instead of German equivalents), but the visible text remains controllable in multiple languages via next-intl.
See also: next-intl