Sužinokite, kaip įdiegti sklandžią internacionalizaciją (i18n) savo Next.js aplikacijose, kad pasiektumėte pasaulinę auditoriją. Apima maršrutizavimą, turinio vertimą ir geriausias praktikas.
Next.js internacionalizacija: daugiakalbių programėlių kūrimas pasaulinei auditorijai
Šiuolaikiniame tarpusavyje susijusiame pasaulyje programėlių, skirtų pasaulinei auditorijai, kūrimas nebėra prabanga – tai būtinybė. Next.js, galinga React karkaso sistema, suteikia tvirtas funkcijas internacionalizacijai (i18n) įdiegti, leidžiančias kurti daugiakalbes programėles, kurios teikia lokalizuotą patirtį vartotojams visame pasaulyje. Šis išsamus vadovas supažindins jus su esminėmis sąvokomis, technikomis ir geriausiomis praktikomis, kaip kurti internacionalizuotas Next.js programėles.
Internacionalizacijos ir lokalizacijos supratimas
Prieš pradedant gilintis į Next.js i18n specifiką, išsiaiškinkime pagrindinius terminus:
- Internacionalizacija (i18n): Tai programėlės projektavimo ir kūrimo procesas, kad ją būtų galima lengvai pritaikyti įvairioms kalboms ir regionams, nereikalaujant inžinerinių pakeitimų. Tai apima teksto, formatavimo ir kitų lokalės specifikos elementų abstrahavimą.
- Lokalizacija (l10n): Tai programėlės pritaikymo konkrečiai kalbai ir regionui procesas. Tai apima teksto vertimą, datos ir laiko formatų, valiutos simbolių ir kt. pritaikymą.
Iš esmės, i18n paruošia jūsų programėlę lokalizacijai. Atskirdami nuo kalbos priklausančius elementus nuo pagrindinio kodo, palengvinate programėlės lokalizavimą skirtingoms rinkoms.
Kodėl verta diegti internacionalizaciją naudojant Next.js?
i18n diegimas jūsų Next.js programėlėje suteikia daugybę privalumų:
- Išplėsta pasiekiamumo sritis: Pasiekite platesnę auditoriją, pateikdami turinį jų pageidaujama kalba.
- Geresnė vartotojo patirtis: Suteikite asmeniškesnę ir patrauklesnę patirtį vartotojams skirtinguose regionuose.
- Pagerintas SEO: Pagerinkite paieškos sistemų optimizavimą (SEO) teikdami lokalizuotą turinį, skirtą konkretiems geografiniams regionams.
- Didesnės konversijos: Padidinkite konversijas pateikdami informaciją vartotojo gimtąja kalba, taip skatindami pasitikėjimą ir supratimą.
- Pasaulinis prekės ženklo matomumas: Sukurkite stipresnį pasaulinį prekės ženklo matomumą, demonstruodami įsipareigojimą įtraukčiai ir prisitaikymą prie įvairių auditorijų.
Next.js i18n funkcijos ir konfigūracija
Next.js siūlo integruotą i18n palaikymą per savo maršrutizavimo ir turinio valdymo funkcijas. Toliau pateikiama svarbių funkcijų apžvalga:
1. i18n konfigūravimas faile next.config.js
Pagrindinė i18n konfigūracija yra faile next.config.js
. Štai pavyzdys:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // Palaikomų lokalių (kalbų kodų) masyvas
defaultLocale: 'en', // Numatytasis lokalės nustatymas
localeDetection: true, // Įjungti/išjungti automatinį lokalės aptikimą pagal naršyklės nustatymus (neprivaloma)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
Paaiškinimas:
locales
: Masyvas, kuriame yra jūsų programėlės palaikomų kalbų kodai (pvz.,'en'
anglų kalbai,'es'
ispanų kalbai,'fr'
prancūzų kalbai). Nuoseklumui užtikrinti naudokite ISO 639-1 kalbų kodus.defaultLocale
: Numatytasis kalbos nustatymas, kurį naudos jūsų programėlė. Tai kalba, kuri rodoma, jei URL adrese nenurodyta jokia kita kalba arba ji neaptikta pagal vartotojo naršyklės nustatymus. Pasirinkite kalbą, kuri atspindi jūsų pagrindinę tikslinę auditoriją.localeDetection
: Loginė reikšmė, kuri kontroliuoja, ar Next.js automatiškai aptinka vartotojo pageidaujamą kalbą pagal jo naršyklės nustatymus. Jei nustatytatrue
, Next.js bandys nukreipti vartotoją į atitinkamą jūsų svetainės kalbos versiją.domains
(neprivaloma): Masyvas, leidžiantis susieti lokales su konkrečiais domenais. Tai naudinga, jei turite atskirus domenus skirtingoms kalboms (pvz.,example.com
anglų kalbai,example.es
ispanų kalbai).
2. Maršrutizavimas su lokalės priešdėliais
Next.js automatiškai prideda lokalės priešdėlį prie maršrutų. Pavyzdžiui, jei turite puslapį /about
ir lokalė yra 'es' (ispanų), URL taps /es/about
. Tai leidžia turėti skirtingų kalbų puslapių versijas ir paieškos sistemoms indeksuoti turinį kiekvienai lokalei. Karkasas pats pasirūpina peradresavimu ir maršrutizavimu.
3. useRouter
kabliuko (Hook) naudojimas
useRouter
kabliukas iš next/router
suteikia prieigą prie dabartinės lokalės ir kitos maršrutizavimo informacijos.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Dabartinė lokalė: {locale}
Galimos lokalės: {locales.join(', ')}
Numatytoji lokalė: {defaultLocale}
);
}
export default MyComponent;
router
objektas siūlo šias pagrindines savybes:
locale
: Šiuo metu pasirinkta lokalė (pvz., 'en', 'es', 'fr').locales
: Visų palaikomų lokalių, apibrėžtųnext.config.js
, masyvas.defaultLocale
: Numatytasis lokalės nustatymas išnext.config.js
.asPath
: Kelias, rodomas naršyklėje, įskaitant lokalės priešdėlį (pvz.,/es/about
).pathname
: Kelias be lokalės priešdėlio (pvz.,/about
).
Turinio vertimo strategijos
Sukonfigūravę savo Next.js programėlę i18n, turėsite įdiegti turinio vertimo strategijas. Štai keletas populiarių metodų:
1. Specializuotos vertimų valdymo sistemos (TMS) naudojimas
Dideliems projektams su daugeliu kalbų, TMS yra labai rekomenduojama. Populiarūs variantai:
- Phrase: Debesų kompiuterija pagrįsta TMS su integracijomis įvairioms platformoms, įskaitant Next.js. Siūlo bendradarbiavimo funkcijas ir automatizuotas darbo eigas.
- Localize: Kita debesų kompiuterija pagrįsta TMS, palaikanti platų failų formatų spektrą ir teikianti vertimų valdymo funkcijas.
- Crowdin: Galinga TMS, labai populiari atvirojo kodo bendruomenėje, puikiai integruojasi su Next.js, leisdama komandoms efektyviai versti turinį.
Privalumai:
- Centralizuotas vertimų valdymas.
- Bendradarbiavimo funkcijos vertėjams.
- Vertimo darbo eigų automatizavimas.
- Integracija su jūsų kūrimo darbo eiga.
2. JSON vertimų failų kūrimas
Mažesniems projektams, JSON failų naudojimas vertimams saugoti yra paprastas ir efektyvus metodas.
Katalogo struktūros pavyzdys:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
en.json
pavyzdys:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
es.json
pavyzdys:
{
"greeting": "¡Hola, mundo!",
"welcomeMessage": "Bienvenido a nuestro sitio web."
}
MyComponent.js
pavyzdys:
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;
Šis metodas suteikia lankstumo ir yra paprastas mažesniems projektams. Paprastai jį lengva atnaujinti ir prižiūrėti.
3. Vertimo bibliotekos naudojimas
Kelios JavaScript bibliotekos supaprastina turinio vertimą jūsų React komponentuose.
next-i18next
: Populiari biblioteka, specialiai sukurta Next.js. Ji gerai integruojasi su karkasu ir suteikia tokias funkcijas kaip serverio pusės atvaizdavimas (SSR) ir kliento pusės vertimas.react-i18next
: Bendrosios paskirties i18n biblioteka, skirta React. Ją galite naudoti savo Next.js programėlėse, nors ji gali reikalauti daugiau konfigūracijos, palyginti sunext-i18next
.
Pavyzdys su next-i18next
(Diegimas: npm install next-i18next i18next react-i18next
):
Sukurkite i18n konfigūracijos failą (pvz., i18n.js
pagrindiniame kataloge):
// 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 }
Sukurkite Next.js konfigūraciją, skirtą 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'],
},
// kita konfigūracija
}
module.exports = nextConfig
Pridėkite konfigūraciją ir vertimo importavimą į savo _app.js
:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
Sukurkite aplanką ir užpildykite jį savo vertimų lokalėmis.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
Pavyzdys en/common.json:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Vertimo naudojimas komponente:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
Šis pavyzdys naudoja useTranslation
kabliuką, kad gautų vertimus pagal dabartinę lokalę.
Dinaminių maršrutų ir statinio svetainės generavimo (SSG) tvarkymas
Internacionalizacija tampa sudėtingesnė, kai dirbama su dinaminiais maršrutais (pvz., tinklaraščio įrašais, produktų puslapiais) ir statinio svetainės generavimu (SSG).
1. Dinaminiai maršrutai (pvz., /blog/[slug])
Dinaminiams maršrutams, kūrimo metu reikės sugeneruoti teisingus kelius kiekvienai lokalei naudojant getStaticPaths
. Ši funkcija grąžina kelių masyvą, kurį Next.js turėtų iš anksto atvaizduoti.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // Gauti tinklaraščio įrašų duomenis
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // arba 'blocking', jei norite rodyti įkėlimo būseną
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Paaiškinimas:
getStaticPaths
: Ši funkcija iteruoja per jūsų tinklaraščio įrašus ir sugeneruoja kelią kiekvienam įrašui ir kiekvienai lokalei.params
objekte yra maršruto parametrai (pvz., tinklaraščio įrašo „slug“).locale
: Šis parametras nurodo dabartinę lokalę, leidžiančią gauti išverstą turinį konkrečiai lokalei.fallback
: Nustato, kaip Next.js tvarko kelius, neapibrėžtusgetStaticPaths
.fallback: false
generuoja 404 puslapius neapibrėžtiems keliams.fallback: 'blocking'
iš anksto atvaizduoja puslapius pagal poreikį.
2. Statinio svetainės generavimas (SSG) su getStaticProps
getStaticProps
funkcijoje galite gauti išverstą turinį pagal locale
parametrą.
export async function getStaticProps({ params, locale }) {
// Gauti turinį pagal lokalę ir parametrus
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Funkcija getPostBySlug
turėtų gauti išverstą turinį pagal nurodytą „slug“ ir lokalę, kuris galėtų būti gaunamas iš jūsų vertimo failų, duomenų bazės ar TVS.
3. Serverio pusės atvaizdavimas (SSR) su getServerSideProps
Turiniui, kurį reikia gauti užklausos metu, naudokite getServerSideProps
. Tai naudinga, jei turinys dažnai keičiasi arba yra personalizuotas kiekvienam vartotojui.
export async function getServerSideProps({ params, locale, req, res }) {
// Gauti duomenis pagal lokalę ir parametrus (pvz., iš duomenų bazės)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
Geriausios Next.js internacionalizacijos praktikos
Laikydamiesi šių geriausių praktikų, sukursite tvirtas, prižiūrimas ir vartotojui patogias daugiakalbes programėles:
- Planuokite iš anksto: Apsvarstykite internacionalizaciją nuo pat projekto pradžios. Daug lengviau ją įdiegti iš karto, nei pritaikyti vėliau.
- Atskirkite turinį nuo kodo: Visą verčiamą tekstą laikykite atskiruose failuose (pvz., JSON failuose arba TVS) ir venkite tiesioginio teksto kodavimo savo komponentuose.
- Naudokite vertimų valdymo sistemą (TVS): Didesniems projektams TVS gali supaprastinti vertimo procesą ir pagerinti bendradarbiavimą.
- Testuokite kruopščiai: Išbandykite savo programėlę visomis palaikomomis kalbomis, kad užtikrintumėte tikslius vertimus, teisingą formatavimą ir tinkamą atvaizdavimą skirtingose naršyklėse ir įrenginiuose. Testuokite su tikrais įrenginiais, ne tik emuliatoriais.
- Atsižvelkite į kalbas, rašomas iš dešinės į kairę (RTL): Jei palaikote tokias kalbas kaip arabų ar hebrajų, užtikrinkite, kad jūsų dizainas ir išdėstymas būtų pritaikyti teksto krypčiai iš dešinės į kairę. Next.js to automatiškai netvarko, todėl reikalingi CSS ar kiti sprendimai.
- Tvarkykite datos ir laiko formatavimą: Naudokite bibliotekas arba integruotas funkcijas datoms ir laikams formatuoti pagal vartotojo lokalę. Moment.js ir date-fns yra dvi populiarios ir naudingos bibliotekos.
- Valdykite skaičių ir valiutų formatavimą: Tinkamai formatuokite skaičius ir valiutų simbolius pagal vartotojo lokalę.
- Optimizuokite SEO: Naudokite konkrečiai kalbai skirtas meta žymes (
hreflang
), kad padėtumėte paieškos sistemoms teisingai indeksuoti jūsų turinį. Įtraukite kalbų kodus į savo URL. - Teikite pirmenybę vartotojo patirčiai: Suteikite aiškų ir intuityvų būdą vartotojams perjungti kalbas. Apsvarstykite galimybę pasiūlyti automatinį kalbos aptikimą pagal naršyklės nustatymus.
- Būkite atnaujinę: Atnaujinkite savo Next.js versiją ir i18n bibliotekas, kad galėtumėte naudotis naujausiomis funkcijomis ir saugumo pataisymais.
- Atsižvelkite į prieinamumą (a11y): Užtikrinkite, kad jūsų išverstas turinys būtų prieinamas vartotojams su negalia. Pateikite alternatyvų tekstą paveikslėliams ir naudokite tinkamus ARIA atributus. Testuokite naudodami ekrano skaitytuvus.
SEO aspektai internacionalizuotoms svetainėms
Optimizuoti savo internacionalizuotą svetainę paieškos sistemoms yra būtina norint pritraukti organinį srautą iš viso pasaulio. Štai keletas pagrindinių SEO geriausių praktikų:
hreflang
žymės: Įdiekitehreflang
žymes savo HTML<head>
dalyje, kad paieškos sistemoms praneštumėte apie jūsų turinio kalbos ir regionines variacijas. Tai yra kritiškai svarbu SEO. Pavyzdžiui:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
ir<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- Konkrečiai kalbai skirti URL: Naudokite kalbų kodus savo URL (pvz.,
/en/about
,/es/acerca-de
). Tai aiškiai nurodo turinio kalbą tiek vartotojams, tiek paieškos sistemoms. - Lokalizuotas turinys: Išverskite savo turinį tiksliai ir natūraliai. Mašininius vertimus turėtų peržiūrėti gimtakalbis.
- Lokalizuoti meta aprašymai ir pavadinimai: Parašykite unikalius ir patrauklius meta aprašymus ir pavadinimus kiekvienai kalbai, kad pagerintumėte paspaudimų rodiklius paieškos rezultatuose.
- XML svetainių schemos: Sukurkite ir pateikite XML svetainių schemas, kuriose būtų visos jūsų puslapių kalbų variacijos.
- Vidinės nuorodos: Naudokite tinkamas vidines nuorodas tarp skirtingų jūsų turinio kalbų versijų.
- Konkrečios šalies raktinių žodžių tyrimas: Atlikite raktinių žodžių tyrimą kiekvienoje kalboje, kad nustatytumėte terminus, kurių vartotojai ieško kiekviename regione.
Pavyzdys: Paprasto daugiakalbio tinklaraščio kūrimas
Sukurkime supaprastintą daugiakalbio tinklaraščio pavyzdį naudojant Next.js. Tai suteiks konkretesnę iliustraciją, kaip taikyti aukščiau aptartas sąvokas.
1. Projekto paruošimas
Sukurkite naują Next.js projektą:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
2. Konfigūruokite i18n (next.config.js
)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
3. Sukurkite vertimo failus
Sukurkite locales
aplanką pagrindiniame kataloge ir pridėkite šiuos JSON failus:
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. Sukurkite tinklaraščio įrašo komponentą (pvz., 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. Sukurkite pagrindinį puslapį (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;
Šis supaprastintas pavyzdys demonstruoja pagrindinius Next.js internacionalizacijos principus. Galite išplėsti šį pagrindinį karkasą, įtraukdami sudėtingesnes funkcijas, tokias kaip dinaminiai maršrutai ir integracija su vertimų valdymo sistemomis. Apsvarstykite galimybę patobulinti aukščiau esančias nuorodas naudojant Link
komponentą ir pridėti atitinkamą locale
atributą.
6. Paleiskite programėlę
Paleiskite programėlę su komanda:
npm run dev
Dabar galite pasiekti savo tinklaraštį adresu http://localhost:3000
(anglų k.), http://localhost:3000/es
(ispanų k.) ir http://localhost:3000/fr
(prancūzų k.). Turėtumėte matyti pavadinimą ir tinklaraščio įrašo turinį, išverstą pagal pasirinktą lokalę.
Išvada
Next.js suteikia išsamų funkcijų rinkinį internacionalizacijai įdiegti jūsų žiniatinklio programėlėse. Laikydamiesi šiame vadove aprašytų principų ir technikų, galite sukurti daugiakalbes programėles, kurios teikia lokalizuotas patirtis vartotojams visame pasaulyje. Nepamirškite planuoti savo i18n strategijos iš anksto, pasirinkti tinkamą vertimo metodą pagal savo poreikius ir teikti pirmenybę vartotojo patirčiai. Kruopščiai planuodami ir vykdydami, galite sukurti programėles, kurios rezonuoja su pasauline auditorija ir atveria naujas augimo galimybes. Nuolatinis mokymasis, naujausių leidimų ir geriausių praktikų sekimas užtikrins, kad efektyviai naudojatės savo įrankiais ir technologijomis.
Technologijoms tobulėjant, tikėkitės pamatyti dar pažangesnių i18n funkcijų. Gebėjimas pasiekti vartotojus skirtingose kultūrose ir lingvistinėse grupėse išliks pagrindiniu prioritetu programėlių kūrėjams visame pasaulyje. Todėl i18n pagrindų įsisavinimas yra vertingas įgūdis, kuris padidins jūsų vertę šiandieniniame pasauliniame kūrimo peizaže.