TacoTranslate
/
ДокументацияЦени
 
Ръководство
4 май

Как да внедрите интернационализация в Next.js приложение, което използва Pages Router

Направете вашето React приложение по-достъпно и достигнете до нови пазари чрез интернационализация (i18n).

С нарастващата глобализация става все по-важно за уеб разработчиците да изграждат приложения, които да обслужват потребители от различни държави и култури. Един от ключовите начини за постигане на това е чрез интернационализация (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 в корена на вашия проект.

.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 тук.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Стъпка 3: Настройване на TacoTranslate

За да интегрирате TacoTranslate във вашето приложение, ще трябва да създадете клиент, използвайки API ключовете от по-рано. Например, създайте файл с име /tacotranslate-client.js.

/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.

/pages/_app.tsx
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.

/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 ключ. Ако сме в локална, тестова или стейджинг среда (isProduction is false), ще използваме секретния read/write API ключ, за да сме сигурни, че новите низове ще бъдат изпратени за превод.

Досега сме конфигурирали приложението Next.js само със списък на поддържаните езици. Следващото, което ще направим, е да извлечем преводите за всички ваши страници. За да направите това, ще използвате или getTacoTranslateStaticProps или getTacoTranslateServerSideProps в зависимост от вашите изисквания.

Тези функции приемат три аргумента: един Next.js Static Props Context обект, конфигурация за TacoTranslate и незадължителни Next.js свойства. Обърнете внимание, че revalidate на getTacoTranslateStaticProps е зададено на 60 по подразбиране, така че вашите преводи да останат актуални.

За да използвате някоя от функциите в страница, да приемем, че имате файл на страница като /pages/hello-world.tsx.

/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: Разгръщане и тестване!

Готови сме! Вашето React приложение вече ще бъде автоматично превеждано, когато добавите низове в компонент Translate. Обърнете внимание, че само среди с разрешения read/write за API ключа ще могат да създават нови низове за превод. Препоръчваме да имате затворена и защитена staging среда, където да тествате продукционното си приложение с такъв API ключ, като добавяте нови низове преди публикуване. Това ще попречи на някого да открадне вашия таен API ключ и потенциално да раздуе проекта ви за превод чрез добавяне на нови, несвързани низове.

Не забравяйте да разгледате пълния пример в нашия GitHub профил. Там ще намерите и пример как да направите това, използвайки App Router! Ако срещнете някакви проблеми, не се колебайте да се свържете с нас, ще се радваме да помогнем.

TacoTranslate ви позволява автоматично да локализирате вашите React приложения бързо от и към над 75 езика. Започнете още днес!

Продукт от NattskiftetПроизведено в Норвегия