Tanulja meg, hogyan valósítson meg zökkenőmentes nemzetköziesítést (i18n) Next.js alkalmazásaiban a globális közönség eléréséhez. Útválasztás, tartalomfordítás és bevált gyakorlatok.
Next.js nemzetköziesítés: Többnyelvű alkalmazások készítése globális közönség számára
Napjaink összekapcsolt világában a globális közönséget kiszolgáló alkalmazások készítése már nem luxus – hanem szükségszerűség. A Next.js, egy erőteljes React keretrendszer, robusztus funkciókat kínál a nemzetköziesítés (i18n) megvalósításához, lehetővé téve, hogy olyan többnyelvű alkalmazásokat hozzon létre, amelyek lokalizált élményt nyújtanak a felhasználóknak világszerte. Ez az átfogó útmutató végigvezeti Önt a nemzetköziesített Next.js alkalmazások készítésének alapvető koncepcióin, technikáin és bevált gyakorlatain.
A nemzetköziesítés és a honosítás megértése
Mielőtt belemerülnénk a Next.js i18n sajátosságaiba, tisztázzuk a kulcsfogalmakat:
- Nemzetköziesítés (i18n): Egy alkalmazás tervezésének és fejlesztésének folyamata oly módon, hogy azt könnyen hozzá lehessen igazítani különböző nyelvekhez és régiókhoz mérnöki változtatások nélkül. Ez magában foglalja a szövegek, formázások és más, területi beállításoktól függő elemek absztrakcióját.
- Honosítás (l10n): Egy alkalmazás hozzáigazításának folyamata egy adott nyelvhez és régióhoz. Ez magában foglalja a szövegfordítást, a dátum- és időformátumok, pénznemszimbólumok és egyebek beállítását.
Lényegében az i18n készíti fel az alkalmazást a honosításra. A nyelvtől függő elemeknek a törzskódtól való elválasztásával megkönnyíti az alkalmazás honosítását a különböző piacokra.
Miért érdemes nemzetköziesítést megvalósítani a Next.js-ben?
Az i18n megvalósítása a Next.js alkalmazásban számos előnnyel jár:
- Nagyobb elérés: Érjen el szélesebb közönséget azáltal, hogy tartalmat biztosít az általuk preferált nyelven.
- Jobb felhasználói élmény: Nyújtson személyre szabottabb és lebilincselőbb élményt a különböző régiókban élő felhasználóknak.
- Javított SEO: Javítsa a keresőoptimalizálást (SEO) lokalizált tartalommal, amely meghatározott földrajzi régiókat céloz meg.
- Magasabb konverzió: Növelje a konverziókat azáltal, hogy az információkat a felhasználó anyanyelvén jeleníti meg, ezzel erősítve a bizalmat és a megértést.
- Globális márkajelenlét: Hozzon létre erősebb globális márkajelenlétet az inkluzivitás iránti elkötelezettség és a sokszínű közönség kiszolgálásának demonstrálásával.
A Next.js i18n funkciói és konfigurációja
A Next.js beépített támogatást nyújt az i18n számára az útválasztási és tartalomkezelési funkcióin keresztül. Az alábbiakban a fontos funkciók részletezése következik:
1. Az i18n konfigurálása a next.config.js fájlban
Az i18n alapkonfigurációja a next.config.js
fájlban található. Íme egy példa:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // A támogatott területi beállítások (nyelvkódok) tömbje
defaultLocale: 'en', // Az alapértelmezett területi beállítás
localeDetection: true, // A területi beállítás automatikus észlelésének engedélyezése/letiltása a böngésző beállításai alapján (opcionális)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
Magyarázat:
locales
: Egy tömb, amely az alkalmazás által támogatott nyelvek kódjait tartalmazza (pl.'en'
az angolhoz,'es'
a spanyolhoz,'fr'
a franciához). Az egységesség érdekében kövesse az ISO 639-1 nyelvi kódokat.defaultLocale
: Az alapértelmezett nyelv, amelyet az alkalmazás használni fog. Ez a nyelv jelenik meg, ha nincs más nyelv megadva az URL-ben, vagy a felhasználó böngészőbeállításaiból észlelve. Válasszon egy olyan nyelvet, amely reprezentatív az elsődleges célközönségére nézve.localeDetection
: Egy logikai érték, amely szabályozza, hogy a Next.js automatikusan észlelje-e a felhasználó preferált nyelvét a böngészőbeállításai alapján. Hatrue
értékre van állítva, a Next.js megpróbálja átirányítani a felhasználót a webhely megfelelő nyelvű verziójára.domains
(opcionális): Egy tömb, amely lehetővé teszi a területi beállítások társítását adott domainekhez. Ez akkor hasznos, ha külön domainjei vannak a különböző nyelvekhez (pl.example.com
az angolhoz,example.es
a spanyolhoz).
2. Útválasztás területi előtagokkal
A Next.js automatikusan előtaggal látja el az útvonalakat a területi beállítás alapján. Például, ha van egy oldala a /about
címen, és a területi beállítás 'es' (spanyol), az URL /es/about
lesz. Ez lehetővé teszi az oldalak különböző nyelvű verzióit, és segít a keresőmotoroknak indexelni a tartalmat minden egyes területi beállításhoz. A keretrendszer kezeli az átirányítást és az útválasztást.
3. A useRouter
hook használata
A next/router
-ből származó useRouter
hook hozzáférést biztosít az aktuális területi beállításhoz és más útválasztási információkhoz.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Jelenlegi területi beállítás: {locale}
Elérhető területi beállítások: {locales.join(', ')}
Alapértelmezett területi beállítás: {defaultLocale}
);
}
export default MyComponent;
A router
objektum a következő kulcsfontosságú tulajdonságokat kínálja:
locale
: Az aktuálisan kiválasztott területi beállítás (pl. 'en', 'es', 'fr').locales
: Anext.config.js
-ben definiált összes támogatott területi beállítás tömbje.defaultLocale
: Anext.config.js
-ben beállított alapértelmezett területi beállítás.asPath
: A böngészőben megjelenített útvonal, beleértve a területi előtagot is (pl./es/about
).pathname
: Az útvonal a területi előtag nélkül (pl./about
).
Tartalomfordítási stratégiák
Miután konfigurálta a Next.js alkalmazását az i18n-re, stratégiákat kell kidolgoznia a tartalom lefordítására. Íme néhány népszerű megközelítés:
1. Dedikált fordításkezelő rendszer (TMS) használata
Nagyobb, sok nyelvet kezelő projektekhez erősen ajánlott egy TMS használata. Népszerű lehetőségek a következők:
- Phrase: Egy felhőalapú TMS, amely integrációkat kínál különböző platformokhoz, beleértve a Next.js-t is. Együttműködési funkciókat és automatizált munkafolyamatokat kínál.
- Localize: Egy másik felhőalapú TMS, amely számos fájlformátumot támogat és fordításkezelési funkciókat biztosít.
- Crowdin: Egy hatékony TMS, amely nagyon népszerű a nyílt forráskódú közösségben, és jól integrálódik a Next.js-szel, lehetővé téve a csapatok számára a tartalom hatékony fordítását.
Előnyök:
- Központosított fordításkezelés.
- Együttműködési funkciók a fordítók számára.
- A fordítási munkafolyamatok automatizálása.
- Integráció a fejlesztési munkafolyamattal.
2. JSON fordítási fájlok létrehozása
Kisebb projektek esetén a JSON fájlok használata a fordítások tárolására egyszerű és hatékony módszer.
Példa könyvtárszerkezet:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
Példa en.json
:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Példa es.json
:
{
"greeting": "¡Hola, mundo!",
"welcomeMessage": "Bienvenido a nuestro sitio web."
}
Példa 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;
Ez a megközelítés rugalmasságot biztosít és egyszerű a kisebb projektek számára. Általában könnyen frissíthető és karbantartható.
3. Fordítási könyvtár használata
Számos JavaScript könyvtár egyszerűsíti a tartalom fordítását a React komponenseken belül.
next-i18next
: Egy népszerű könyvtár, amelyet kifejezetten a Next.js-hez terveztek. Jól integrálódik a keretrendszerrel, és olyan funkciókat biztosít, mint a szerveroldali renderelés (SSR) és az ügyféloldali fordítás.react-i18next
: Egy általános célú i18n könyvtár a React számára. Használhatja a Next.js alkalmazásaiban is, bár több konfigurációt igényelhet anext-i18next
-hez képest.
Példa next-i18next
-tel (Telepítés: npm install next-i18next i18next react-i18next
):
Hozzon létre egy i18n konfigurációs fájlt (pl. i18n.js
a gyökérkönyvtárban):
// 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 }
Hozza létre a Next.js konfigurációját a next-i18next számára.
// 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'],
},
// egyéb konfiguráció
}
module.exports = nextConfig
Adja hozzá a konfigurációt és a fordítási importot a _app.js
fájlhoz:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
Hozzon létre egy mappát, és töltse fel a fordításokhoz tartozó területi beállításokkal.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
Példa en/common.json:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
A fordítás használata egy komponensben:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
Ez a példa a useTranslation
hookot használja a fordítások lekérésére az aktuális területi beállítás alapján.
Dinamikus útvonalak és statikus oldalgenerálás (SSG) kezelése
A nemzetköziesítés bonyolultabbá válik, amikor dinamikus útvonalakkal (pl. blogbejegyzések, termékoldalak) és statikus oldalgenerálással (SSG) dolgozunk.
1. Dinamikus útvonalak (pl. /blog/[slug])
Dinamikus útvonalak esetén a buildelés során létre kell hoznia a megfelelő útvonalakat minden területi beállításhoz a getStaticPaths
segítségével. Ez a funkció egy útvonal-tömböt ad vissza, amelyet a Next.js-nek előre kell renderelnie.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // Blogbejegyzések adatainak lekérése
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // vagy 'blocking', ha betöltési állapotot szeretne megjeleníteni
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Magyarázat:
getStaticPaths
: Ez a funkció végigiterál a blogbejegyzéseken, és létrehoz egy útvonalat minden bejegyzéshez és minden területi beállításhoz. Aparams
objektum tartalmazza az útvonal paramétereit (pl. a blogbejegyzés slug-ja).locale
: Ez a paraméter megadja az aktuális területi beállítást, lehetővé téve a lefordított tartalom lekérését az adott területi beállításhoz.fallback
: Meghatározza, hogyan kezeli a Next.js agetStaticPaths
-ben nem definiált útvonalakat. Afallback: false
404-es oldalakat generál a nem definiált útvonalakhoz. Afallback: 'blocking'
igény szerint előre rendereli az oldalakat.
2. Statikus oldalgenerálás (SSG) a getStaticProps
-szal
A getStaticProps
-ban a locale
paraméter alapján kérheti le a lefordított tartalmat.
export async function getStaticProps({ params, locale }) {
// Tartalom lekérése a területi beállítás és a paraméterek alapján
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
A getPostBySlug
funkciónak le kell kérnie a lefordított tartalmat az adott slug-hoz és területi beállításhoz, amelyet a fordítási fájlokból, adatbázisból vagy egy CMS-ből lehet lekérni.
3. Szerveroldali renderelés (SSR) a getServerSideProps
-szal
A kérés időpontjában lekérdezendő tartalomhoz használja a getServerSideProps
-ot. Ez hasznos, ha a tartalom gyakran változik vagy minden felhasználó számára személyre szabott.
export async function getServerSideProps({ params, locale, req, res }) {
// Adatok lekérése a területi beállítás és a paraméterek alapján (pl. adatbázisból)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
Bevált gyakorlatok a Next.js nemzetköziesítéséhez
Ezen bevált gyakorlatok követése segít Önnek robusztus, karbantartható és felhasználóbarát többnyelvű alkalmazásokat építeni:
- Tervezzen előre: Vegye figyelembe a nemzetköziesítést a projekt kezdetétől. Sokkal könnyebb előre megvalósítani, mint később utólagosan beépíteni.
- Válassza szét a tartalmat a kódtól: Tárolja az összes lefordítható szöveget külön fájlokban (pl. JSON fájlokban vagy TMS-ben), és kerülje a szöveg közvetlen beégetését a komponensekbe.
- Használjon fordításkezelő rendszert (TMS): Nagyobb projektek esetén egy TMS egyszerűsítheti a fordítási folyamatot és javíthatja az együttműködést.
- Teszteljen alaposan: Tesztelje az alkalmazását minden támogatott nyelven, hogy biztosítsa a pontos fordításokat, a helyes formázást és a megfelelő megjelenítést a különböző böngészőkben és eszközökön. Teszteljen valódi eszközökön, ne csak emulátorokon.
- Vegye figyelembe a jobbról balra író (RTL) nyelveket: Ha támogat olyan nyelveket, mint az arab vagy a héber, gondoskodjon arról, hogy a design és az elrendezés alkalmazkodjon a jobbról balra történő írásirányhoz. A Next.js ezt nem kezeli automatikusan, így CSS vagy más megoldások szükségesek.
- Kezelje a dátum- és időformázást: Használjon könyvtárakat vagy beépített funkciókat a dátumok és időpontok formázásához a felhasználó területi beállításainak megfelelően. A Moment.js és a date-fns két népszerű és hasznos könyvtár.
- Kezelje a szám- és pénznemformázást: Formázza megfelelően a számokat és a pénznemszimbólumokat a felhasználó területi beállításai alapján.
- Optimalizálja a SEO-t: Használjon nyelvspecifikus meta tageket (
hreflang
), hogy segítse a keresőmotorokat a tartalom helyes indexelésében. Vegye fel a nyelvi kódokat az URL-jeibe. - Helyezze előtérbe a felhasználói élményt: Biztosítson egyértelmű és intuitív módot a felhasználók számára a nyelvek közötti váltásra. Fontolja meg az automatikus nyelvfelismerés felajánlását a böngésző beállításai alapján.
- Maradjon naprakész: Tartsa naprakészen a Next.js verzióját és az i18n könyvtárakat, hogy kihasználhassa a legújabb funkciókat és biztonsági javításokat.
- Vegye figyelembe a hozzáférhetőséget (a11y): Győződjön meg arról, hogy a lefordított tartalom hozzáférhető a fogyatékkal élő felhasználók számára. Adjon meg alternatív szöveget a képekhez és használjon megfelelő ARIA attribútumokat. Használjon képernyőolvasókat a teszteléshez.
SEO megfontolások a nemzetköziesített webhelyeknél
A nemzetköziesített webhely keresőmotorok számára történő optimalizálása elengedhetetlen a világ minden tájáról érkező organikus forgalom növeléséhez. Íme néhány kulcsfontosságú SEO bevált gyakorlat:
hreflang
tagek: Implementáljonhreflang
tageket a HTML<head>
szakaszában, hogy tájékoztassa a keresőmotorokat a tartalom nyelvi és regionális változatairól. Ez kritikus a SEO szempontjából. Például:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
és<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- Nyelvspecifikus URL-ek: Használjon nyelvi kódokat az URL-ekben (pl.
/en/about
,/es/acerca-de
). Ez egyértelműen jelzi a tartalom nyelvét mind a felhasználók, mind a keresőmotorok számára. - Lokalizált tartalom: Fordítsa le a tartalmat pontosan és természetesen. A gépi fordításokat egy anyanyelvi beszélőnek kell felülvizsgálnia.
- Lokalizált meta leírások és címek: Írjon egyedi és meggyőző meta leírásokat és címeket minden nyelvhez, hogy javítsa az átkattintási arányt a keresési eredményekben.
- XML oldaltérképek: Hozzon létre és küldjön be XML oldaltérképeket, amelyek tartalmazzák az oldalak összes nyelvi változatát.
- Belső linkelés: Használjon megfelelő belső linkeket a tartalom nyelvi verziói között.
- Országspecifikus kulcsszókutatás: Végezzen kulcsszókutatást minden nyelven, hogy azonosítsa azokat a kifejezéseket, amelyeket a felhasználók az egyes régiókban keresnek.
Példa: Egy egyszerű többnyelvű blog készítése
Készítsünk egy egyszerűsített példát egy többnyelvű blogra a Next.js segítségével. Ez egy konkrétabb illusztrációt nyújt arról, hogyan alkalmazzuk a fent tárgyalt koncepciókat.
1. Projekt beállítása
Hozzon létre egy új Next.js projektet:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
2. i18n konfigurálása (next.config.js
)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
3. Fordítási fájlok létrehozása
Hozzon létre egy locales
mappát a gyökérkönyvtárban, és adja hozzá a következő JSON fájlokat:
locales/en.json
:
{
"title": "Welcome to My Blog",
"postTitle": "My First Post",
"postContent": "This is the content of my first blog post."
}
locales/es.json
:
{
"title": "Bienvenido a mi Blog",
"postTitle": "Mi Primer Post",
"postContent": "Este es el contenido de mi primer publicación de blog."
}
locales/fr.json
:
{
"title": "Bienvenue sur Mon Blog",
"postTitle": "Mon Premier Article",
"postContent": "Ceci est le contenu de mon premier article de blog."
}
4. A blogbejegyzés komponens létrehozása (pl. 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. A főoldal létrehozása (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;
Ez az egyszerűsített példa bemutatja a Next.js nemzetköziesítés alapelveit. Ezt az alapkeretet bővítheti bonyolultabb funkciókkal, mint például a dinamikus útvonalak és a fordításkezelő rendszerekkel való integráció. Fontolja meg a fenti linkek javítását a Link
komponenssel és a megfelelő locale
attribútum hozzáadását.
6. Az alkalmazás futtatása
Futtassa az alkalmazást a következővel:
npm run dev
Most már elérheti a blogját a http://localhost:3000
(angol), http://localhost:3000/es
(spanyol) és http://localhost:3000/fr
(francia) címeken. Látnia kell a címet és a blogbejegyzés tartalmát a kiválasztott területi beállításnak megfelelően lefordítva.
Konklúzió
A Next.js átfogó funkciókészletet biztosít a nemzetköziesítés megvalósításához webalkalmazásaiban. Az ebben az útmutatóban felvázolt elvek és technikák követésével olyan többnyelvű alkalmazásokat hozhat létre, amelyek lokalizált élményt nyújtanak a felhasználóknak szerte a világon. Ne felejtse el korán megtervezni az i18n stratégiáját, válassza ki az igényeinek megfelelő fordítási módszert, és helyezze előtérbe a felhasználói élményt. Gondos tervezéssel és kivitelezéssel olyan alkalmazásokat építhet, amelyek rezonálnak a globális közönséggel és új növekedési lehetőségeket nyitnak meg. A folyamatos tanulás, a legújabb kiadásokkal és bevált gyakorlatokkal való lépéstartás biztosítja, hogy hatékonyan használja eszközeit és technológiáit.
Ahogy a technológia fejlődik, számíthatunk még fejlettebb i18n funkciók megjelenésére. A különböző kultúrájú és nyelvi csoportokhoz tartozó felhasználók elérésének képessége továbbra is kulcsfontosságú prioritás marad az alkalmazásfejlesztők számára világszerte. Ezért az i18n alapjainak elsajátítása értékes készség, amely növeli az Ön értékét a mai globális fejlesztési környezetben.