HomeSandboxShowcaseAppDocBlog
    • EnglishEnglish
      EN
    • русскийRussian
      RU
    • 日本語Japanese
      JA
    • françaisFrench
      FR
    • 한국어Korean
      KO
    • 中文Chinese
      ZH
    • españolSpanish
      ES
    • DeutschGerman
      DE
    • العربيةArabic
      AR
    • italianoItalian
      IT
    • British EnglishBritish English
      EN-GB
    • portuguêsPortuguese
      PT
    • हिन्दीHindi
      HI
    • TürkçeTurkish
      TR
    • polskiPolish
      PL
    • IndonesiaIndonesian
      ID
    • Tiếng ViệtVietnamese
      VI
    • українськаUkrainian
      UK
    /
    Alt+←
    What is Internationalization (i18n)?
    SEO and i18n
    Guide
    • i18n using next-i18next
    • i18n using next-intl
    Use Intlayer on your solution
    • Automate next-i18next
    • Automate react-i18next
    • Automate next-intl
    • Automate react-intl
    • Automate vue-i18n
    Comparisons
    • next-i18next vs next-intl vs Intlayer
    • react-i18next vs react-intl vs Intlayer
    Documentation
    1. Blog
    2. Intlayer with next i18next
    Creation:2025-08-23Last update:2025-10-29
    Watch the video tutorial

    This page has a video tutorial available.

    Reference this doc to your favorite AI assistant
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Ask your question and get a summary of the document by referencing this page and the AI provider of your choice

    Version History

    1. Add loadJSON plugin
      v7.0.601/11/2025
    2. Change to syncJSON plugin and comprehensive rewrite
      v7.0.029/10/2025

    The content of this page was translated using an AI.

    See the last version of the original content in English
    Edit this doc

    If you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.

    GitHub link to the documentation
    Copy

    Copy doc Markdown to clipboard

    Next.js Internationalisation (i18n) with next-i18next and Intlayer

    www.youtube.com

    Table of Contents

    What is next-i18next?

    next-i18next is one of the most popular internationalisation (i18n) frameworks for Next.js applications. Built on top of the powerful i18next ecosystem, it provides a comprehensive solution for managing translations, localisation, and language switching in Next.js projects.

    However, next-i18next comes with some challenges:

    • Complex configuration: Setting up next-i18next requires multiple configuration files and careful setup of server-side and client-side i18n instances.
    • Scattered translations: Translation files are typically stored in separate directories from components, making it harder to maintain consistency.
    • Manual namespace management: Developers need to manually manage namespaces and ensure proper loading of translation resources.
    • Limited type safety: TypeScript support requires additional configuration and does not provide automatic type generation for translations.

    What is Intlayer?

    Intlayer is an innovative, open-source internationalisation library designed to address the shortcomings of traditional i18n solutions. It offers a modern approach to content management in Next.js applications.

    See a concrete comparison with next-intl in our next-i18next vs. next-intl vs. Intlayer blog post.

    Why Combine Intlayer with next-i18next?

    While Intlayer provides an excellent standalone i18n solution (see our Next.js integration guide), you might want to combine it with next-i18next for several reasons.

    Intlayer offers a rich set of advanced features that go beyond traditional i18n tools. It helps you:

    • Automatically detect and fill missing translations to streamline localization.
    • Test and validate your translations directly in your development or CI/CD workflows.
    • Manage content per component, enabling a clean, scalable, and maintainable structure across your app.
    • Externalize your content, making it easily editable by your whole team (developers, translators, and content managers).

    However, i18next remains an excellent and widely adopted i18n solution thanks to its mature ecosystem, broad community support, and extensive plugin compatibility.

    By combining Intlayer with i18next, you get the best of both worlds, i18next’s stability and ecosystem maturity, with Intlayer’s modern content management, automation, and developer experience improvements.

    This guide explains how to leverage Intlayer as an adapter for i18next, allowing you to:

    • Gradually migrate from i18next to Intlayer.
    • Keep existing i18next plugins and workflows.
    • Automate your JSON translations in CLI or CI/CD pipelines.
    • Test, sync, and manage translations more effectively.

    Step-by-Step Guide to Set Up Intlayer with next-i18next

    Step 1: Install Dependencies

    Install the necessary packages using your preferred package manager:

    bash
    Copy code

    Copy the code to the clipboard

    npm install intlayer @intlayer/sync-json-plugin --save-devnpx intlayer init

    Package explanations:

    • intlayer: Core library for content declaration and management
    • @intlayer/sync-json-plugin: Plugin to synchronise Intlayer content declarations to i18next JSON format

    Step 2: Implement the Intlayer plugin to wrap the JSON

    Create an Intlayer configuration file to define your supported locales:

    If you also want to export JSON dictionaries for i18next, add the syncJSON plugin:

    intlayer.config.ts
    Copy code

    Copy the code to the clipboard

    import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    syncJSON({      source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,    }),  ],};export default config;

    The syncJSON plugin will automatically wrap the JSON. It will read and write the JSON files without changing the content architecture.

    If you want to make that JSON coexist with Intlayer content declaration files (.content files), Intlayer will proceed as follows:

    plaintext
    Copy code

    Copy the code to the clipboard

    1. load both JSON and content declaration files and transform them into an Intlayer dictionary.2. if there are conflicts between the JSON and the content declaration files, Intlayer will merge all those dictionaries. This depends on the priority of the plugins, and that of the content declaration file (all are configurable).

    If changes are made using the CLI to translate the JSON, or using the CMS, Intlayer will update the JSON file with the new translations.

    To see more details about the syncJSON plugin, please refer to the syncJSON plugin documentation.

    Git Configuration

    Exclude generated files from version control:

    .gitignore
    Copy code

    Copy the code to the clipboard

    # Ignore files generated by Intlayer.intlayer

    These files are automatically regenerated during the build process and do not need to be committed to your repository.

    VS Code Extension

    For improved developer experience, install the official Intlayer VS Code Extension:

    Install from the VS Code Marketplace

    i18n using next-intl
    Automate react-i18next
    Alt+→

    On this page

      Discussions are anonymous and regularly reviewed to address common issues. Feel free to share feature ideas, feedback on the documentation, or anything related to Intlayer, we use this input to shape our roadmap and improve the product.

      npm install intlayer @intlayer/sync-json-plugin --save-devnpx intlayer init
      import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    syncJSON({      source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,    }),  ],};export default config;
      1. load both JSON and content declaration files and transform them into an Intlayer dictionary.2. if there are conflicts between the JSON and the content declaration files, Intlayer will merge all those dictionaries. This depends on the priority of the plugins, and that of the content declaration file (all are configurable).
      # Ignore files generated by Intlayer.intlayer