Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- Начальная версияv7.0.601.11.2025
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомЕсли у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на 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.
С таким подходом вы можете:
- Организовывать переводы с помощью пространств имён (например,
common.json,about.json) для лучшего управления контентом. - Эффективно загружать переводы, загружая только необходимые пространства имён для каждой страницы, что уменьшает размер бандла.
- Поддерживать как серверные, так и клиентские компоненты с правильной обработкой SSR и гидратации.
- Обеспечить поддержку TypeScript с типобезопасной конфигурацией локалей и ключей переводов.
- Оптимизируйте SEO с помощью правильных метаданных, карты сайта и интернационализации 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. - Разделяйте сообщения по namespace
Организуйте JSON-файлы по локалям и namespace (например,
common.json,about.json), чтобы загружать только необходимое. - Минимизируйте нагрузку на клиент
На страницах отправляйте в
NextIntlClientProviderтолько нужные namespace (например,pick(messages, ['common', 'about'])). - Предпочитайте статические страницы Используйте статические страницы по возможности для лучшей производительности и SEO.
- Интернационализация в серверных компонентах
Серверные компоненты, такие как страницы или все компоненты, не помеченные как
client, являются статическими и могут быть предварительно отрендерены во время сборки. Поэтому нам нужно передавать функции перевода им через props. - Настройте типы TypeScript Для ваших локалей обеспечьте типовую безопасность по всему приложению.
- Прокси для перенаправления Используйте прокси для обработки определения локали и маршрутизации, а также для перенаправления пользователя на URL с соответствующим префиксом локали.
- Интернационализация метаданных, sitemap, robots.txt
Интернационализируйте ваши метаданные, 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: Плагин, который позволяет динамически загружать файлы переводов, загружая только необходимые пространства имён.
Настройка проекта
Создайте файл конфигурации, чтобы определить поддерживаемые локали, локаль по умолчанию и вспомогательные функции для локализации URL. Этот файл служит единственным источником правды для вашей настройки i18n и обеспечивает типобезопасность во всем приложении.
Централизация конфигурации локалей предотвращает несоответствия и упрощает добавление или удаление локалей в будущем. Вспомогательные функции обеспечивают единообразное формирование URL для SEO и маршрутизации.
i18n.config.tsКопировать кодКопировать код в буфер обмена
Централизовать пространства имён переводов
Создайте единый источник правды для каждого namespace, который использует ваше приложение. Повторное использование этого списка поддерживает синхронизацию кода сервера, клиента и инструментов, а также обеспечивает строгую типизацию для помощников перевода.
src/i18n.namespaces.tsКопировать кодКопировать код в буфер обмена
Строгая типизация ключей перевода с помощью TypeScript
Расширьте
i18next, чтобы он ссылался на ваши канонические языковые файлы (обычно английские). TypeScript тогда выводит допустимые ключи для каждого namespace, поэтому вызовы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, который работает в браузере. Принимая предварительно загруженные ресурсы с сервера, мы обеспечиваем плавную гидратацию и предотвращаем мерцание контента. Провайдер также динамически управляет изменениями локали и загрузкой пространств имён.
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-файлы для каждой локали и пространства имён. Такая структура позволяет логично организовать переводы и загружать только то, что необходимо для каждой страницы.
Организация переводов по пространствам имён (например,
common.json,about.json) позволяет разделять код и уменьшать размер бандла. Вы загружаете только те переводы, которые нужны для каждой страницы, что улучшает производительность.src/locales/en/common.jsonКопировать кодКопировать код в буфер обмена
src/locales/fr/common.jsonКопировать кодКопировать код в буфер обмена
src/locales/en/home.jsonКопировать кодКопировать код в буфер обмена
Организация переводов по пространствам имён (например,
common.json,about.json) позволяет разделять код и уменьшать размер бандла. Вы загружаете только те переводы, которые нужны для каждой страницы, что улучшает производительность.src/locales/en/common.jsonКопировать кодКопировать код в буфер обмена
src/locales/ru/common.jsonКопировать кодКопировать код в буфер обмена
src/locales/en/home.jsonКопировать кодКопировать код в буфер обмена
src/locales/ru/home.jsonКопировать кодКопировать код в буфер обмена
src/locales/en/about.jsonКопировать кодКопировать код в буфер обмена
src/locales/ru/about.jsonКопировать кодКопировать код в буфер обмена
Использование переводов на ваших страницах
Создайте компонент страницы, который инициализирует i18next на сервере и передаёт переводы как серверным, так и клиентским компонентам. Это гарантирует, что переводы загружены до рендера и предотвращает мерцание контента.
Инициализация на стороне сервера загружает переводы до рендера страницы, улучшая SEO и предотвращая FOUC (Flash of Unstyled Content). Передавая заранее загруженные ресурсы клиентскому провайдеру, мы избегаем повторных запросов и обеспечиваем плавную гидратацию.
src/app/[locale]/about/index.tsxКопировать кодКопировать код в буфер обмена
Использование переводов в клиентских компонентах
Клиентские компоненты могут использовать хук
useTranslationдля доступа к переводам. Этот хук предоставляет функцию перевода и экземпляр i18n, что позволяет переводить контент и получать информацию о локали.Клиентским компонентам необходимы React хуки для доступа к переводам. Хук
useTranslationинтегрируется с i18next и обеспечивает реактивное обновление при изменении локали.Убедитесь, что страница/провайдер включает только необходимые пространства имён (например,
about).
Если вы используете React < 19, мемоизируйте тяжёлые форматтеры, такие какIntl.NumberFormat.src/components/ClientComponent.tsxКопировать кодКопировать код в буфер обмена
Использование переводов в серверных компонентах
Серверные компоненты не могут использовать React hooks, поэтому они получают переводы через props от своих родительских компонентов. Такой подход сохраняет синхронность серверных компонентов и позволяет вкладывать их внутрь клиентских компонентов.
Серверные компоненты, которые могут быть вложены в клиентские границы, должны быть синхронными. Передавая переведённые строки и информацию о локали через props, мы избегаем асинхронных операций и обеспечиваем корректный рендеринг.
src/components/ServerComponent.tsxКопировать кодКопировать код в буфер обмена
Изменение языка вашего контента
НеобязательноДля изменения языка вашего контента в Next.js рекомендуется использовать URL с префиксом локали и ссылки Next.js. Пример ниже считывает текущую локаль из маршрута, удаляет её из пути и отображает по одной ссылке для каждой доступной локали.
src/components/LocaleSwitcher.tsxКопировать кодКопировать код в буфер обмена
Создание локализованного компонента Link
НеобязательноПовторное использование локализованных URL по всему вашему приложению обеспечивает согласованную навигацию и улучшает SEO. Оберните
next/linkв небольшой помощник, который добавляет префикс активной локали к внутренним маршрутам, оставляя внешние URL без изменений.src/components/LocalizedLink.tsxКопировать кодКопировать код в буфер обмена
Совет: Поскольку
LocalizedLinkявляется заменой "drop-in", мигрируйте постепенно, меняя импорты и позволяя компоненту обрабатывать URL-адреса, специфичные для локали.Доступ к активной локали внутри Server Actions
НеобязательноServer Actions часто нуждаются в текущей локали для писем, логирования или интеграций с третьими сторонами. Объедините cookie с локалью, установленной вашим прокси, с заголовком
Accept-Languageв качестве резервного варианта.src/app/actions/get-current-locale.tsКопировать кодКопировать код в буфер обмена
Поскольку помощник использует cookies и заголовки Next.js, он работает в Route Handlers, Server Actions и других контекстах, доступных только на сервере.
Интернационализация ваших метаданных
НеобязательноПеревод контента важен, но основная цель интернационализации, сделать ваш сайт более заметным для всего мира. I18n, это мощный инструмент для улучшения видимости вашего сайта через правильное SEO.
Правильно интернационализированные метаданные помогают поисковым системам понять, какие языки доступны на ваших страницах. Это включает установку метатегов hreflang, перевод заголовков и описаний, а также обеспечение корректной установки канонических URL для каждой локали.
Вот список лучших практик по многоязычному 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 в теге
Интернационализация вашей карты сайта
НеобязательноСоздайте карту сайта, которая включает все версии страниц для каждой локали. Это помогает поисковым системам обнаруживать и индексировать все языковые версии вашего контента.
Правильно интернационализированная карта сайта гарантирует, что поисковые системы смогут найти и индексировать все языковые версии ваших страниц. Это улучшает видимость в международных результатах поиска.
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 позволяет вам:
Объявлять ваш контент там, где вы хотите, в вашем коде Intlayer позволяет объявлять ваш контент там, где вы хотите, в вашем коде, используя файлы
.content.{ts|js|json}. Это обеспечит лучшую организацию вашего контента, улучшая читаемость и поддерживаемость вашей codebase.Тестировать отсутствующие переводы Intlayer предоставляет функции тестирования, которые можно интегрировать в ваш CI/CD pipeline или в ваши модульные тесты. Узнайте больше о тестировании ваших переводов.
Автоматизация ваших переводов, Intlayer предоставляет CLI и расширение для VSCode для автоматизации ваших переводов. Это можно интегрировать в ваш CI/CD pipeline. Узнайте больше о автоматизации ваших переводов. Вы можете использовать свой собственный API-ключ и выбранного вами AI-провайдера. Также поддерживаются контекстно-зависимые переводы, см. заполнение контента.
- Подключение внешнего контента
Автоматизация переводов
Intlayer предоставляет CLI и расширение для VSCode для автоматизации ваших переводов. Это можно интегрировать в ваш CI/CD pipeline. Узнайте больше о автоматизации переводов.
Вы можете использовать собственный API ключ и выбранного вами AI провайдера. Также поддерживаются контекстно-зависимые переводы, смотрите заполнение контента.Подключение внешнего контента
Intlayer позволяет подключать ваш контент к внешней системе управления контентом (CMS). Для оптимального получения данных и вставки их в ваши JSON ресурсы. Узнайте больше о получении внешнего контента.Визуальный редактор
Intlayer предлагает бесплатный визуальный редактор для редактирования вашего контента. Узнайте больше о визуальном редактировании переводов.
И многое другое. Чтобы узнать обо всех возможностях Intlayer, пожалуйста, обратитесь к документации по интересу Intlayer.
Комментарии
Пока нет комментариев. Будьте первым, кто поделится своими мыслями.