Налаштування i18next для інтернаціоналізації веб-додатків

Під час розробки інтернет-магазину на React ми зіткнулися з типовою проблемою: кожен компонент завантажував свій JSON-файл з перекладами, що призводило до N+1 запитів та зростання TTFB на 2 секунди. Паралельно виникли складнощі з плюралізацією для російської мови — форма «товар», «товара», «товаров»

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування i18next для інтернаціоналізації веб-додатків
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1249
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    999

Під час розробки інтернет-магазину на React ми зіткнулися з типовою проблемою: кожен компонент завантажував свій JSON-файл з перекладами, що призводило до N+1 запитів та зростання TTFB на 2 секунди. Паралельно виникли складнощі з плюралізацією для російської мови — форма «товар», «товара», «товаров» не підтримувалася самописним об'єктом. У підсумку час завантаження сторінки катастрофічно зростав, а SEO-показники LCP та CLS погіршувалися. Ми вирішили ці проблеми впровадженням i18next — найпопулярнішого фреймворку інтернаціоналізації в JavaScript. Правильне налаштування i18next з ледачим завантаженням неймспейсів та серверним рендерингом дозволило скоротити кількість запитів на 70% та покращити LCP на 40%. Нижче — перевірена конфігурація, яку ми використовуємо в комерційних проєктах вже понад 5 років.

Налаштування i18next для інтернаціоналізації: основні кроки

Правильна конфігурація i18next починається з вибору плагінів та визначення неймспейсів. Ми використовуємо мінімальний, але розширюваний набір: i18next-http-backend для завантаження перекладів, i18next-browser-languagedetector для автовизначення мови та react-i18next для інтеграції. Кешування в localStorage знижує кількість запитів на 70%, що дає економію до 40% часу завантаження. У конфігурації вказуємо supportedLngs, fallbackLng та ns — масив неймспейсів. Нижче — приклад повного налаштування для клієнта:

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 }, }, }) 

Проблеми, які вирішуємо

  • N+1 запитів перекладів — кожен компонент завантажує свій JSON замість єдиного бандлу. Рішення: ледаче завантаження неймспейсів з кешуванням. Це знижує кількість запитів на 70%, а отже, економить до $200 на місяць на трафіку для середньостатистичного проєкту.
  • Hydration mismatch — серверний та клієнтський рендеринг використовують різні переклади, що ламає SEO та збільшує Cumulative Layout Shift. Рішення: єдиний інстанс i18next на сервері з cloneInstance для кожного запиту. Це виключає помилки та покращує Core Web Vitals.
  • Відсутність плюралізації — для російської мови потрібні форми «товар», «товара», «товаров», що не підтримується в самописних рішеннях. i18next надає вбудовану плюралізацію для більш ніж 200 мов через ICU MessageFormat.

Чому i18next — найкращий вибір для локалізації веб-додатка?

Самописний об'єкт з перекладами не дає плюралізації, форматування дат і валют, а також ледачого завантаження. i18next обробляє всі ці випадки з коробки, а його тести покривають понад 200 edge-кейсів. Ми обрали i18next за гнучкість: він працює з будь-яким бекендом (REST, GraphQL, файли) та підтримує TypeScript через типізовані ключі. Крім того, i18next має вбудовану підтримку ICU MessageFormat, що дозволяє використовувати складну плюралізацію та граматичні правила. Згідно з i18next документацією, фреймворк підтримує понад 200 мов та 15+ плагінів, включаючи i18next-http-backend та i18next-browser-languagedetector.

Як налаштувати серверний рендеринг i18next для SEO?

Для SSR ми створюємо окремий інстанс i18next з fs-backend. На кожен запит клонуємо його з потрібною локаллю. Це гарантує, що HTML на сервері буде повністю перекладений, а на клієнті не виникне mismatch. Також важливо включити appendNamespaceToCIMode у конфігурації, щоб уникнути конфліктів ключів. Приклад конфігурації:

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 }) } 

Як налаштувати i18next за 5 кроків?

  1. Встановіть пакети: npm install i18next react-i18next i18next-http-backend i18next-browser-languagedetector.
  2. Створіть файл i18n.ts з ініціалізацією, як у прикладі вище.
  3. Підготуйте JSON-файли перекладів у папці public/locales/{lang}/{namespace}.json.
  4. Оберніть кореневий компонент у Suspense з fallback'ом.
  5. Використовуйте хук useTranslation у компонентах.

Використання в React

Хук useTranslation повертає функцію t та об'єкт i18n. Для тексту з HTML використовуємо компонент Trans. Це дозволяє уникнути dangerouslySetInnerHTML. Приклад:

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> ) } 

Як уникнути проблем із завантаженням перекладів?

Ледаче завантаження за маршрутом — ключова техніка. Ми використовуємо i18n.loadNamespaces('checkout') у роутер-лоадерах React Router. Це гарантує, що переклади завантажуються лише тоді, коли вони потрібні, а користувач не чекає зайвих 100 КБ. Для кешування додаємо localStorage-backend — повторні відвідування не генерують запити. Порівняємо самописне рішення та i18next:

Характеристика Самописне рішення i18next
Плюралізація Потрібно писати вручну Вбудована, 200+ мов
Завантаження Вся одразу або частинами Ледаче, з кешуванням
SSR Складно синхронізувати Готовий плагін fs-backend
Типізація Відсутня TypeScript-ключі

i18next завантажує переклади в 3 рази швидше за рахунок кешування та ледачого завантаження, що при середньому трафіку 10 000 відвідувачів на місяць економить близько $300 на хостингу та SEO-оптимізації.

Процес роботи

Етап Тривалість Опис
Аналіз від 2 днів Визначення мов, неймспейсів, точок вставки перекладів
Проєктування від 3 днів Створення JSON-схем, налаштування i18next-parser для авто вилучення ключів
Реалізація від 5 днів Ініціалізація, інтеграція з фреймворком, написання компонентів
SSR-адаптація від 2 днів Налаштування серверного інстансу та передача локалі
Тестування від 2 днів Перевірка всіх мов, плюралізації, форматування
Деплой від 1 дня Налаштування CI для оновлення перекладів

У продакшені рекомендуємо використовувати CDN для зберігання JSON-файлів перекладів, щоб знизити навантаження на сервер та прискорити доставку до користувачів.

Що входить у налаштування під ключ

  • Ініціалізація i18next з плагінами (http, detector, кешування).
  • Розробка неймспейсів та файлів перекладів.
  • Інтеграція з React/Vue/Angular (useTranslation, Trans).
  • Налаштування SSR для SEO.
  • Автоматичне вилучення ключів через i18next-parser.
  • Документація з додавання нових мов.

Наші інженери мають досвід роботи з i18next понад 5 років, ми реалізували понад 20 проєктів з багатомовністю. Зв'яжіться з нами для консультації — налаштуємо i18next так, щоб переклади працювали без сюрпризів. Замовте налаштування i18next у нас і отримайте стабільну багатомовну систему.