Лучшее решение для интернационализации (i18n) в приложениях Next.js
Хотите расширить ваше Next.js-приложение на новые рынки? TacoTranslate делает локализацию вашего Next.js проекта невероятно простой, позволяя вам охватить глобальную аудиторию без лишних хлопот.
Почему стоит выбрать TacoTranslate для Next.js?
- Бесшовная интеграция: Разработан специально для приложений Next.js, TacoTranslate без труда интегрируется в ваш существующий рабочий процесс.
- Автоматический сбор строк: Больше не нужно вручную управлять JSON-файлами. TacoTranslate автоматически собирает строки из вашей кодовой базы.
- Переводы на базе ИИ: Используйте возможности ИИ для получения контекстно точных переводов, соответствующих тону вашего приложения.
- Мгновенная поддержка языков: Добавьте поддержку новых языков одним щелчком, чтобы сделать ваше приложение доступным по всему миру.
Как это работает
По мере глобализации мира разработчикам веб‑приложений становится всё важнее создавать приложения, которые могут обслуживать пользователей из разных стран и культур. Один из ключевых способов добиться этого — интернационализация (i18n), которая позволяет адаптировать ваше приложение к разным языкам, валютам и форматам дат.
В этом руководстве мы рассмотрим, как добавить интернационализацию в ваше React Next.js приложение с серверным рендерингом. TL;DR: См. полный пример здесь.
Это руководство предназначено для приложений Next.js, использующих Pages Router.
Если вы используете App Router, вместо этого обратитесь к этому руководству.
Шаг 1: Установите библиотеку i18n
Чтобы реализовать интернационализацию в вашем приложении Next.js, сначала мы выберем библиотеку i18n. Существует несколько популярных библиотек, в том числе next-intl. Однако в этом примере мы будем использовать TacoTranslate.
TacoTranslate автоматически переводит ваши строки на любой язык с помощью передовых технологий ИИ и избавляет вас от утомительного управления JSON-файлами.
Установим его с помощью npm в вашем терминале:
npm install tacotranslate
Шаг 2: Создайте бесплатную учетную запись TacoTranslate
Теперь, когда вы установили модуль, пора создать учётную запись TacoTranslate, проект перевода и соответствующие ключи API. Создайте учётную запись здесь. Это бесплатно, и не требует добавления кредитной карты.
В интерфейсе приложения TacoTranslate создайте проект и перейдите на вкладку API-ключей. Создайте один read
ключ и один read/write
ключ. Мы сохраним их как переменные окружения. read
ключ — это то, что мы называем public
, а read/write
ключ — это secret
. Например, вы можете добавить их в файл .env
в корне вашего проекта.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Ни в коем случае не раскрывайте секретный read/write
API-ключ в клиентских производственных окружениях.
Мы также добавим ещё две переменные окружения: TACOTRANSLATE_DEFAULT_LOCALE
и TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Код локали по умолчанию. В этом примере мы установим его вen
для английского.TACOTRANSLATE_ORIGIN
: «папка», где будут храниться ваши строки, например URL вашего сайта. Подробнее об origins можно узнать здесь.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Шаг 3: Настройка TacoTranslate
Чтобы интегрировать TacoTranslate в ваше приложение, вам нужно создать клиент, используя ранее полученные API-ключи. Например, создайте файл с именем /tacotranslate-client.js
.
const {default: createTacoTranslateClient} = require('tacotranslate');
const tacoTranslate = createTacoTranslateClient({
apiKey:
process.env.TACOTRANSLATE_SECRET_API_KEY ??
process.env.TACOTRANSLATE_PUBLIC_API_KEY ??
process.env.TACOTRANSLATE_API_KEY ??
'',
projectLocale: process.env.TACOTRANSLATE_DEFAULT_LOCALE ?? '',
});
module.exports = tacoTranslate;
Мы автоматически определим TACOTRANSLATE_API_KEY
в ближайшее время.
Создание клиента в отдельном файле упрощает его повторное использование позже. Теперь, используя пользовательский /pages/_app.tsx
, мы добавим провайдер TacoTranslate
.
import React from 'react';
import {type AppProps} from 'next/app';
import {type Origin, type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import TacoTranslateHead from 'tacotranslate/next/head';
import tacoTranslate from '../tacotranslate-client';
type PageProperties = {
origin: Origin;
locale: Locale;
locales: Locale[];
localizations: Localizations;
};
export default function App({Component, pageProps}: AppProps<PageProperties>) {
const {origin, locale, locales, localizations} = pageProps;
return (
<TacoTranslate
client={tacoTranslate}
origin={origin}
locale={locale}
localizations={localizations}
>
<TacoTranslateHead rootUrl="https://your-website.com" locales={locales} />
<Component {...pageProps} />
</TacoTranslate>
);
}
Если у вас уже есть пользовательские pageProps
и _app.tsx
, пожалуйста, расширьте определение свойствами и кодом, приведёнными выше.
Шаг 4: Реализация серверного рендеринга
TacoTranslate позволяет выполнять рендеринг переводов на стороне сервера. Это существенно улучшает пользовательский опыт, поскольку переведённый контент отображается сразу, а не происходит первоначального краткого показа непереведённого содержимого. Кроме того, мы можем пропустить сетевые запросы на стороне клиента, потому что у нас уже есть все необходимые переводы.
Мы начнём с создания или изменения /next.config.js
.
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');
module.exports = async () => {
const config = {};
return withTacoTranslate(config, {
client: tacoTranslateClient,
isProduction:
process.env.TACOTRANSLATE_ENV === 'production' ||
process.env.VERCEL_ENV === 'production' ||
(!(process.env.TACOTRANSLATE_ENV || process.env.VERCEL_ENV) &&
process.env.NODE_ENV === 'production'),
});
};
Измените проверку isProduction
в соответствии с вашей настройкой. Если true
, TacoTranslate будет отображать публичный API-ключ. Если мы находимся в локальной, тестовой или staging-среде (isProduction
is false
), мы будем использовать секретный API-ключ read/write
, чтобы новые строки отправлялись на перевод.
До сих пор мы лишь настроили приложение Next.js со списком поддерживаемых языков. Следующим шагом мы получим переводы для всех ваших страниц. Для этого вы будете использовать либо getTacoTranslateStaticProps
, либо getTacoTranslateServerSideProps
в зависимости от ваших требований.
Эти функции принимают три аргумента: один объект Next.js Static Props Context, конфигурацию для TacoTranslate и необязательные свойства Next.js. Обратите внимание, что revalidate
в getTacoTranslateStaticProps
по умолчанию установлен в 60, чтобы ваши переводы оставались актуальными.
Чтобы использовать любую из функций на странице, предположим, у вас есть файл страницы, например /pages/hello-world.tsx
.
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslateClient from '../tacotranslate-client';
export async function getStaticProps(context) {
return getTacoTranslateStaticProps(context, {client: tacoTranslateClient});
}
export default function Page() {
return <Translate string="Hello, world!"/>;
}
Теперь вы можете использовать компонент Translate
для перевода строк во всех ваших React-компонентах.
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}
Шаг 5: Разверните и протестируйте!
Готово! Ваше приложение Next.js теперь будет автоматически переводиться, когда вы добавляете любые строки в компонент Translate
. Обратите внимание, что только окружения с правами read/write
на API-ключ смогут создавать новые строки для перевода. Мы рекомендуем иметь закрытое и защищённое промежуточное окружение для тестирования, где вы сможете проверить своё производственное приложение с таким API-ключом, добавляя новые строки перед выпуском. Это предотвратит кражу вашего секретного API-ключа и возможное разрастание проекта переводов за счёт добавления новых, не связанных строк.
Be sure to check out the complete example over at our GitHub profile. There, you’ll also find an example of how to do this using the App Router! If you encounter any problems, feel free to reach out, and we’ll be more than happy to help.
TacoTranslate lets you automatically localize your React applications quickly to and from over 75 languages. Get started today!