文档

Next.js

Magic Translate 适用于 Next.js 的两台路由器。使用 App Router,页面可以在服务器上进行翻译,因此每种语言都有自己的完全翻译过的 HTML 供搜索引擎使用。

应用程序路由器

将您的页面放在 [locale] 区段下,并列出您想要提供的语言。

// app/[locale]/layout.tsx
const locales = ['en', 'de', 'fr', 'ja'];
export function generateStaticParams() {
return locales.map((locale) => ({ locale }));
}
export default async function LocaleLayout({
children,
params
}: {
children: React.ReactNode;
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
return (
<html lang={locale}>
<body>{children}</body>
</html>
);
}

然后使用 locale 参数作为语言,使用 React SSR 翻译你的页面。

// app/[locale]/page.tsx
import { createLocalizedT } from '@magic-translate/react-ssr';
import { translate } from '@/lib/translate';
export default async function HomePage({
params
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
const { T } = createLocalizedT(translate, locale);
return (
<h1>
<T>Welcome to our website</T>
</h1>
);
}

页面标题和描述使用翻译功能进行翻译。

需要翻译的客户端组件,例如交互式菜单,可以使用 React 客户端。将它们包装在 MagicTranslateProvider 中,然后使用 utsLocaleToLanguage 转换语言环境。

'use client';
import {
MagicTranslateProvider,
utsLocaleToLanguage
} from '@magic-translate/react';
export function Providers({
locale,
children
}: {
locale: string;
children: React.ReactNode;
}) {
return (
<MagicTranslateProvider
apiKey={process.env.NEXT_PUBLIC_MAGIC_TRANSLATE_API_KEY!}
language={utsLocaleToLanguage(locale)}
>
{children}
</MagicTranslateProvider>
);
}

Pages 路由器

首先按照 Next.js 国际化指南设置您的区域设置。

然后将确定的语言环境 Next.js 传递给 MagicTranslateProvider。Magic Translate 的语言代码不会 1:1 映射到 Next.js 使用的语言环境,因此将其转换为 utsLocaleToLanguage。

// pages/_app.tsx
import type { AppProps } from 'next/app';
import { useRouter } from 'next/router';
import {
MagicTranslateProvider,
utsLocaleToLanguage
} from '@magic-translate/react';
export default function MyApp({ Component, pageProps }: AppProps) {
const { locale } = useRouter();
return (
<MagicTranslateProvider
apiKey="<your-api-key>"
language={utsLocaleToLanguage(locale)}
>
<Component {...pageProps} />
</MagicTranslateProvider>
);
}

现在,您的网站是基于 Next.js 确定的语言环境进行翻译的。