• Documentation
  • Guide
  • Next.js I18n

Next.js I18n

⚠️
This feature is only available in the docs theme.

Nextra supports Next.js Internationalized Routing out of the box. This docs explains how to configure and use it.

Add I18n Config

To add multi-language pages to your Nextra application, you need to config i18n in next.config.js first:

const withNextra = require('nextra')({
  theme: "nextra-theme-docs",
  themeConfig: "./theme.config.tsx",
})
 
module.exports = withNextra({
  i18n: {
    locales: ['en', 'zh', 'de'],
    defaultLocale: 'en'
  }
})

Add Middleware

Then, you need to add a middleware.js file in the root of your project (related Next.js docs):

export { locales as middleware } from 'nextra/locales'

If you already have the middleware defined, you can do this instead:

import { withLocales } from 'nextra/locales'
 
export const middleware = withLocales((request) => {
  // Your middleware code...
})

Use Add Locale to Filenames

Then, add the locale codes to your file extensions (required for the default locale too):

/pages
  _meta.en.json
  _meta.zh.json
  _meta.de.json
  index.en.md
  index.zh.md
  index.de.md
  ...

Configure the Docs Theme

Finally, add the i18n option to your theme.config.jsx to configure the language dropdown:

i18n: [
  { locale: 'en', text: 'English' },
  { locale: 'zh', text: '中文' },
  { locale: 'de', text: 'Deutsch' },
  { locale: 'ar', text: 'العربية', direction: 'rtl' }
]
Last updated on December 3, 2022