Jak implementovat internacionalizaci v aplikaci Next.js, která používá App Router
Zpřístupněte svou aplikaci React širšímu publiku a oslovte nové trhy pomocí internacionalizace (i18n).
Jak se svět stává více globalizovaným, je pro webové vývojáře stále důležitější vytvářet aplikace, které dokážou vyhovět uživatelům z různých zemí a kultur. Jedním z klíčových způsobů, jak toho dosáhnout, je internacionalizace (i18n), která vám umožňuje přizpůsobit aplikaci různým jazykům, měnám a formátům dat.
V tomto článku si ukážeme, jak přidat internacionalizaci do vaší React Next.js aplikace se server-side renderingem. TL;DR: Kompletní příklad najdete zde.
Tato příručka je určena pro aplikace Next.js, které používají App Router.
Pokud používáte Pages Router, podívejte se místo toho na tuto příručku.
Krok 1: Nainstalujte knihovnu i18n
Pro implementaci internacionalizace ve vaší aplikaci Next.js si nejdříve vybereme knihovnu i18n. Existuje několik populárních knihoven, včetně next-intl. V tomto příkladu však použijeme TacoTranslate.
TacoTranslate automaticky překládá vaše řetězce do libovolného jazyka pomocí nejmodernější AI a osvobozuje vás od únavné správy JSON souborů.
Nainstalujme ho pomocí npm ve vašem terminálu:
npm install tacotranslate
Krok 2: Vytvořte si bezplatný účet TacoTranslate
Nyní, když máte modul nainstalovaný, je čas vytvořit si účet TacoTranslate, překladatelský projekt a související API klíče. Vytvořte si účet zde. Je to zdarma a nevyžaduje zadání kreditní karty.
V uživatelském rozhraní aplikace TacoTranslate vytvořte projekt a přejděte na záložku s API klíči. Vytvořte jeden read
klíč a jeden read/write
klíč. Uložíme je jako proměnné prostředí. read
klíč nazýváme public
a read/write
klíč je secret
. Například je můžete přidat do souboru .env
v kořenovém adresáři vašeho projektu.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Ujistěte se, že nikdy neprozradíte tajný read/write
API klíč v produkčním prostředí na straně klienta.
Přidáme také další dvě proměnné prostředí: TACOTRANSLATE_DEFAULT_LOCALE
a TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Výchozí kód výchozího jazyka. V tomto příkladu ho nastavíme naen
pro angličtinu.TACOTRANSLATE_ORIGIN
: „Složka“, kde budou uloženy vaše řetězce, například URL vašeho webu. Přečtěte si více o origins zde.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Krok 3: Nastavení TacoTranslate
Pro integraci TacoTranslate s vaší aplikací budete muset vytvořit klienta pomocí API klíčů z předchozího kroku. Například vytvořte soubor pojmenovaný /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_IS_PRODUCTION === 'true'
? process.env.TACOTRANSLATE_PROJECT_LOCALE
: undefined,
});
module.exports = tacoTranslate;
Brzy automaticky nadefinujeme TACOTRANSLATE_API_KEY
a TACOTRANSLATE_PROJECT_LOCALE
.
Vytvoření klienta v samostatném souboru usnadňuje jeho opětovné použití později. getLocales
je jen užitečná funkce s integrovanou obsluhou chyb. Nyní vytvořte soubor s názvem /app/[locale]/tacotranslate.tsx
, kde implementujeme poskytovatele TacoTranslate
.
'use client';
import React, {type ReactNode} from 'react';
import {
type TranslationContextProperties,
TacoTranslate as ImportedTacoTranslate,
} from 'tacotranslate/react';
import tacoTranslateClient from '@/tacotranslate-client';
export default function TacoTranslate({
locale,
origin,
localizations,
children,
}: TranslationContextProperties & {
readonly children: ReactNode;
}) {
return (
<ImportedTacoTranslate
client={tacoTranslateClient}
locale={locale}
origin={origin}
localizations={localizations}
>
{children}
</ImportedTacoTranslate>
);
}
Všimněte si 'use client';
, což znamená, že se jedná o klientskou komponentu.
S připraveným poskytovatelem kontextu nyní vytvořte soubor s názvem /app/[locale]/layout.tsx
, což je kořenové rozvržení v naší aplikaci. Všimněte si, že tato cesta obsahuje složku využívající Dynamic Routes, kde [locale]
je dynamický parametr.
import React, {type ReactNode} from 'react';
import {type Locale, isRightToLeftLocaleCode} from 'tacotranslate';
import './global.css';
import tacoTranslateClient from '@/tacotranslate-client';
import TacoTranslate from './tacotranslate';
export async function generateStaticParams() {
const locales = await tacoTranslateClient.getLocales();
return locales.map((locale) => ({locale}));
}
type RootLayoutParameters = {
readonly params: Promise<{locale: Locale}>;
readonly children: ReactNode;
};
export default async function RootLayout({params, children}: RootLayoutParameters) {
const {locale} = await params;
const origin = process.env.TACOTRANSLATE_ORIGIN;
const localizations = await tacoTranslateClient.getLocalizations({
locale,
origins: [origin /* , other origins to fetch */],
});
return (
<html lang={locale} dir={isRightToLeftLocaleCode(locale) ? 'rtl' : 'ltr'}>
<body>
<TacoTranslate
locale={locale}
origin={origin}
localizations={localizations}
>
{children}
</TacoTranslate>
</body>
</html>
);
}
První věc, kterou je třeba zde poznamenat, je, že používáme náš parametr Dynamic Route
[locale]
k načtení překladů pro daný jazyk. Navíc generateStaticParams
zajišťuje, že všechny lokální kódy aktivované pro váš projekt jsou předvyrobené.
Teď si vytvoříme naši první stránku! Vytvořte soubor s názvem /app/[locale]/page.tsx
.
import React from 'react';
import {Translate} from 'tacotranslate/react';
export const revalidate = 60;
export default async function Page() {
return (
<Translate string="Hello, world!" />
);
}
Všimněte si proměnné revalidate
, která říká Next.js, aby stránku po 60 sekundách znovu sestavil a udržoval vaše překlady aktuální.
Krok 4: Implementace server-side renderování
TacoTranslate podporuje server-side rendering. To výrazně zlepšuje uživatelský zážitek tím, že okamžitě zobrazí přeložený obsah místo nejprve záblesku nepřeloženého obsahu. Navíc můžeme na klientovi vynechat síťové požadavky, protože už máme překlady, které potřebujeme pro stránku, kterou uživatel právě prohlíží.
Pro nastavení server-side renderingu vytvořte nebo upravte /next.config.js
:
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');
module.exports = async () => {
const config = await withTacoTranslate(
{},
{
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'),
}
);
// NOTE: Remove i18n from config when using the app router
return {...config, i18n: undefined};
};
Upravte kontrolu isProduction
tak, aby vyhovovala vašemu nastavení. Pokud je true
, TacoTranslate zobrazí veřejný API klíč. Pokud jsme v lokálním, testovacím, nebo staging prostředí (isProduction
is false
), použijeme tajný read/write
API klíč, aby bylo zajištěno, že nové řetězce budou odeslány k překladu.
Aby směrování a přesměrování fungovalo podle očekávání, budeme muset vytvořit soubor s názvem /middleware.ts
. Použitím Middleware můžeme uživatele přesměrovat na stránky prezentované v jejich preferovaném jazyce.
import {type NextRequest} from 'next/server';
import {middleware as tacoTranslateMiddleware} from 'tacotranslate/next';
import tacoTranslate from '@/tacotranslate-client';
export const config = {
matcher: ['/((?!api|_next|favicon.ico).*)'],
};
export async function middleware(request: NextRequest) {
return tacoTranslateMiddleware(tacoTranslate, request);
}
Ujistěte se, že nastavíte matcher
v souladu s dokumentací Next.js Middleware.
Na klientovi můžete změnit cookie locale
, abyste změnili preferovaný jazyk uživatele. Pro inspiraci, jak to udělat, si prosím prohlédněte kompletní příkladový kód!
Krok 5: Nasadit a otestovat!
Jsme hotovi! Vaše React aplikace bude nyní automaticky přeložena, když přidáte jakýkoliv text do komponenty Translate
. Všimněte si, že pouze prostředí s oprávněními read/write
na API klíči budou schopna vytvářet nové texty k překladu. Doporučujeme mít uzavřené a zabezpečené stagingové prostředí, kde můžete testovat svou produkční aplikaci s takovým API klíčem, přidávat nové texty před uvedením do provozu. To zabrání komukoli ukrást váš tajný API klíč a potenciálně rozbujnět váš překladatelský projekt přidáváním nových, nesouvisejících textů.
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 Pages 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!