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'],
};

Source API

Change your current source configurations, loader will now generate multiple page trees for every locale.

lib/source.ts
import { i18n } from '@/lib/i18n';
import { loader } from 'fumadocs-core/source';
 
export const source = loader({
  i18n,
  // other options
});

See Source API.

Middleware

Redirects users to appropriate locale.

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).*)'],
};

You can also customise the i18n middleware from i18n.ts.

Hide Locale Prefix

To hide the locale prefix, for example, use / instead of /en, use the hideLocale option.

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

It uses NextResponse.rewrite to hide locale prefixes.

It's not recommended to use always. On this mode, locale is stored as a cookie, read and set on the middleware.

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

For Orama, see Setup I18n.

Edit on GitHub

Last updated on

On this page