Naučte sa, ako implementovať bezproblémovú internacionalizáciu (i18n) vo vašich Next.js aplikáciách, aby ste oslovili globálne publikum. Pokrýva smerovanie, preklad obsahu a osvedčené postupy.
Internacionalizácia v Next.js: Tvorba viacjazyčných aplikácií pre globálne publikum
V dnešnom prepojenom svete už tvorba aplikácií, ktoré oslovujú globálne publikum, nie je luxusom – je to nevyhnutnosť. Next.js, výkonný framework pre React, poskytuje robustné funkcie na implementáciu internacionalizácie (i18n), ktoré vám umožnia vytvárať viacjazyčné aplikácie poskytujúce lokalizovaný zážitok používateľom na celom svete. Tento komplexný sprievodca vás prevedie základnými konceptmi, technikami a osvedčenými postupmi pri tvorbe internacionalizovaných aplikácií v Next.js.
Pochopenie internacionalizácie a lokalizácie
Predtým, ako sa ponoríme do špecifík i18n v Next.js, objasnime si kľúčové pojmy:
- Internacionalizácia (i18n): Proces navrhovania a vývoja aplikácie tak, aby ju bolo možné ľahko prispôsobiť rôznym jazykom a regiónom bez potreby technických zmien. To zahŕňa abstrakciu textu, formátovania a ďalších prvkov špecifických pre danú lokalitu.
- Lokalizácia (l10n): Proces prispôsobenia aplikácie konkrétnemu jazyku a regiónu. To zahŕňa preklad textu, úpravu formátov dátumu a času, symbolov mien a ďalšie.
V podstate i18n pripravuje vašu aplikáciu na lokalizáciu. Oddelením prvkov závislých od jazyka od základného kódu uľahčujete lokalizáciu aplikácie pre rôzne trhy.
Prečo implementovať internacionalizáciu v Next.js?
Implementácia i18n vo vašej aplikácii Next.js ponúka množstvo výhod:
- Rozšírený dosah: Oslovte širšie publikum poskytnutím obsahu v ich preferovanom jazyku.
- Zlepšený používateľský zážitok: Ponúknite personalizovanejší a pútavejší zážitok pre používateľov v rôznych regiónoch.
- Vylepšené SEO: Zlepšite optimalizáciu pre vyhľadávače (SEO) poskytovaním lokalizovaného obsahu, ktorý cieli na špecifické geografické regióny.
- Zvýšené konverzie: Zvýšte konverzie prezentovaním informácií v rodnom jazyku používateľa, čím podporíte dôveru a porozumenie.
- Globálna prítomnosť značky: Vybudujte silnejšiu globálnu prítomnosť značky demonštrovaním záväzku k inkluzivite a uspokojovaniu potrieb rôznorodého publika.
Funkcie a konfigurácia i18n v Next.js
Next.js ponúka vstavanú podporu pre i18n prostredníctvom svojich funkcií smerovania a správy obsahu. Nasleduje prehľad dôležitých funkcií:
1. Konfigurácia i18n v next.config.js
Základná konfigurácia pre i18n sa nachádza v súbore next.config.js
. Tu je príklad:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // Pole podporovaných lokalít (kódy jazykov)
defaultLocale: 'en', // Predvolená lokalita, ktorá sa má použiť
localeDetection: true, // Povolenie/zakázanie automatickej detekcie lokality na základe nastavení prehliadača (voliteľné)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
Vysvetlenie:
locales
: Pole obsahujúce kódy jazykov (napr.'en'
pre angličtinu,'es'
pre španielčinu,'fr'
pre francúzštinu) jazykov podporovaných vašou aplikáciou. Uistite sa, že pre konzistentnosť dodržiavate kódy jazykov podľa normy ISO 639-1.defaultLocale
: Predvolený jazyk, ktorý bude vaša aplikácia používať. Je to jazyk zobrazený v prípade, ak v URL nie je špecifikovaný žiadny iný jazyk alebo nie je zistený z nastavení prehliadača používateľa. Vyberte jazyk, ktorý je reprezentatívny pre vaše primárne cieľové publikum.localeDetection
: Booleovská hodnota, ktorá ovláda, či Next.js automaticky deteguje preferovaný jazyk používateľa na základe nastavení jeho prehliadača. Ak je nastavená natrue
, Next.js sa pokúsi presmerovať používateľa na príslušnú jazykovú verziu vašej stránky.domains
(voliteľné): Pole, ktoré vám umožňuje priradiť lokality ku konkrétnym doménam. Je to užitočné, ak máte samostatné domény pre rôzne jazyky (napr.example.com
pre angličtinu,example.es
pre španielčinu).
2. Smerovanie s prefixmi lokality
Next.js automaticky pridáva k cestám prefix lokality. Napríklad, ak máte stránku na /about
a lokalita je 'es' (španielčina), URL sa stane /es/about
. To umožňuje rôzne jazykové verzie stránok a umožňuje vyhľadávačom indexovať obsah pre každú lokalitu. Framework sa za vás postará o presmerovanie a smerovanie.
3. Využitie hooku useRouter
Hook useRouter
z next/router
poskytuje prístup k aktuálnej lokalite a ďalším informáciám o smerovaní.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Aktuálna lokalita: {locale}
Dostupné lokality: {locales.join(', ')}
Predvolená lokalita: {defaultLocale}
);
}
export default MyComponent;
Objekt router
ponúka nasledujúce kľúčové vlastnosti:
locale
: Aktuálne zvolená lokalita (napr. 'en', 'es', 'fr').locales
: Pole všetkých podporovaných lokalít definovaných vnext.config.js
.defaultLocale
: Predvolená lokalita nastavená vnext.config.js
.asPath
: Cesta, ako je zobrazená v prehliadači, vrátane prefixu lokality (napr./es/about
).pathname
: Cesta bez prefixu lokality (napr./about
).
Stratégie prekladu obsahu
Keď máte svoju aplikáciu Next.js nakonfigurovanú pre i18n, budete musieť implementovať stratégie na preklad vášho obsahu. Tu je niekoľko populárnych prístupov:
1. Použitie dedikovaného systému na správu prekladov (TMS)
Pre rozsiahle projekty s mnohými jazykmi sa veľmi odporúča TMS. Medzi populárne možnosti patria:
- Phrase: Cloudový TMS s integráciami pre rôzne platformy, vrátane Next.js. Ponúka funkcie pre spoluprácu a automatizované pracovné postupy.
- Localize: Ďalší cloudový TMS, ktorý podporuje širokú škálu formátov súborov a poskytuje funkcie na správu prekladov.
- Crowdin: Výkonný TMS, ktorý je veľmi populárny v open-source komunite a dobre sa integruje s Next.js, čo tímom umožňuje efektívne prekladať obsah.
Výhody:
- Centralizovaná správa prekladov.
- Funkcie pre spoluprácu prekladateľov.
- Automatizácia prekladateľských pracovných postupov.
- Integrácia s vaším vývojovým workflow.
2. Vytváranie JSON súborov s prekladmi
Pre menšie projekty je použitie JSON súborov na ukladanie prekladov jednoduchou a efektívnou metódou.
Príklad štruktúry adresárov:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
Príklad en.json
:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Príklad es.json
:
{
"greeting": "¡Hola, mundo!",
"welcomeMessage": "Bienvenido a nuestro sitio web."
}
Príklad MyComponent.js
:
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
function MyComponent() {
const { locale } = useRouter();
const t = locale === 'es' ? es : en;
return (
{t.greeting}
{t.welcomeMessage}
);
}
export default MyComponent;
Tento prístup poskytuje flexibilitu a je jednoduchý pre menšie projekty. Vo všeobecnosti je ľahké ho aktualizovať a udržiavať.
3. Použitie knižnice na preklady
Niekoľko JavaScript knižníc zjednodušuje preklad obsahu vo vašich React komponentoch.
next-i18next
: Populárna knižnica špeciálne navrhnutá pre Next.js. Dobre sa integruje s frameworkom a poskytuje funkcie ako server-side rendering (SSR) a preklad na strane klienta.react-i18next
: Všeobecná i18n knižnica pre React. Môžete ju použiť vo svojich Next.js aplikáciách, aj keď môže vyžadovať viac konfigurácie v porovnaní snext-i18next
.
Príklad s next-i18next
(Inštalácia: npm install next-i18next i18next react-i18next
):
Vytvorte konfiguračný súbor i18n (napr. i18n.js
vo vašom koreňovom adresári):
// i18n.js
import { createServerSideHelpers } from 'next-i18next'
import { i18n } from './next-i18next.config'
export function initI18next(req, res, namespaces = ['common']) {
const helpers = createServerSideHelpers(
req,
res,
i18n,
namespaces
)
return helpers
}
export { appWithTranslation } from 'next-i18next'
export { i18n }
Vytvorte svoju Next.js konfiguráciu pre next-i18next.
// next-i18next.config.js
const { i18n } = require('./next-i18next.config');
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
defaultLocale: 'en',
locales: ['en', 'es', 'fr'],
},
// ďalšia konfigurácia
}
module.exports = nextConfig
Pridajte konfiguráciu a import prekladu do vášho súboru _app.js
:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
Vytvorte priečinok a naplňte ho lokalitami pre vaše preklady.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
Príklad en/common.json:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Použitie prekladu v komponente:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
Tento príklad používa hook useTranslation
na získanie prekladov na základe aktuálnej lokality.
Spracovanie dynamických ciest a generovanie statických stránok (SSG)
Internacionalizácia sa stáva zložitejšou pri práci s dynamickými cestami (napr. blogové príspevky, produktové stránky) a generovaním statických stránok (SSG).
1. Dynamické cesty (napr. /blog/[slug])
Pre dynamické cesty budete musieť počas zostavovania generovať správne cesty pre každú lokalitu pomocou getStaticPaths
. Táto funkcia vracia pole ciest, ktoré by mal Next.js vopred vykresliť.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // Získanie dát blogových príspevkov
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // alebo 'blocking', ak chcete zobraziť stav načítavania
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Vysvetlenie:
getStaticPaths
: Táto funkcia iteruje cez vaše blogové príspevky a generuje cestu pre každý príspevok a každú lokalitu. Objektparams
obsahuje parametre cesty (napr. slug blogového príspevku).locale
: Tento parameter poskytuje aktuálnu lokalitu, čo vám umožňuje načítať preložený obsah pre konkrétnu lokalitu.fallback
: Určuje, ako Next.js spracuje cesty, ktoré nie sú definované vgetStaticPaths
.fallback: false
generuje 404 stránky pre nedefinované cesty.fallback: 'blocking'
vopred vykresľuje stránky na požiadanie.
2. Generovanie statických stránok (SSG) s getStaticProps
V getStaticProps
môžete načítať preložený obsah na základe parametra locale
.
export async function getStaticProps({ params, locale }) {
// Získanie obsahu na základe lokality a parametrov
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Funkcia getPostBySlug
by mala načítať preložený obsah pre daný slug a lokalitu, ktorý môže byť získaný z vašich prekladových súborov, databázy alebo CMS.
3. Server-Side Rendering (SSR) s getServerSideProps
Pre obsah, ktorý je potrebné načítať v čase požiadavky, použite getServerSideProps
. Je to užitočné, ak sa obsah často mení alebo je personalizovaný pre každého používateľa.
export async function getServerSideProps({ params, locale, req, res }) {
// Získanie dát na základe lokality a parametrov (napr. z databázy)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
Osvedčené postupy pre internacionalizáciu v Next.js
Dodržiavanie týchto osvedčených postupov vám pomôže vytvoriť robustné, udržiavateľné a používateľsky prívetivé viacjazyčné aplikácie:
- Plánujte včas: Zvážte internacionalizáciu od samého začiatku vášho projektu. Je oveľa jednoduchšie ju implementovať vopred, ako ju dodatočne pridávať.
- Oddeľte obsah od kódu: Všetok preložiteľný text ukladajte do samostatných súborov (napr. JSON súbory alebo TMS) a vyhnite sa pevnému kódovaniu textu priamo vo vašich komponentoch.
- Použite systém na správu prekladov (TMS): Pre väčšie projekty môže TMS zefektívniť proces prekladu a zlepšiť spoluprácu.
- Dôkladne testujte: Testujte svoju aplikáciu vo všetkých podporovaných jazykoch, aby ste zaistili presné preklady, správne formátovanie a správne vykreslenie v rôznych prehliadačoch a na rôznych zariadeniach. Testujte na reálnych zariadeniach, nielen na emulátoroch.
- Zvážte jazyky písané sprava doľava (RTL): Ak podporujete jazyky ako arabčina alebo hebrejčina, uistite sa, že váš dizajn a rozloženie podporujú smer textu sprava doľava. Next.js to automaticky nerieši, takže sú potrebné riešenia pomocou CSS alebo iných metód.
- Spracovanie formátovania dátumu a času: Používajte knižnice alebo vstavané funkcie na formátovanie dátumov a časov podľa lokality používateľa. Moment.js a date-fns sú dve populárne knižnice, ktoré sú v tomto nápomocné.
- Správa formátovania čísel a mien: Správne formátujte čísla a symboly mien na základe lokality používateľa.
- Optimalizujte SEO: Používajte meta značky špecifické pre jazyk (
hreflang
), aby ste pomohli vyhľadávačom správne indexovať váš obsah. Zahrňte kódy jazykov do vašich URL adries. - Uprednostnite používateľský zážitok: Poskytnite jasný a intuitívny spôsob, ako môžu používatelia prepínať medzi jazykmi. Zvážte ponuku automatickej detekcie jazyka na základe nastavení prehliadača.
- Buďte aktuálni: Udržujte svoju verziu Next.js a i18n knižnice aktuálne, aby ste mohli využívať najnovšie funkcie a bezpečnostné záplaty.
- Zvážte prístupnosť (a11y): Uistite sa, že váš preložený obsah je prístupný pre používateľov so zdravotným postihnutím. Poskytnite alternatívny text pre obrázky a používajte vhodné ARIA atribúty. Na testovanie použite čítačky obrazovky.
SEO aspekty pre internacionalizované webové stránky
Optimalizácia vašej internacionalizovanej webovej stránky pre vyhľadávače je nevyhnutná pre získavanie organickej návštevnosti z celého sveta. Tu sú niektoré kľúčové osvedčené postupy SEO:
- Značky
hreflang
: Implementujte značkyhreflang
v<head>
časti vášho HTML, aby ste vyhľadávačom oznámili jazykové a regionálne varianty vášho obsahu. Toto je pre SEO kľúčové. Napríklad:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
a<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- URL špecifické pre jazyk: Používajte kódy jazykov vo vašich URL adresách (napr.
/en/about
,/sk/o-nas
). To jasne indikuje jazyk obsahu používateľom aj vyhľadávačom. - Lokalizovaný obsah: Prekladajte váš obsah presne a prirodzene. Strojové preklady by mal skontrolovať rodený hovoriaci.
- Lokalizované meta popisy a titulky: Píšte jedinečné a pútavé meta popisy a titulky pre každý jazyk, aby ste zlepšili mieru prekliku vo výsledkoch vyhľadávania.
- XML mapy stránok: Vytvorte a odošlite XML mapy stránok, ktoré zahŕňajú všetky jazykové varianty vašich stránok.
- Interné prelinkovanie: Používajte vhodné interné odkazy medzi jazykovými verziami vášho obsahu.
- Výskum kľúčových slov pre konkrétnu krajinu: Vykonajte výskum kľúčových slov v každom jazyku, aby ste identifikovali výrazy, ktoré používatelia v jednotlivých regiónoch hľadajú.
Príklad: Tvorba jednoduchého viacjazyčného blogu
Vytvorme zjednodušený príklad viacjazyčného blogu pomocou Next.js. To poskytne konkrétnejšiu ilustráciu toho, ako aplikovať vyššie uvedené koncepty.
1. Nastavenie projektu
Vytvorte nový projekt Next.js:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
2. Konfigurácia i18n (next.config.js
)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
3. Vytvorenie prekladových súborov
Vytvorte priečinok locales
v koreňovom adresári a pridajte nasledujúce JSON súbory:
locales/en.json
:
{
"title": "Vitajte na mojom blogu",
"postTitle": "Môj prvý príspevok",
"postContent": "Toto je obsah môjho prvého blogového príspevku."
}
locales/es.json
:
{
"title": "Vitajte na mojom blogu",
"postTitle": "Môj prvý príspevok",
"postContent": "Toto je obsah môjho prvého blogového príspevku."
}
locales/fr.json
:
{
"title": "Vitajte na mojom blogu",
"postTitle": "Môj prvý článok",
"postContent": "Toto je obsah môjho prvého blogového článku."
}
4. Vytvorenie komponentu blogového príspevku (napr. components/BlogPost.js
)
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function BlogPost() {
const router = useRouter();
const { locale } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
{translations.postTitle}
{translations.postContent}
);
}
export default BlogPost;
5. Vytvorenie úvodnej stránky (pages/index.js
)
import { useRouter } from 'next/router';
import BlogPost from '../components/BlogPost';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function HomePage() {
const router = useRouter();
const { locale, locales } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
);
}
export default HomePage;
Tento zjednodušený príklad ukazuje základné princípy internacionalizácie v Next.js. Tento základný rámec môžete rozšíriť o zložitejšie funkcie, ako sú dynamické cesty a integrácia so systémami na správu prekladov. Zvážte vylepšenie vyššie uvedených odkazov pomocou komponentu Link
a pridanie príslušného atribútu locale
.
6. Spustenie aplikácie
Spustite aplikáciu pomocou:
npm run dev
Teraz môžete pristupovať k svojmu blogu na http://localhost:3000
(angličtina), http://localhost:3000/es
(španielčina) a http://localhost:3000/fr
(francúzština). Mali by ste vidieť titulok a obsah blogového príspevku preložený na základe zvolenej lokality.
Záver
Next.js poskytuje komplexný súbor funkcií na implementáciu internacionalizácie vo vašich webových aplikáciách. Dodržiavaním princípov a techník uvedených v tomto sprievodcovi môžete vytvárať viacjazyčné aplikácie, ktoré poskytujú lokalizované zážitky používateľom po celom svete. Nezabudnite si naplánovať stratégiu i18n včas, zvoliť správnu metódu prekladu pre vaše potreby a uprednostniť používateľský zážitok. S dôkladným plánovaním a realizáciou môžete vytvárať aplikácie, ktoré rezonujú s globálnym publikom a otvárajú nové príležitosti pre rast. Neustále vzdelávanie, sledovanie najnovších vydaní a osvedčených postupov zabezpečí, že svoje nástroje a technológie využívate efektívne.
S pokrokom technológií očakávajte, že sa objavia pokročilejšie funkcie i18n. Schopnosť osloviť používateľov naprieč rôznymi kultúrami a jazykovými skupinami zostane kľúčovou prioritou pre vývojárov aplikácií na celom svete. Preto je zvládnutie základov i18n cennou zručnosťou, ktorá zvýši vašu hodnotu na dnešnom globálnom trhu vývoja.