EMZETT.
Login

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:

  1. 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.
  2. Locale detection: the application determines which language/region the user prefers — via browser headers, a URL prefix (/de/..., /en/...), or a stored user setting.
  3. Formatting: numbers, dates, and currencies are displayed differently depending on locale (e.g. 1.234,56 € in Germany vs. $1,234.56 in the US) — dedicated APIs like Intl.NumberFormat exist for this, instead of programming it yourself.
  4. 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