Skip to content

i18next-compose

NPM Package Version

A lightweight library to manage translations with component interpolation and complex translation strings

Motivation

Translation is rarely just an engineering concern—it often involves multiple teams:

  • Developers implement the system.
  • Translators provide the content.
  • Designers ensure proper rendering.
  • Product Owners/Managers validate results.
  • Content Writers refine copy.

i18next-compose provides a modular and efficient way to keep everyone aligned, without enforcing global $t helpers.


Built with a generic core package and framework-specific renderers for Vue and React.

Why?

Translations often involve developers, translators, designers, and product owners.
This library keeps everyone aligned by making complex translations easier to manage.

Installation

bash
npm install i18next-compose
bash
yarn add i18next-compose
bash
pnpm add i18next-compose

Usage

There are different ways to use i18next-compose.

The best way is to create a context that will provide the i18next instance and the corresponding helper functions to your application.

js
import { composeI18nextContext } from 'i18next-compose';

const i18nParams = {
  namespace: 'my_namespace',
  fallbackLng: 'en',
  lng: 'en',
  supportedLanguages: ['en', 'fr', 'de'],
};
const context = await composeI18nextContext(i18nParams);
ts
import { composeI18nextContext } from 'i18next-compose';
import type { Createi18nConfigParams, I18nextContext } from 'i18next-compose';

const i18nParams: Createi18nConfigParams = {
  namespace: 'my_namespace',
  fallbackLng: 'en',
  lng: 'en',
  supportedLanguages: ['en', 'fr', 'de'],
};

// type will be inferred as I18nextContext but you can also explicitly type it
const context: I18nextContext = await composeI18nextContext(i18nParams);

Standalone initialization

  1. You can initialize the configuration in standalone mode:
js
import { i18nConfigInit } from 'i18next-compose';

const i18nParams = {
  namespace: 'my_namespace',
  fallbackLng: 'en',
  lng: 'en',
  supportedLanguages: ['en', 'fr', 'de'],
};

const i18App = await i18nConfigInit(i18nParams);

return i18App;
ts
import { i18nConfigInit } from 'i18next-compose';
import type { Createi18nConfigParams, I18nApp } from 'i18next-compose';

const i18nParams: Createi18nConfigParams = {
  namespace: 'my_namespace',
  fallbackLng: 'en',
  lng: 'en',
  supportedLanguages: ['en', 'fr', 'de'],
};

const i18App: I18nApp = await i18nConfigInit(i18nParams);

Behind the scenes, this will create a new i18next instance with the provided configuration. You can then use this instance to translate your content using the i18next helper functions.

TIP

i18next-compose doest not inject global variable such as $t or $i18next. It means to be used in a modular way.

  1. You can directly create a context that will:
  • Create the i18n instance (as in 1.)
  • Return the corresponding reactive helper functions (see features)

This context can then be used in different frameworks (Vue, React) as a provider.