Fumadocs

Internationalization

Support multiple languages in your documentation

Introduction

Fumadocs core provides necessary middleware and options for i18n support.

You can define a config to share between utilities.

lib/i18n.ts
import type { I18nConfig } from 'fumadocs-core/i18n';
 
export const i18n: I18nConfig = {
  defaultLanguage: 'en',
  languages: ['en', 'cn'],
};

Hide Locale Prefix

To hide the locale prefix (e.g. /en/page -> /page), use the hideLocale option.

import type { I18nConfig } from 'fumadocs-core/i18n';
 
export const i18n: I18nConfig = {
  defaultLanguage: 'en',
  languages: ['en', 'cn'],
  hideLocale: 'default-locale',
};
ModeDescription
alwaysAlways hide the prefix, detect locale from cookies
default-localeOnly hide the default locale
neverNever hide the prefix (default)

Using always

On always mode, locale is stored as a cookie (set by the middleware), which isn't optimal for static sites.

This may cause undesired cache problems, and need to pay extra attention on SEO to ensure search engines can index your pages correctly.

Middleware

Redirects users to appropriate locale, it can be customised from i18n.ts.

middleware.ts
import { createI18nMiddleware } from 'fumadocs-core/i18n';
import { i18n } from '@/lib/i18n';
 
export default createI18nMiddleware(i18n);
 
export const config = {
  // Matcher ignoring `/_next/` and `/api/`
  matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
};

When hideLocale is enabled, it uses NextResponse.rewrite to hide locale prefixes.

How is this guide?

On this page