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>);}
ページルーター
まず、Next.js 国際化ガイドに従ってロケールを設定する。
次に、決定したロケール Next.js を MagicTranslateProvider に渡す。Magic Translate の言語コードは Next.js が使用するロケールに 1:1 で対応しないので、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 が決めたロケールに基づいて翻訳された。