Компоненты сервера React
Magic Translate полностью поддерживает компоненты React Server. Контент переводится на сервере, поэтому поисковые системы и пользователи переводят HTML без использования JavaScript на стороне клиента.
инсталляция
# using npmnpm i @magic-translate/react-ssr# using yarnyarn add @magic-translate/react-ssr# using pnpmpnpm add @magic-translate/react-ssr
Настройка
Настройте функцию перевода один раз, например в lib/translate.ts. Храните ключ API в переменной окружения.
import { setupT } from '@magic-translate/react-ssr';export const translate = setupT({apiKey: process.env.MAGIC_TRANSLATE_API_KEY!});
Если у вас еще нет ключа API, зарегистрируйтесь на Magic Translate, чтобы получить его.
Перевод серверного компонента
createLocalizedT привязывает функцию перевода к одному языку и возвращает компонент <T> и функцию t(). Он принимает значение Language или любую локаль, например de или pt-BR.
import { createLocalizedT } from '@magic-translate/react-ssr';import { translate } from '@/lib/translate';export default async function AboutPage() {const { T, t } = createLocalizedT(translate, 'de');return (<article><h1><T>About us</T></h1><img src="/team.jpg" alt={await t('Our team in Zurich')} /></article>);}
Поскольку на каждой странице используется одна и та же функция перевода, переводы пакетируются и кэшируются во всем приложении.
Для одного компонента createServerT настраивает все за один вызов. Кэшируется только в пределах этого вызова.
import { createServerT } from '@magic-translate/react-ssr';const { T } = createServerT({apiKey: process.env.MAGIC_TRANSLATE_API_KEY!,locale: 'zh'});
Компонент
<T>из React SSR работает только в компонентах React Server. В клиентских компонентах вместо этого используйте клиент React.
Выбор языка для каждого компонента
createT возвращает компонент <T>, который принимает язык как prop. Это полезно, когда язык отличается от компонента к компоненту.
import { createT, Language } from '@magic-translate/react-ssr';import { translate } from '@/lib/translate';const T = createT(translate);const Greeting = async () => <T lang={Language.ZH}>Please translate me!</T>;
Все компоненты <T> принимают те же параметры, что и клиентский компонент <T>, например formality.
Пример проекта
Пример проекта SSR можно найти на GitHub.