Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Історія версій
- Початкова версіяv7.0.601.11.2025
Вміст цієї сторінки перекладено за допомогою штучного інтелекту.
Переглянути останню версію оригінального вмісту англійськоюЯкщо у вас є ідея щодо покращення цієї документації, будь ласка, долучіться, надіславши pull request на GitHub.
Посилання на документацію на GitHubСкопіювати документацію у форматі Markdown в буфер обміну
Як інтернаціоналізувати ваш додаток Next.js за допомогою next-i18next у 2025 році
Зміст
Що таке next-i18next?
next-i18next, популярне рішення для інтернаціоналізації (i18n) застосунків Next.js. Хоча оригінальний пакет next-i18next був розроблений для Pages Router, цей посібник показує, як реалізувати i18next з сучасним App Router, використовуючи безпосередньо i18next і react-i18next.
За допомогою цього підходу ви можете:
- Організовувати переклади за допомогою просторів імен (namespaces) (наприклад,
common.json,about.json) для кращого керування контентом. - Завантажувати переклади ефективно, завантажуючи лише ті простори імен, які потрібні для кожної сторінки, що зменшує розмір бандла.
- Підтримувати як серверні, так і клієнтські компоненти з правильною обробкою SSR та гідратації.
- Забезпечити підтримку TypeScript з типобезпечною конфігурацією локалі та ключів перекладу.
- Оптимізуйте для SEO з правильними метаданими, sitemap та інтернаціоналізацією robots.txt.
Як альтернативу, ви також можете звернутися до посібника next-intl, або безпосередньо використовуючи Intlayer.
Див. порівняння у next-i18next vs next-intl vs Intlayer.
Практики, яких слід дотримуватися
Перш ніж перейти до реалізації, ось кілька практик, яких слід дотримуватися:
- Встановіть атрибути HTML
langтаdirУ вашому layout обчислітьdirза допомогоюgetLocaleDirection(locale)і встановіть<html lang={locale} dir={dir}>для належної доступності та SEO. - Split messages by namespace
Організуйте JSON-файли за локаллю та неймспейсом (наприклад,
common.json,about.json), щоб завантажувати лише те, що потрібно. - Minimize client payload
На сторінках надсилайте до
NextIntlClientProviderлише потрібні неймспейси (наприклад,pick(messages, ['common', 'about'])). - Prefer static pages Віддавайте перевагу статичним сторінкам і використовуйте їх якомога частіше для кращої продуктивності та SEO.
- I18n in server components
Серверні компоненти, як-от pages або всі компоненти, що не позначені як
client, є статичними і можуть бути попередньо зрендерені під час збірки. Тому нам доведеться передавати їм функції перекладу як пропси. - Set up TypeScript types Налаштуйте типи TypeScript для забезпечення типобезпеки у вашому додатку. Для ваших локалей, щоб забезпечити безпеку типів у всьому вашому застосунку.
- Проксі для перенаправлення Використовуйте proxy для обробки визначення локалі та маршрутизації й перенаправляйте користувача на відповідний URL з префіксом локалі.
- Інтернаціоналізація ваших metadata, sitemap, robots.txt
Інтернаціоналізуйте ваші metadata, sitemap, robots.txt за допомогою функції
generateMetadata, наданої Next.js, щоб забезпечити кращу індексацію пошуковими системами для всіх локалей. - Локалізація посилань
Локалізуйте посилання, використовуючи компонент
Link, щоб перенаправляти користувача на відповідний URL з префіксом локалі. Це важливо для забезпечення індексації ваших сторінок у всіх локалях. - Автоматизація тестів та перекладів Автоматизація тестів та перекладів допомагає заощаджувати час на підтримку вашого багатомовного застосунку.
Дивіться нашу документацію, яка містить усе, що потрібно знати про інтернаціоналізацію та SEO: Інтернаціоналізація (i18n) з next-intl.
Покроковий посібник з налаштування i18next у застосунку Next.js
Дивіться Шаблон застосунку на GitHub.
Ось структура проєкту, яку ми створимо:
Скопіюйте код у буфер обміну
Встановіть залежності
Встановіть необхідні пакети за допомогою npm:
bashКопіювати кодСкопіюйте код у буфер обміну
- i18next: Основний фреймворк для інтернаціоналізації, який відповідає за завантаження та керування перекладами.
- react-i18next: React-байндинги для i18next, що надають хуки, такі як
useTranslation, для клієнтських компонентів. - i18next-resources-to-backend: Плагін, який дозволяє динамічно завантажувати файли перекладів, даючи змогу підвантажувати лише ті простори імен (namespaces), які потрібні.
Налаштуйте свій проєкт
Створіть файл конфігурації, щоб визначити підтримувані локалі, локаль за замовчуванням та допоміжні функції для локалізації URL. Цей файл слугує єдиним джерелом істини для вашої i18n-настройки та забезпечує безпечність типів у всьому застосунку.
Централізація конфігурації локалей запобігає невідповідностям і спрощує додавання або видалення локалей у майбутньому. Допоміжні функції забезпечують узгоджене формування URL для SEO та маршрутизації.
i18n.config.tsКопіювати кодСкопіюйте код у буфер обміну
Централізація просторів імен перекладів
Створіть єдине джерело істини для кожного простору імен (namespace), який надає ваша аплікація. Повторне використання цього списку дозволяє синхронізувати код на сервері, клієнті та в інструментах і відкриває можливість суворої типізації для допоміжних функцій перекладу.
src/i18n.namespaces.tsКопіювати кодСкопіюйте код у буфер обміну
Сувора типізація ключів перекладу за допомогою TypeScript
Розширіть
i18next, щоб вказати на ваші канонічні мовні файли (зазвичай англійські). TypeScript потім виведе дійсні ключі для кожного простору імен, тож викликиt()перевіряються повністю.src/types/i18next.d.tsКопіювати кодСкопіюйте код у буфер обміну
Порада: Збережіть це оголошення в каталозі
src/types(створіть папку, якщо вона не існує). Next.js вже включаєsrcуtsconfig.json, тому розширення буде підхоплене автоматично. Якщо ні, додайте наступне до вашого файлуtsconfig.json:tsconfig.jsonКопіювати кодСкопіюйте код у буфер обміну
З цим налаштованим ви можете покладатися на автозаповнення та перевірки під час компіляції:
tsxКопіювати кодСкопіюйте код у буфер обміну
Налаштування серверної ініціалізації i18n
Створіть функцію ініціалізації на сервері, яка завантажує переклади для серверних компонентів. Ця функція створює окремий екземпляр i18next для рендерингу на сервері, забезпечуючи завантаження перекладів перед рендерингом.
Серверні компоненти потребують власного екземпляра i18next, оскільки вони виконуються в іншому контексті, ніж клієнтські компоненти. Попереднє завантаження перекладів на сервері запобігає міганню неперекладеного вмісту та покращує SEO, гарантуючи, що пошукові системи бачать перекладений вміст.
src/app/i18n/server.tsКопіювати кодСкопіюйте код у буфер обміну
Створіть клієнтський провайдер i18n
Створіть клієнтський компонент-провайдер, який обгортає ваш додаток контекстом i18next. Цей провайдер отримує попередньо завантажені переклади з сервера, щоб запобігти мерехтінню неперекладеного вмісту (FOUC) та уникнути дублювання запитів.
Клієнтським компонентам потрібен власний екземпляр i18next, що працює в браузері. Приймаючи попередньо завантажені ресурси з сервера, ми забезпечуємо безшовну гідратацію та запобігаємо мерехтінню контенту. Провайдер також динамічно керує зміною локалі та завантаженням namespace.
src/components/I18nProvider.tsxКопіювати кодСкопіюйте код у буфер обміну
Визначення динамічних маршрутів локалей
Налаштуйте динамічну маршрутизацію для локалей, створивши директорію
[locale]у вашій папці app. Це дозволяє Next.js обробляти маршрути залежно від локалі, де кожна локаль стає сегментом URL (наприклад,/en/about,/fr/about).Використання динамічних маршрутів дозволяє Next.js генерувати статичні сторінки для всіх локалей під час збірки, що покращує продуктивність і SEO. Компонент layout встановлює HTML-атрибути
langтаdirна основі локалі, що має вирішальне значення для доступності та розуміння сторінки пошуковими системами.src/app/[locale]/layout.tsxКопіювати кодСкопіюйте код у буфер обміну
Створіть файли перекладів
Створіть JSON-файли для кожного locale та namespace. Така структура дозволяє логічно організувати переклади та завантажувати лише те, що потрібно для кожної сторінки.
Організація перекладів за неймспейсами (наприклад,
common.json,about.json) дозволяє розділяти код (code splitting) і зменшувати розмір бандла. Ви завантажуєте лише переклади, потрібні для кожної сторінки, що покращує продуктивність.src/locales/en/common.jsonКопіювати кодСкопіюйте код у буфер обміну
src/locales/fr/common.jsonКопіювати кодСкопіюйте код у буфер обміну
src/locales/en/home.jsonКопіювати кодСкопіюйте код у буфер обміну
src/locales/fr/home.jsonКопіювати кодСкопіюйте код у буфер обміну
src/locales/en/about.jsonКопіювати кодСкопіюйте код у буфер обміну
src/locales/fr/about.jsonКопіювати кодСкопіюйте код у буфер обміну
Використовуйте переклади на своїх сторінках
Створіть компонент сторінки, який ініціалізує i18next на сервері та передає переклади як серверним, так і клієнтським компонентам. Це гарантує завантаження перекладів перед рендерінгом і запобігає мерехтінню контенту.
Ініціалізація на сервері завантажує переклади до того, як сторінка буде відрендерена, що покращує SEO та запобігає FOUC (Flash of Unstyled Content). Передаючи попередньо завантажені ресурси провайдеру на клієнті, ми уникаємо повторних запитів і забезпечуємо плавну гідратацію.
src/app/[locale]/about/index.tsxКопіювати кодСкопіюйте код у буфер обміну
Використання перекладів у клієнтських компонентах
Клієнтські компоненти можуть використовувати хук
useTranslationдля доступу до перекладів. Цей хук надає доступ до функції перекладу та екземпляра i18n, що дозволяє перекладати вміст та отримувати інформацію про локаль.Клієнтські компоненти потребують React-хуків для доступу до перекладів. Хук
useTranslationорганічно інтегрується з i18next і забезпечує реактивне оновлення при зміні локалі.Переконайтеся, що сторінка/провайдер містить лише ті простори імен (namespaces), які вам потрібні (наприклад,
about).
Якщо ви використовуєте React < 19, мемоізуйте важкі форматтери, наприкладIntl.NumberFormat.src/components/ClientComponent.tsxКопіювати кодСкопіюйте код у буфер обміну
Використання перекладів у серверних компонентах
Серверні компоненти не можуть використовувати React hooks, тому вони отримують переклади через props від батьківських компонентів. Такий підхід робить серверні компоненти синхронними і дозволяє вкладати їх у клієнтські компоненти.
Серверні компоненти, які можуть бути вкладені в client boundaries, мають бути синхронними. Передаючи перекладені рядки та інформацію про локаль як props, ми уникаємо асинхронних операцій і забезпечуємо коректне рендерення.
src/components/ServerComponent.tsxКопіювати кодСкопіюйте код у буфер обміну
Змініть мову вашого контенту
Необов'язковоЩоб змінити мову вашого контенту в Next.js, рекомендовано використовувати URL-адреси з префіксом локалі та компоненти Link від Next.js. Приклад нижче зчитує поточну локаль з маршруту, видаляє її з pathname і рендерить по одному посиланню для кожної доступної локалі.
src/components/LocaleSwitcher.tsxКопіювати кодСкопіюйте код у буфер обміну
Створіть локалізований компонент Link
Необов'язковоПовторне використання локалізованих URL у вашому додатку зберігає навігацію послідовною та дружньою до SEO. Обгорніть
next/linkу невеликий хелпер, який додає префікс активної локалі до внутрішніх маршрутів, залишаючи зовнішні URL без змін.src/components/LocalizedLink.tsxКопіювати кодСкопіюйте код у буфер обміну
Порада: Оскільки
LocalizedLinkє drop-in replacement, мігруйте поступово, замінюючи імпорти та дозволяючи компоненту обробляти URL-адреси, специфічні для локалі.Доступ до активної локалі всередині Server Actions
Необов'язковоServer Actions часто потребують поточної локалі для email-розсилок, логування або інтеграцій зі сторонніми сервісами. Поєднайте cookie локалі, встановлене вашим проксі, із заголовком
Accept-Languageяк fallback.src/app/actions/get-current-locale.tsКопіювати кодСкопіюйте код у буфер обміну
Оскільки цей хелпер спирається на cookies і headers Next.js, він працює в Route Handlers, Server Actions та інших серверних контекстах.
Інтернаціоналізуйте метадані
Необов'язковоПереклад контенту важливий, але основна мета інтернаціоналізації, зробити ваш вебсайт більш помітним для світу. I18n, потужний інструмент для підвищення видимості сайту завдяки належному SEO.
Правильно інтернаціоналізовані метадані допомагають пошуковим системам зрозуміти, які мови доступні на ваших сторінках. Це включає встановлення meta-тегів hreflang, переклад заголовків і описів, а також забезпечення правильного налаштування canonical URLs для кожної локалі.
Ось список кращих практик щодо багатомовного SEO:
- Встановіть hreflang мета-теги у елементі
<head>, щоб допомогти пошуковим системам зрозуміти, які мови доступні на сторінці - Перелічіть усі переклади сторінки в sitemap.xml, використовуючи XML-схему
http://www.w3.org/1999/xhtml - Не забудьте виключити сторінки з префіксами з robots.txt (наприклад,
/dashboard,/fr/dashboard,/es/dashboard) - Використовуйте кастомний компонент Link для перенаправлення на найбільш локалізовану сторінку (наприклад, французькою
<a href="/fr/about">À propos</a>)
Розробники часто забувають правильно посилатися на свої сторінки в різних локалях. Виправимо це:
src/app/[locale]/about/layout.tsxКопіювати кодСкопіюйте код у буфер обміну
- Встановіть hreflang мета-теги у елементі
Інтернаціоналізуйте ваш Sitemap
Необов'язковоЗгенеруйте карту сайту (sitemap), яка включає всі локалізовані версії ваших сторінок. Це допомагає пошуковим системам знаходити та індексувати всі мовні версії вашого контенту.
Коректно інтернаціоналізована карта сайту гарантує, що пошукові системи можуть знайти та індексувати всі мовні версії ваших сторінок. Це підвищує видимість у міжнародних результатах пошуку.
src/app/sitemap.tsКопіювати кодСкопіюйте код у буфер обміну
Інтернаціоналізуйте ваш robots.txt
Необов'язковоСтворіть файл robots.txt, який правильно обробляє всі мовні версії ваших захищених маршрутів. Це гарантує, що пошукові системи не індексують сторінки адміністратора або панелі керування жодною мовою.
Правильна конфігурація robots.txt для всіх локалей запобігає індексації чутливих сторінок пошуковими системами будь-якою мовою. Це критично важливо для безпеки та конфіденційності.
src/app/robots.tsКопіювати кодСкопіюйте код у буфер обміну
Налаштуйте middleware для маршрутизації локалей
Необов'язковоСтворіть проксі, який автоматично визначає переважну локаль користувача та перенаправляє його на відповідний URL з префіксом локалі. Це покращує досвід користувача, відображаючи контент обраною мовою.
Middleware гарантує, що користувачі автоматично перенаправляються на свою переважну мову під час відвідування сайту. Воно також зберігає мовні вподобання користувача в cookie для майбутніх відвідувань.
src/proxy.tsКопіювати кодСкопіюйте код у буфер обміну
Автоматизуйте ваші переклади за допомогою Intlayer
Необов'язковоIntlayer, це безкоштовна та з відкритим вихідним кодом бібліотека, створена для допомоги у процесі локалізації вашого застосунку. Поки i18next відповідає за завантаження та управління перекладами, Intlayer допомагає автоматизувати робочий процес перекладів.
Керування перекладами вручну може займати багато часу й бути схильним до помилок. Intlayer автоматизує тестування, генерацію та керування перекладами, заощаджуючи ваш час і забезпечуючи послідовність у всьому додатку.
Intlayer дозволяє вам:
Оголошуйте свій контент там, де вам зручно в codebase Intlayer дозволяє оголошувати ваш контент там, де потрібно в codebase за допомогою файлів
.content.{ts|js|json}. Це дає змогу краще організувати контент, забезпечуючи кращу читабельність та підтримуваність codebase.Перевірка відсутніх перекладів Intlayer надає функції тестування, які можна інтегрувати у ваш CI/CD pipeline або в модульні тести. Дізнайтеся більше про тестування ваших перекладів.
Автоматизуйте ваші переклади, Intlayer надає CLI та розширення для VSCode для автоматизації ваших перекладів. Це можна інтегрувати у ваш CI/CD pipeline. Дізнайтеся більше про автоматизацію перекладів. Ви можете використовувати свій власний API-ключ та AI-провайдера на ваш вибір. Також він забезпечує контекстно-залежні переклади, див. заповнення контенту.
Підключення зовнішнього контенту Intlayer дозволяє підключати ваш контент до зовнішньої системи керування контентом (CMS), щоб отримувати його оптимізовано та вставляти у ваші JSON-ресурси. Дізнайтеся більше про отримання зовнішнього контенту.
Візуальний редактор Intlayer пропонує безкоштовний візуальний редактор для редагування вашого контенту. Дізнайтеся більше про візуальне редагування ваших перекладів.
І це ще не все. Щоб дізнатися про всі можливості, які надає Intlayer, будь ласка, перегляньте документацію «Переваги Intlayer».
Коментарі
Поки що немає коментарів. Будьте першим, хто поділиться своїми думками.