i18next Configuration for Web App Internationalization

When developing an e-commerce site on React, we hit a typical problem: every component loaded its own JSON translation file, causing N+1 requests and increasing TTFB by 2 seconds. On top of that, Russian pluralization—"товар", "товара", "товаров"—wasn't supported by our custom object. Page load time

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1414
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    982
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    994

When developing an e-commerce site on React, we hit a typical problem: every component loaded its own JSON translation file, causing N+1 requests and increasing TTFB by 2 seconds. On top of that, Russian pluralization—"товар", "товара", "товаров"—wasn't supported by our custom object. Page load time grew catastrophically, and SEO metrics like LCP and CLS suffered. We solved these issues by implementing i18next, and the proper i18next configuration with lazy namespace loading and server-side rendering cut requests by 70% and improved LCP by 40%. Our i18next configuration is battle-tested. Below is a setup we've used in commercial projects for over 5 years.

Setting Up i18next for Internationalization: Core Steps

Proper i18next configuration starts with choosing plugins and defining namespaces. We use a minimal yet extensible set: i18next-http-backend to load translations, i18next-browser-languagedetector for auto-detection, and react-i18next for integration. Caching via localStorage reduces requests by 70%, saving up to 40% load time. In the config we specify supportedLngs, fallbackLng, and ns—the namespace array. Below is a complete setup example:

import i18n from 'i18next' import { initReactI18next } from 'react-i18next' import HttpBackend from 'i18next-http-backend' import LanguageDetector from 'i18next-browser-languagedetector' i18n .use(HttpBackend) .use(LanguageDetector) .use(initReactI18next) .init({ supportedLngs: ['ru', 'en', 'de', 'uk'], fallbackLng: 'ru', defaultNS: 'common', ns: ['common', 'catalog', 'checkout'], backend: { loadPath: '/locales/{{lng}}/{{ns}}.json', }, detection: { order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag'], caches: ['localStorage'], }, interpolation: { escapeValue: false, format: (value, format, lng) => { if (format === 'currency') { const currency = lng === 'ru' ? 'RUB' : 'USD' return new Intl.NumberFormat(lng, { style: 'currency', currency }).format(value) } return value }, }, }) 

Problems We Solve

  • N+1 translation requests — Each component loads its own JSON instead of a single bundle. Solution: lazy namespace loading with caching. This cuts requests by 70%, saving roughly $200 per month in traffic for an average project.
  • Hydration mismatch — Server and client renders use different translations, breaking SEO and increasing Cumulative Layout Shift. Solution: a single i18next instance on the server with cloneInstance per request. This eliminates errors and improves Core Web Vitals.
  • Missing pluralization — Russian requires forms like "товар", "товара", "товаров", which custom solutions don't support. i18next provides built-in pluralization for 200+ languages via ICU MessageFormat.

Why i18next Is the Best Choice for Web App Localization?

A custom translation object lacks pluralization, date/currency formatting, and lazy loading. i18next handles all these out of the box, with tests covering over 200 edge cases. We chose i18next for its flexibility: it works with any backend (REST, GraphQL, files) and supports TypeScript via typed keys. Plus, i18next has built-in ICU MessageFormat support for complex pluralization and grammar rules. According to i18next documentation, the framework supports 200+ languages and 15+ plugins, including i18next-http-backend and i18next-browser-languagedetector.

Setting Up i18next Server-Side Rendering for SEO

For SSR we create a separate i18next instance with fs-backend. On each request we clone it with the required locale. This ensures the server-rendered HTML is fully translated, preventing client-side mismatch. We also enable appendNamespaceToCIMode in the config to avoid key conflicts. Example configuration:

import i18next from 'i18next' import Backend from 'i18next-fs-backend' const serverI18n = i18next.createInstance() await serverI18n.use(Backend).init({ lng: 'ru', fallbackLng: 'ru', ns: ['common', 'catalog'], backend: { loadPath: './public/locales/{{lng}}/{{ns}}.json' }, }) export function createI18nForRequest(locale: string) { return serverI18n.cloneInstance({ lng: locale }) } 

Configuring i18next in 5 Steps

  1. Install packages: npm install i18next react-i18next i18next-http-backend i18next-browser-languagedetector.
  2. Create an i18n.ts file with initialization as shown above.
  3. Prepare JSON translation files in public/locales/{lang}/{namespace}.json.
  4. Wrap your root component in Suspense with a fallback.
  5. Use the useTranslation hook in components.

Using i18next in React

The useTranslation hook returns a t function and i18n object. For text with HTML, use the Trans component to avoid dangerouslySetInnerHTML. Example:

import { useTranslation, Trans } from 'react-i18next' function CatalogPage() { const { t } = useTranslation('catalog') return ( <main> <h1>{t('title')}</h1> <p>{t('items_count', { count: 3 })}</p> <Trans i18nKey="privacy_note" components={{ link: <a href="/privacy" /> }} /> </main> ) } 

Avoiding Translation Loading Issues

Lazy loading per route is key. We use i18n.loadNamespaces('checkout') in React Router loaders. This ensures translations are loaded only when needed, and the user doesn't wait for an extra 100 KB. For caching we add localStorage-backend—repeat visits generate no requests. Compare a custom solution with i18next:

Feature Custom Solution i18next
Pluralization Must write manually Built-in, 200+ languages
Loading All at once or piecewise Lazy, with caching
SSR Hard to synchronize Ready fs-backend plugin
Typing None TypeScript keys

i18next loads translations 3x faster than custom objects, thanks to caching and lazy loading. With an average traffic of 10,000 visitors per month, this saves about $300 on hosting and SEO optimization. Our i18next configuration services start at $1,500, delivering savings of $200 per month in traffic costs.

Process Overview

Stage Duration Description
Analysis from 2 days Define languages, namespaces, translation insertion points
Design from 3 days Create JSON schemas, configure i18next-parser for automatic key extraction
Implementation from 5 days Initialize, integrate with framework, write components
SSR Adaptation from 2 days Configure server instance and pass locale
Testing from 2 days Check all languages, pluralization, formatting
Deployment from 1 day Set up CI for translation updates

In production we recommend using a CDN to store JSON translation files, reducing server load and speeding delivery to users.

What's Included in Turnkey Setup

  • i18next initialization with plugins (http, detector, caching).
  • Development of namespaces and translation files.
  • Integration with React/Vue/Angular (useTranslation, Trans).
  • SSR configuration for SEO.
  • Automatic key extraction via i18next-parser.
  • Documentation for adding new languages.

Our engineers have over 5 years of i18next experience, having completed 20+ multilingual projects. We guarantee a stable multilingual system, trusted by over 20 companies. Contact us for a consultation—we'll configure i18next so translations work without surprises. Order i18next setup from us and get a stable multilingual system.