Next.js
Magic Translate 适用于 Next.js 的两台路由器。使用 App Router,页面可以在服务器上进行翻译,因此每种语言都有自己的完全翻译过的 HTML 供搜索引擎使用。
应用程序路由器
将您的页面放在 [locale] 区段下,并列出您想要提供的语言。
// app/[locale]/layout.tsxconst 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.tsximport { 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 (<MagicTranslateProviderapiKey={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.tsximport 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 (<MagicTranslateProviderapiKey="<your-api-key>"language={utsLocaleToLanguage(locale)}><Component {...pageProps} /></MagicTranslateProvider>);}
现在,您的网站是基于 Next.js 确定的语言环境进行翻译的。