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 автоматично превежда вашите низове на който и да е език, използвайки модерна AI технология, и ви освобождава от досадното управление на JSON файлове.

Нека го инсталираме с помощта на npm във вашия терминал:

npm install tacotranslate

Стъпка 2: Създайте безплатен акаунт в TacoTranslate

Сега, когато имате инсталиран модулa, е време да създадете своя акаунт в 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), ще използваме секретния API ключ с права за четене/писане read/write, за да гарантираме, че новите низове се изпращат за превод.

До момента сме конфигурирали 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 ключа ще имат възможност да създават нови низове за превод. Препоръчваме да имате затворена и защитена тестова среда, в която да тествате вашето продукционно приложение с такъв API ключ, като добавяте нови низове преди пускането в експлоатация. Това ще предотврати кражбата на вашия таен API ключ и потенциалното надуване на проекта за превод чрез добавянето на нови, несвързани низове.

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

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

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