Naučite se implementirati brezhibno internacionalizacijo (i18n) v aplikacije Next.js za doseganje globalnega občinstva. Pokriva usmerjanje, prevajanje vsebine in najboljše prakse.
Internacionalizacija v Next.js: Gradnja večjezičnih aplikacij za globalno občinstvo
V današnjem povezanem svetu gradnja aplikacij, ki so namenjene globalnemu občinstvu, ni več razkošje – je nuja. Next.js, močan ogrodje za React, ponuja robustne funkcije za implementacijo internacionalizacije (i18n), kar vam omogoča ustvarjanje večjezičnih aplikacij, ki zagotavljajo lokalizirano izkušnjo uporabnikom po vsem svetu. Ta celovit vodnik vas bo popeljal skozi bistvene koncepte, tehnike in najboljše prakse za gradnjo internacionaliziranih aplikacij Next.js.
Razumevanje internacionalizacije in lokalizacije
Preden se poglobimo v posebnosti i18n v Next.js, pojasnimo ključne pojme:
- Internacionalizacija (i18n): Postopek oblikovanja in razvoja aplikacije tako, da jo je mogoče enostavno prilagoditi različnim jezikom in regijam brez inženirskih sprememb. To vključuje abstrahiranje besedila, oblikovanja in drugih elementov, specifičnih za lokalizacijo.
- Lokalizacija (l10n): Postopek prilagajanja aplikacije določenemu jeziku in regiji. To vključuje prevajanje besedila, prilagajanje formatov datumov in časov, simbolov valut in še več.
V bistvu i18n pripravi vašo aplikacijo za lokalizacijo. Z ločevanjem jezikovno odvisnih elementov od jedrne kode olajšate lokalizacijo aplikacije za različne trge.
Zakaj implementirati internacionalizacijo v Next.js?
Implementacija i18n v vaši aplikaciji Next.js ponuja številne prednosti:
- Razširjen doseg: Dosežite širše občinstvo z zagotavljanjem vsebine v njihovem želenem jeziku.
- Izboljšana uporabniška izkušnja: Ponudite bolj personalizirano in privlačno izkušnjo za uporabnike v različnih regijah.
- Izboljšan SEO: Izboljšajte optimizacijo za iskalnike (SEO) z zagotavljanjem lokalizirane vsebine, ki cilja na določene geografske regije.
- Povečane konverzije: Povečajte konverzije s predstavitvijo informacij v maternem jeziku uporabnika, kar spodbuja zaupanje in razumevanje.
- Globalna prisotnost blagovne znamke: Vzpostavite močnejšo globalno prisotnost blagovne znamke z dokazovanjem zavezanosti vključenosti in prilagajanju raznolikim občinstvom.
Funkcije in konfiguracija i18n v Next.js
Next.js ponuja vgrajeno podporo za i18n prek svojih funkcij za usmerjanje in upravljanje vsebine. Sledi razčlenitev pomembnih funkcij:
1. Konfiguracija i18n v datoteki next.config.js
Osnovna konfiguracija za i18n se nahaja v datoteki next.config.js
. Tukaj je primer:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // Seznam podprtih lokalizacij (kode jezikov)
defaultLocale: 'en', // Privzeta lokalizacija za uporabo
localeDetection: true, // Omogoči/onemogoči samodejno zaznavanje lokalizacije na podlagi nastavitev brskalnika (izbirno)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
Pojasnilo:
locales
: Seznam, ki vsebuje kode jezikov (npr.'en'
za angleščino,'es'
za španščino,'fr'
za francoščino), ki jih vaša aplikacija podpira. Za doslednost sledite kodam jezikov ISO 639-1.defaultLocale
: Privzeti jezik, ki ga bo uporabljala vaša aplikacija. To je jezik, ki se prikaže, če v URL-ju ni določen noben drug jezik ali če ni zaznan iz nastavitev brskalnika uporabnika. Izberite jezik, ki je reprezentativen za vaše primarno ciljno občinstvo.localeDetection
: Booleova vrednost, ki nadzoruje, ali Next.js samodejno zazna želeni jezik uporabnika na podlagi nastavitev brskalnika. Če je nastavljena natrue
, bo Next.js poskušal preusmeriti uporabnika na ustrezno jezikovno različico vaše spletne strani.domains
(izbirno): Seznam, ki vam omogoča povezovanje lokalizacij z določenimi domenami. To je uporabno, če imate ločene domene za različne jezike (npr.example.com
za angleščino,example.es
za španščino).
2. Usmerjanje s predponami lokalizacije
Next.js samodejno doda predpone potem glede na lokalizacijo. Na primer, če imate stran na /about
in je lokalizacija 'es' (španščina), bo URL postal /es/about
. To omogoča različne jezikovne različice strani in iskalnikom omogoča indeksiranje vsebine za vsako lokalizacijo. Ogrodje samo poskrbi za preusmerjanje in usmerjanje.
3. Uporaba kaveljčka useRouter
Kaveljček useRouter
iz next/router
omogoča dostop do trenutne lokalizacije in drugih informacij o usmerjanju.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Trenutna lokalizacija: {locale}
Razpoložljive lokalizacije: {locales.join(', ')}
Privzeta lokalizacija: {defaultLocale}
);
}
export default MyComponent;
Objekt router
ponuja naslednje ključne lastnosti:
locale
: Trenutno izbrana lokalizacija (npr. 'en', 'es', 'fr').locales
: Seznam vseh podprtih lokalizacij, določenih vnext.config.js
.defaultLocale
: Privzeta lokalizacija, nastavljena vnext.config.js
.asPath
: Pot, kot je prikazana v brskalniku, vključno s predpono lokalizacije (npr./es/about
).pathname
: Pot brez predpone lokalizacije (npr./about
).
Strategije prevajanja vsebine
Ko ste konfigurirali vašo aplikacijo Next.js za i18n, boste morali implementirati strategije za prevajanje vaše vsebine. Tukaj je nekaj priljubljenih pristopov:
1. Uporaba namenskega sistema za upravljanje prevodov (TMS)
Za velike projekte z veliko jeziki je TMS zelo priporočljiv. Priljubljene možnosti vključujejo:
- Phrase: TMS v oblaku z integracijami za različne platforme, vključno z Next.js. Ponuja funkcije za sodelovanje in avtomatizirane delovne tokove.
- Localize: Še en TMS v oblaku, ki podpira širok nabor formatov datotek in ponuja funkcije za upravljanje prevodov.
- Crowdin: Močan TMS, ki je zelo priljubljen v odprtokodni skupnosti in se dobro integrira z Next.js, kar ekipam omogoča učinkovito prevajanje vsebine.
Prednosti:
- Centralizirano upravljanje prevodov.
- Funkcije za sodelovanje za prevajalce.
- Avtomatizacija prevajalskih delovnih tokov.
- Integracija z vašim razvojnim delovnim tokom.
2. Ustvarjanje prevajalskih datotek JSON
Za manjše projekte je uporaba datotek JSON za shranjevanje prevodov preprosta in učinkovita metoda.
Primer strukture map:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
Primer en.json
:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Primer es.json
:
{
"greeting": "¡Hola, mundo!",
"welcomeMessage": "Bienvenido a nuestro sitio web."
}
Primer 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;
Ta pristop zagotavlja prilagodljivost in je enostaven za manjše projekte. Na splošno je enostaven za posodabljanje in vzdrževanje.
3. Uporaba prevajalske knjižnice
Več knjižnic JavaScript poenostavi prevajanje vsebine znotraj vaših komponent React.
next-i18next
: Priljubljena knjižnica, posebej zasnovana za Next.js. Dobro se integrira z ogrodjem in ponuja funkcije, kot so strežniško upodabljanje (SSR) in prevajanje na strani odjemalca.react-i18next
: Splošna i18n knjižnica za React. Uporabite jo lahko v svojih aplikacijah Next.js, čeprav bo morda potrebovala več konfiguracije v primerjavi znext-i18next
.
Primer z next-i18next
(Namestitev: npm install next-i18next i18next react-i18next
):
Ustvarite konfiguracijsko datoteko i18n (npr. i18n.js
v vaši korenski mapi):
// 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 }
Ustvarite svojo konfiguracijo Next.js za 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'],
},
// druga konfiguracija
}
module.exports = nextConfig
Dodajte konfiguracijo in uvoz prevoda v svojo datoteko _app.js
:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
Ustvarite mapo in jo napolnite z lokalizacijami za vaše prevode.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
Primer en/common.json:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Uporaba prevoda v komponenti:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
Ta primer uporablja kaveljček useTranslation
za pridobivanje prevodov na podlagi trenutne lokalizacije.
Obravnavanje dinamičnih poti in statičnega generiranja strani (SSG)
Internacionalizacija postane bolj zapletena pri obravnavanju dinamičnih poti (npr. objave na blogu, strani izdelkov) in statičnega generiranja strani (SSG).
1. Dinamične poti (npr. /blog/[slug])
Za dinamične poti boste morali generirati pravilne poti za vsako lokalizacijo med časom gradnje z uporabo getStaticPaths
. Ta funkcija vrne seznam poti, ki jih mora Next.js predhodno upodobiti.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // Pridobi podatke o objavah na blogu
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // ali 'blocking', če želite prikazati stanje nalaganja
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Pojasnilo:
getStaticPaths
: Ta funkcija iterira skozi vaše objave na blogu in generira pot za vsako objavo in vsako lokalizacijo. Objektparams
vsebuje parametre poti (npr. slug objave na blogu).locale
: Ta parameter določa trenutno lokalizacijo, kar vam omogoča, da pridobite prevedeno vsebino za določeno lokalizacijo.fallback
: Določa, kako Next.js obravnava poti, ki niso definirane vgetStaticPaths
.fallback: false
generira strani 404 za nedefinirane poti.fallback: 'blocking'
predhodno upodobi strani na zahtevo.
2. Statično generiranje strani (SSG) z getStaticProps
V getStaticProps
lahko pridobite prevedeno vsebino na podlagi parametra locale
.
export async function getStaticProps({ params, locale }) {
// Pridobi vsebino na podlagi lokalizacije in parametrov
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Funkcija getPostBySlug
bi morala pridobiti prevedeno vsebino za dani slug in lokalizacijo, ki jo je mogoče pridobiti iz vaših prevajalskih datotek, baze podatkov ali CMS-a.
3. Strežniško upodabljanje (SSR) z getServerSideProps
Za vsebino, ki jo je treba pridobiti ob času zahteve, uporabite getServerSideProps
. To je uporabno, če se vsebina pogosto spreminja ali je personalizirana za vsakega uporabnika.
export async function getServerSideProps({ params, locale, req, res }) {
// Pridobi podatke na podlagi lokalizacije in parametrov (npr. iz baze podatkov)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
Najboljše prakse za internacionalizacijo v Next.js
Upoštevanje teh najboljših praks vam bo pomagalo zgraditi robustne, vzdržljive in uporabniku prijazne večjezične aplikacije:
- Načrtujte zgodaj: Razmislite o internacionalizaciji že na začetku vašega projekta. Veliko lažje jo je implementirati vnaprej kot pa jo naknadno dodajati.
- Ločite vsebino od kode: Vso prevedljivo besedilo shranite v ločene datoteke (npr. datoteke JSON ali TMS) in se izogibajte trdemu kodiranju besedila neposredno v vaše komponente.
- Uporabite sistem za upravljanje prevodov (TMS): Za večje projekte lahko TMS poenostavi postopek prevajanja in izboljša sodelovanje.
- Temeljito testirajte: Testirajte svojo aplikacijo v vseh podprtih jezikih, da zagotovite natančne prevode, pravilno oblikovanje in pravilno upodabljanje v različnih brskalnikih in napravah. Testirajte na pravih napravah, ne samo na emulatorjih.
- Upoštevajte jezike, ki se pišejo od desne proti levi (RTL): Če podpirate jezike, kot sta arabščina ali hebrejščina, zagotovite, da vaša zasnova in postavitev podpirata smer besedila od desne proti levi. Next.js tega ne obravnava samodejno, zato so potrebni CSS ali druge rešitve.
- Obravnavajte oblikovanje datumov in časov: Uporabite knjižnice ali vgrajene funkcije za oblikovanje datumov in časov glede na lokalizacijo uporabnika. Moment.js in date-fns sta dve priljubljeni knjižnici, ki sta pri tem v pomoč.
- Upravljajte oblikovanje številk in valut: Pravilno oblikujte številke in simbole valut glede na lokalizacijo uporabnika.
- Optimizirajte SEO: Uporabite jezikovno specifične meta oznake (
hreflang
), da pomagate iskalnikom pravilno indeksirati vašo vsebino. Vključite kode jezikov v svoje URL-je. - Dajte prednost uporabniški izkušnji: Zagotovite jasen in intuitiven način za preklapljanje med jeziki. Razmislite o ponudbi samodejnega zaznavanja jezika na podlagi nastavitev brskalnika.
- Ostanite posodobljeni: Ohranite svojo različico Next.js in i18n knjižnice posodobljene, da boste imeli koristi od najnovejših funkcij in varnostnih popravkov.
- Upoštevajte dostopnost (a11y): Zagotovite, da je vaša prevedena vsebina dostopna uporabnikom s posebnimi potrebami. Zagotovite alternativno besedilo za slike in uporabite ustrezne atribute ARIA. Uporabite bralnike zaslona za testiranje.
SEO premisleki za internacionalizirane spletne strani
Optimizacija vaše internacionalizirane spletne strani za iskalnike je ključna za pridobivanje organskega prometa z vsega sveta. Tukaj je nekaj ključnih SEO najboljših praks:
- Oznake
hreflang
: Implementirajte oznakehreflang
v<head>
vašega HTML-ja, da iskalnikom poveste o jezikovnih in regionalnih različicah vaše vsebine. To je ključno za SEO. Na primer:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
in<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- Jezikovno specifični URL-ji: Uporabite kode jezikov v svojih URL-jih (npr.
/en/about
,/es/acerca-de
). To jasno kaže jezik vsebine tako uporabnikom kot iskalnikom. - Lokalizirana vsebina: Prevedite svojo vsebino natančno in naravno. Strojne prevode naj pregleda naravni govorec.
- Lokalizirani meta opisi in naslovi: Napišite edinstvene in prepričljive meta opise in naslove za vsak jezik, da izboljšate stopnjo klikov v rezultatih iskanja.
- XML zemljevidi strani: Ustvarite in oddajte XML zemljevide strani, ki vključujejo vse jezikovne različice vaših strani.
- Notranje povezovanje: Uporabite ustrezne notranje povezave med jezikovnimi različicami vaše vsebine.
- Raziskava ključnih besed za posamezne države: Izvedite raziskavo ključnih besed v vsakem jeziku, da ugotovite izraze, ki jih uporabniki iščejo v posamezni regiji.
Primer: Gradnja preprostega večjezičnega bloga
Ustvarimo poenostavljen primer večjezičnega bloga z uporabo Next.js. To bo zagotovilo bolj konkreten prikaz, kako uporabiti zgoraj obravnavane koncepte.
1. Nastavitev projekta
Ustvarite nov projekt Next.js:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
2. Konfiguracija i18n (next.config.js
)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
3. Ustvarjanje prevajalskih datotek
Ustvarite mapo locales
v korenski mapi in dodajte naslednje datoteke JSON:
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. Ustvarjanje komponente za objavo na blogu (npr. 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. Ustvarjanje vstopne strani (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;
Ta poenostavljen primer prikazuje temeljna načela internacionalizacije v Next.js. Ta osnovni okvir lahko razširite z bolj zapletenimi funkcijami, kot so dinamične poti in integracija s sistemi za upravljanje prevodov. Razmislite o izboljšanju zgornjih povezav s komponento Link
in dodajte ustrezen atribut locale
.
6. Zagon aplikacije
Zaženite aplikacijo z:
npm run dev
Zdaj lahko dostopate do svojega bloga na http://localhost:3000
(angleščina), http://localhost:3000/es
(španščina) in http://localhost:3000/fr
(francoščina). Videti bi morali, da sta naslov in vsebina objave na blogu prevedena glede na izbrano lokalizacijo.
Zaključek
Next.js ponuja celovit nabor funkcij za implementacijo internacionalizacije v vaših spletnih aplikacijah. Z upoštevanjem načel in tehnik, opisanih v tem vodniku, lahko ustvarite večjezične aplikacije, ki zagotavljajo lokalizirane izkušnje uporabnikom po vsem svetu. Ne pozabite zgodaj načrtovati svoje strategije i18n, izbrati pravo metodo prevajanja za svoje potrebe in dati prednost uporabniški izkušnji. S skrbnim načrtovanjem in izvedbo lahko zgradite aplikacije, ki odmevajo pri globalnem občinstvu in odpirajo nove priložnosti za rast. Nenehno učenje, spremljanje najnovejših izdaj in najboljših praks bo zagotovilo, da boste učinkovito uporabljali svoja orodja in tehnologije.
Z napredkom tehnologije lahko pričakujemo pojav še naprednejših funkcij i18n. Zmožnost doseganja uporabnikov v različnih kulturah in jezikovnih skupinah bo ostala ključna prednostna naloga za razvijalce aplikacij po vsem svetu. Zato je obvladovanje osnov i18n dragocena veščina, ki bo povečala vašo vrednost na današnjem globalnem razvojnem prizorišču.