React-i18next logo

React-i18next

The standard internationalization framework for React based on the mature i18next ecosystem.

npm install react-i18next
9.8K6.5M/weekv16.3.5854.21 KBMIT2 issues
Last updated: 2025-11-20
Star history chart for i18next/react-i18next

TL;DR

A powerful internationalization framework based on i18next, offering a complete solution for translating web and mobile applications.

Supports advanced translation management features like lazy-loading namespaces, plurals, context, and hydration-safe server-side rendering.

Why React-i18next?

React-i18next is a binding for i18next, a core JavaScript library that has been the gold standard for internationalization since 2011. Unlike simple key-value storages, it provides a complete runtime environment for managing language state.

  • Component-Level Splitting: It supports dividing translations into multiple files ("namespaces"), allowing you to load only the translations needed for the current view (lazy loading).
  • Beyond Text: It handles complex linguistic features out of the box, including pluralization (which varies by language), context (e.g., gender), and interpolation.
  • SSR & SSG Ready: It has first-class support for Server-Side Rendering, ensuring that your content is fully translated before it reaches the client, which is critical for SEO.
  • Safety: It automatically escapes values to prevent XSS attacks, allowing you to safely interpolate user input into translations.
  • Framework Agnostic Core: Your translation logic lives in pure JavaScript (i18next), meaning you can share logic between React Web, React Native, and Node.js backends.

Code Snippet

A standard setup using the useTranslation hook to switch languages and interpolate data.

import React from 'react';
import { useTranslation } from 'react-i18next';

// 1. Component using the hook
export function WelcomeHeader() {
  const { t, i18n } = useTranslation();

  return (
    <header>
      {/* 2. Interpolation with data */}
      <h1>{t('welcome_message', { name: 'Alex' })}</h1>
      
      {/* 3. Pluralization support */}
      <p>{t('new_messages', { count: 5 })}</p>

      {/* 4. Language Switcher */}
      <button onClick={() => i18n.changeLanguage('fr')}>
        Français
      </button>
    </header>
  );
}

// Translation resources (usually loaded from JSON files)
// {
//   "en": {
//     "welcome_message": "Welcome back, {{name}}!",
//     "new_messages": "You have one new message.",
//     "new_messages_other": "You have {{count}} new messages."
//   },
//   "fr": { ... }
// }

The t function is highly versatile. It automatically handles the "other" key for pluralization based on the count and the target language's plural rules.

Pros and Cons

No library is perfect; understanding the trade-offs is key to selecting the right tool.

Pros

  • Maturity: It handles edge cases you haven't even thought of yet (e.g., languages with 6 plural forms, nesting translations inside other translations).
  • Ecosystem: It connects with almost every Translation Management System (TMS) (Locize, Phrase, etc.) and has plugins for language detection and backend loading.
  • Flexibility: While the Hook is standard, it also supports Higher-Order Components (HOC) and Render Props for legacy class components.

Cons

  • Bundle Size: It is heavier than "micro" libraries because it ships a full i18n runtime engine.
  • Configuration: Setting up specific behaviors (detection order, fallback languages, caching, suspense) requires reading through extensive documentation.
  • Runtime Overhead: Because it resolves strings at runtime, there is a microscopic performance cost compared to compile-time solutions, though rarely noticeable.

Comparison with Other I18n Libraries

The table below outlines the positioning differences between React-i18next and other popular I18n libraries to help you make an informed decision:

LibraryDesign PhilosophyBest ForPain Points
React-i18nextRuntime Robustness
A full feature set handling every linguistic nuance at runtime.
Enterprise / SaaS
Large apps needing dynamic loading, TMS integration, and complex formatting.
Setup Boilerplate
Requires an initialization file (i18n.js) and provider setup.
React Intl (FormatJS)Standards Based
Built on standard browser APIs (Intl). Uses HoCs and Components mostly.
Standards Purists
Teams who prefer using ICU message syntax standards.
DX Friction
Defining messages often requires more boilerplate; extracting strings is a separate build step.
Paraglide JSCompile-Time
Compiles translations to tree-shakeable functions. Zero runtime overhead.
Performance Critical
Apps where bundle size and startup speed are the absolute priority.
Newer Ecosystem
Less mature tooling and 3rd party integrations compared to the i18next giant.

Ecosystem & Extensions

The power of react-i18next lies in its plugin system:

  • i18next-http-backend: A plugin to load translations from a server or CDN (lazily) instead of bundling them in your JS code.
  • i18next-browser-languagedetector: Automatically detects user language from the browser, query strings, cookies, or local storage.
  • i18next-resources-to-backend: A utility often used in Next.js to dynamically import translation files on the server side.