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>);}
페이지 제목과 설명이 번역 기능으로 번역돼.
인터랙티브 메뉴처럼 번역이 필요한 클라이언트 컴포넌트는 리액트 클라이언트를 사용할 수 있어.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 결정 로케일에 따라 번역됐어.