Internationalization (i18n)
draftedconfidence: mediumthis tier holds 50% on the public scorecard (3/19 graded · 0 overturned) →
recommendation
Next.js app → next-intl. Otherwise i18next (web + RN, huge ecosystem) or Lingui (compile-time, low boilerplate).
- bundle-size-sensitive → next-intl / Lingui (AOT-compiled messages)
- need maximum plugin ecosystem / RN + web parity → i18next
Options & tradeoffs
| option | tradeoff | evidence |
|---|---|---|
| next-intl (4.x) | Next.js-first; v4.8 compiles ICU messages AOT to shrink bundles | 4.3M/wk |
| FormatJS / react-intl | ICU message format; mature, framework-agnostic | 3.6M/wk · ships in 4/34 |
| Lingui (6.x) | compile-time message extraction; low-boilerplate; i18n directives | ships in 3/34 |
| i18next / react-i18next | very popular, big plugin ecosystem; works web + RN | 11.1M/wk · ships in 8/34 |
| fbtee | modern continuation of Meta's deprecated fbt |
npm weekly downloads (from the corpus's last signals run): next-intl 4.3M · react-i18next 11.1M · i18next 15.7M · react-intl 3.6M
Canonical reading
Editorial annotations on why each piece matters — the articles themselves are the originals; read them there.
Why and how ICU messages are precompiled at build time into minified ASTs evaluated by a ~650-byte runtime, weighing function-based vs AST strategies against bundle size. Teaches the compile-time-vs-runtime and bundle-size tradeoffs from first principles.
The canonical, example-driven explanation of the ICU message format — interpolation, plurals/selectordinal, select, number/date skeletons, rich text. ICU is a stable Unicode standard, so this foundational reference doesn't go stale.
Sources
Related in ui: styling · component-libs · animation · lists · a11y · charts · editors · svg · maps · calendars · polish