Uzziniet, kā ieviest nevainojamu internacionalizāciju (i18n) savās Next.js lietotnēs, lai sasniegtu globālu auditoriju. Apskatīta maršrutēšana, satura tulkošana un labākās prakses.
Next.js Internacionalizācija: Daudzvalodu Lietotņu Veidošana Globālai Auditorijai
Mūsdienu savstarpēji saistītajā pasaulē lietotņu veidošana, kas paredzētas globālai auditorijai, vairs nav greznība – tā ir nepieciešamība. Next.js, jaudīgs React ietvars, nodrošina robustas funkcijas internacionalizācijas (i18n) ieviešanai, ļaujot jums izveidot daudzvalodu lietojumprogrammas, kas sniedz lokalizētu pieredzi lietotājiem visā pasaulē. Šis visaptverošais ceļvedis iepazīstinās jūs ar būtiskākajiem jēdzieniem, paņēmieniem un labākajām praksēm, lai veidotu internacionalizētas Next.js lietojumprogrammas.
Izpratne par Internacionalizāciju un Lokalizāciju
Pirms iedziļināties Next.js i18n specifikā, noskaidrosim galvenos terminus:
- Internacionalizācija (i18n): Process, kurā lietotne tiek projektēta un izstrādāta tā, lai to varētu viegli pielāgot dažādām valodām un reģioniem, neprasot izmaiņas programmēšanas kodā. Tas ietver teksta, formatēšanas un citu no lokāles atkarīgu elementu abstrakciju.
- Lokalizācija (l10n): Process, kurā lietotne tiek pielāgota konkrētai valodai un reģionam. Tas ietver teksta tulkošanu, datuma un laika formātu, valūtas simbolu un citu elementu pielāgošanu.
Būtībā i18n sagatavo jūsu lietojumprogrammu lokalizācijai. Atdalot no valodas atkarīgos elementus no pamatkoda, jūs atvieglojat lietotnes lokalizēšanu dažādiem tirgiem.
Kāpēc Ieviest Internacionalizāciju Next.js?
Ieviešot i18n savā Next.js lietojumprogrammā, jūs iegūstat daudzas priekšrocības:
- Plašāka Sasniedzamība: Sasniedziet plašāku auditoriju, nodrošinot saturu viņu vēlamajā valodā.
- Uzlabota Lietotāja Pieredze: Piedāvājiet personalizētāku un saistošāku pieredzi lietotājiem dažādos reģionos.
- Uzlabots SEO: Uzlabojiet meklētājprogrammu optimizāciju (SEO), nodrošinot lokalizētu saturu, kas mērķēts uz konkrētiem ģeogrāfiskajiem reģioniem.
- Palielinātas Konversijas: Palieliniet konversijas, sniedzot informāciju lietotāja dzimtajā valodā, veicinot uzticēšanos un sapratni.
- Globāla Zīmola Klātbūtne: Izveidojiet spēcīgāku globālā zīmola klātbūtni, demonstrējot apņemšanos iekļaut un apkalpot dažādas auditorijas.
Next.js i18n Funkcijas un Konfigurācija
Next.js piedāvā iebūvētu atbalstu i18n, izmantojot tā maršrutēšanas un satura pārvaldības funkcijas. Tālāk ir sniegts svarīgāko funkciju sadalījums:
1. i18n Konfigurēšana next.config.js Failā
Galvenā i18n konfigurācija atrodas next.config.js
failā. Lūk, piemērs:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // Atbalstīto lokāļu (valodu kodu) masīvs
defaultLocale: 'en', // Noklusējuma lokāle, kas tiks izmantota
localeDetection: true, // Iespējot/atspējot automātisku lokāles noteikšanu, pamatojoties uz pārlūka iestatījumiem (pēc izvēles)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
Paskaidrojums:
locales
: Masīvs, kas satur valodu kodus (piem.,'en'
angļu valodai,'es'
spāņu valodai,'fr'
franču valodai), ko jūsu lietojumprogramma atbalsta. Noteikti ievērojiet ISO 639-1 valodu kodus konsekvences nodrošināšanai.defaultLocale
: Noklusējuma valoda, ko izmantos jūsu lietojumprogramma. Šī ir valoda, kas tiek parādīta, ja URL nav norādīta cita valoda vai tā nav noteikta no lietotāja pārlūkprogrammas iestatījumiem. Izvēlieties valodu, kas ir reprezentatīva jūsu primārajai mērķauditorijai.localeDetection
: Būla vērtība, kas kontrolē, vai Next.js automātiski nosaka lietotāja vēlamo valodu, pamatojoties uz viņa pārlūkprogrammas iestatījumiem. Ja iestatīts uztrue
, Next.js mēģinās pāradresēt lietotāju uz atbilstošo jūsu vietnes valodas versiju.domains
(pēc izvēles): Masīvs, kas ļauj saistīt lokāles ar konkrētiem domēniem. Tas ir noderīgi, ja jums ir atsevišķi domēni dažādām valodām (piem.,example.com
angļu valodai,example.es
spāņu valodai).
2. Maršrutēšana ar Lokāles Prefiksiem
Next.js automātiski pievieno maršrutiem lokāles prefiksu. Piemēram, ja jums ir lapa /about
un lokāle ir 'es' (spāņu), URL kļūs par /es/about
. Tas ļauj izveidot dažādu valodu lapu versijas un ļauj meklētājprogrammām indeksēt saturu katrai lokālei. Ietvars pats pārvalda pāradresāciju un maršrutēšanu.
3. useRouter
Hook Izmantošana
useRouter
hook no next/router
nodrošina piekļuvi pašreizējai lokālei un citai maršrutēšanas informācijai.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Pašreizējā lokāle: {locale}
Pieejamās lokāles: {locales.join(', ')}
Noklusējuma lokāle: {defaultLocale}
);
}
export default MyComponent;
router
objekts piedāvā šādas galvenās īpašības:
locale
: Pašreiz atlasītā lokāle (piem., 'en', 'es', 'fr').locales
: Visu atbalstīto lokāļu masīvs, kas definētsnext.config.js
.defaultLocale
: Noklusējuma lokāle, kas iestatītanext.config.js
.asPath
: Ceļš, kā tas tiek rādīts pārlūkprogrammā, ieskaitot lokāles prefiksu (piem.,/es/about
).pathname
: Ceļš bez lokāles prefiksa (piem.,/about
).
Satura Tulkošanas Stratēģijas
Kad esat konfigurējis savu Next.js lietojumprogrammu priekš i18n, jums būs jāievieš satura tulkošanas stratēģijas. Šeit ir vairākas populāras pieejas:
1. Specializētas Tulkošanas Pārvaldības Sistēmas (TMS) Izmantošana
Liela mēroga projektiem ar daudzām valodām TMS ir ļoti ieteicama. Populāras iespējas ietver:
- Phrase: Mākoņbāzēta TMS ar integrācijām dažādām platformām, ieskaitot Next.js. Piedāvā sadarbības funkcijas un automatizētas darbplūsmas.
- Localize: Vēl viena mākoņbāzēta TMS, kas atbalsta plašu failu formātu klāstu un nodrošina tulkošanas pārvaldības funkcijas.
- Crowdin: Jaudīga TMS, kas ir ļoti populāra atvērtā koda kopienā un labi integrējas ar Next.js, ļaujot komandām efektīvi tulkot saturu.
Priekšrocības:
- Centralizēta tulkojumu pārvaldība.
- Sadarbības funkcijas tulkotājiem.
- Tulkošanas darbplūsmu automatizācija.
- Integrācija ar jūsu izstrādes darbplūsmu.
2. JSON Tulkošanas Failu Izveide
Mazākiem projektiem JSON failu izmantošana tulkojumu glabāšanai ir vienkārša un efektīva metode.
Piemērs direktoriju struktūrai:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
Piemērs en.json
:
{
"greeting": "Sveika, pasaule!",
"welcomeMessage": "Laipni lūdzam mūsu vietnē."
}
Piemērs es.json
:
{
"greeting": "Sveika, pasaule!",
"welcomeMessage": "Laipni lūdzam mūsu vietnē."
}
Piemērs 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;
Šī pieeja nodrošina elastību un ir vienkārša mazākiem projektiem. To parasti ir viegli atjaunināt un uzturēt.
3. Tulkošanas Bibliotēkas Izmantošana
Vairākas JavaScript bibliotēkas racionalizē satura tulkošanu jūsu React komponentos.
next-i18next
: Populāra bibliotēka, kas īpaši paredzēta Next.js. Tā labi integrējas ar ietvaru un nodrošina tādas funkcijas kā servera puses renderēšana (SSR) un klienta puses tulkošana.react-i18next
: Vispārēja i18n bibliotēka priekš React. Jūs to varat izmantot savās Next.js lietojumprogrammās, lai gan tas var prasīt vairāk konfigurācijas salīdzinājumā arnext-i18next
.
Piemērs ar next-i18next
(Instalācija: npm install next-i18next i18next react-i18next
):
Izveidojiet i18n konfigurācijas failu (piem., i18n.js
jūsu saknes direktorijā):
// 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 }
Izveidojiet savu Next.js konfigurāciju priekš 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'],
},
// cita konfigurācija
}
module.exports = nextConfig
Pievienojiet konfigurāciju un tulkošanas importu savam _app.js
failam:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
Izveidojiet mapi un aizpildiet to ar lokālēm saviem tulkojumiem.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
Piemērs en/common.json:
{
"greeting": "Sveika, pasaule!",
"welcomeMessage": "Laipni lūdzam mūsu vietnē."
}
Tulkojuma izmantošana komponentā:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
Šis piemērs izmanto useTranslation
hook, lai iegūtu tulkojumus, pamatojoties uz pašreizējo lokāli.
Dinamisko Maršrutu un Statiskās Vietnes Ģenerēšanas (SSG) Pārvaldība
Internacionalizācija kļūst sarežģītāka, strādājot ar dinamiskiem maršrutiem (piem., bloga ieraksti, produktu lapas) un statiskās vietnes ģenerēšanu (SSG).
1. Dinamiskie Maršruti (piem., /blog/[slug])
Dinamiskiem maršrutiem jums būs jāģenerē pareizie ceļi katrai lokālei būvēšanas laikā, izmantojot getStaticPaths
. Šī funkcija atgriež ceļu masīvu, kurus Next.js vajadzētu iepriekš renderēt.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // Iegūst bloga ierakstu datus
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // vai 'blocking', ja vēlaties rādīt ielādes stāvokli
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Paskaidrojums:
getStaticPaths
: Šī funkcija iterē cauri jūsu bloga ierakstiem un ģenerē ceļu katram ierakstam un katrai lokālei.params
objekts satur maršruta parametrus (piem., bloga ieraksta slug).locale
: Šis parametrs nodrošina pašreizējo lokāli, ļaujot jums iegūt tulkoto saturu konkrētajai lokālei.fallback
: Nosaka, kā Next.js apstrādā ceļus, kas nav definētigetStaticPaths
.fallback: false
ģenerē 404 lapas nedefinētiem ceļiem.fallback: 'blocking'
iepriekš renderē lapas pēc pieprasījuma.
2. Statiskās Vietnes Ģenerēšana (SSG) ar getStaticProps
getStaticProps
funkcijā jūs varat iegūt tulkotu saturu, pamatojoties uz locale
parametru.
export async function getStaticProps({ params, locale }) {
// Iegūst saturu, pamatojoties uz lokāli un parametriem
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Funkcijai getPostBySlug
būtu jāiegūst tulkotais saturs dotajam slug un lokālei, ko varētu iegūt no jūsu tulkošanas failiem, datu bāzes vai CMS.
3. Servera Puses Renderēšana (SSR) ar getServerSideProps
Saturam, kas jāiegūst pieprasījuma laikā, izmantojiet getServerSideProps
. Tas ir noderīgi, ja saturs bieži mainās vai tiek personalizēts katram lietotājam.
export async function getServerSideProps({ params, locale, req, res }) {
// Iegūst datus, pamatojoties uz lokāli un parametriem (piem., no datu bāzes)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
Labākās Prakses Next.js Internacionalizācijai
Sekojot šīm labākajām praksēm, jūs varēsiet veidot robustas, uzturamas un lietotājam draudzīgas daudzvalodu lietojumprogrammas:
- Plānojiet Agri: Apsveriet internacionalizāciju jau no projekta sākuma. To ir daudz vieglāk ieviest sākumā, nekā pielāgot vēlāk.
- Atdaliet Saturu no Koda: Glabājiet visu tulkojamo tekstu atsevišķos failos (piem., JSON failos vai TMS) un izvairieties no teksta iekodēšanas tieši komponentos.
- Izmantojiet Tulkošanas Pārvaldības Sistēmu (TMS): Lielākiem projektiem TMS var racionalizēt tulkošanas procesu un uzlabot sadarbību.
- Testējiet Rūpīgi: Testējiet savu lietojumprogrammu visās atbalstītajās valodās, lai nodrošinātu precīzus tulkojumus, pareizu formatēšanu un pareizu renderēšanu dažādās pārlūkprogrammās un ierīcēs. Testējiet uz reālām ierīcēm, nevis tikai emulatoros.
- Apsveriet Valodas no Labās uz Kreiso (RTL): Ja atbalstāt tādas valodas kā arābu vai ebreju, nodrošiniet, lai jūsu dizains un izkārtojums pielāgotos teksta virzienam no labās uz kreiso. Next.js to automātiski nepārvalda, tāpēc ir nepieciešams CSS vai citi risinājumi.
- Pārvaldiet Datuma un Laika Formatēšanu: Izmantojiet bibliotēkas vai iebūvētās funkcijas, lai formatētu datumus un laikus atbilstoši lietotāja lokālei. Moment.js un date-fns ir divas populāras un noderīgas bibliotēkas.
- Pārvaldiet Skaitļu un Valūtas Formatēšanu: Pareizi formatējiet skaitļus un valūtas simbolus, pamatojoties uz lietotāja lokāli.
- Optimizējiet SEO: Izmantojiet valodai specifiskus meta tagus (
hreflang
), lai palīdzētu meklētājprogrammām pareizi indeksēt jūsu saturu. Iekļaujiet valodu kodus savos URL. - Prioritizējiet Lietotāja Pieredzi: Nodrošiniet skaidru un intuitīvu veidu, kā lietotāji var pārslēgties starp valodām. Apsveriet automātiskas valodas noteikšanas piedāvāšanu, pamatojoties uz pārlūka iestatījumiem.
- Sekojiet Jaunumiem: Atjauniniet savu Next.js versiju un i18n bibliotēkas, lai gūtu labumu no jaunākajām funkcijām un drošības ielāpiem.
- Apsveriet Pieejamību (a11y): Nodrošiniet, ka jūsu tulkotais saturs ir pieejams lietotājiem ar invaliditāti. Nodrošiniet alternatīvo tekstu attēliem un izmantojiet atbilstošus ARIA atribūtus. Testēšanai izmantojiet ekrāna lasītājus.
SEO Apsvērumi Internacionalizētām Tīmekļa Vietnēm
Jūsu internacionalizētās tīmekļa vietnes optimizēšana meklētājprogrammām ir būtiska, lai piesaistītu organisko trafiku no visas pasaules. Šeit ir dažas galvenās SEO labākās prakses:
hreflang
Tagi: Ieviesiethreflang
tagus sava HTML<head>
sadaļā, lai informētu meklētājprogrammas par jūsu satura valodu un reģionālajām variācijām. Tas ir kritiski svarīgi SEO. Piemēram:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
un<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- Valodai Specifiski URL: Izmantojiet valodu kodus savos URL (piem.,
/en/about
,/es/acerca-de
). Tas skaidri norāda satura valodu gan lietotājiem, gan meklētājprogrammām. - Lokalizēts Saturs: Tulkojiet savu saturu precīzi un dabiski. Mašīntulkojumi būtu jāpārskata dzimtās valodas runātājam.
- Lokalizēti Meta Apraksti un Virsraksti: Rakstiet unikālus un pārliecinošus meta aprakstus un virsrakstus katrai valodai, lai uzlabotu klikšķu skaitu meklēšanas rezultātos.
- XML Vietkaršu Faili: Izveidojiet un iesniedziet XML vietkaršu failus, kas ietver visas jūsu lapu valodu variācijas.
- Iekšējā Saišu Veidošana: Izmantojiet atbilstošas iekšējās saites starp sava satura valodu versijām.
- Valstij Specifiska Atslēgvārdu Izpēte: Veiciet atslēgvārdu izpēti katrā valodā, lai identificētu terminus, ko lietotāji meklē katrā reģionā.
Piemērs: Vienkārša Daudzvalodu Bloga Veidošana
Izveidosim vienkāršotu daudzvalodu bloga piemēru, izmantojot Next.js. Tas sniegs konkrētāku ilustrāciju tam, kā piemērot iepriekš apspriestos jēdzienus.
1. Projekta Iestatīšana
Izveidojiet jaunu Next.js projektu:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
2. Konfigurējiet i18n (next.config.js
)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
3. Izveidojiet Tulkošanas Failus
Izveidojiet locales
mapi saknes direktorijā un pievienojiet šādus JSON failus:
locales/en.json
:
{
"title": "Laipni lūdzam manā blogā",
"postTitle": "Mans pirmais ieraksts",
"postContent": "Šis ir mana pirmā bloga ieraksta saturs."
}
locales/es.json
:
{
"title": "Laipni lūdzam manā blogā",
"postTitle": "Mans pirmais ieraksts",
"postContent": "Šis ir mana pirmā bloga ieraksta saturs."
}
locales/fr.json
:
{
"title": "Laipni lūdzam manā blogā",
"postTitle": "Mans pirmais ieraksts",
"postContent": "Šis ir mana pirmā bloga ieraksta saturs."
}
4. Izveidojiet Bloga Ieraksta Komponentu (piem., 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. Izveidojiet Sākumlapu (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 vienkāršotais piemērs demonstrē Next.js internacionalizācijas pamatprincipus. Jūs varat paplašināt šo pamata ietvaru, lai iekļautu sarežģītākas funkcijas, piemēram, dinamiskos maršrutus un integrāciju ar tulkošanas pārvaldības sistēmām. Apsveriet iespēju uzlabot iepriekš minētās saites ar Link
komponentu un pievienot atbilstošo locale
atribūtu.
6. Palaidiet Lietojumprogrammu
Palaidiet lietojumprogrammu ar:
npm run dev
Tagad jūs varat piekļūt savam blogam adresē http://localhost:3000
(angļu), http://localhost:3000/es
(spāņu) un http://localhost:3000/fr
(franču). Jums vajadzētu redzēt virsrakstu un bloga ieraksta saturu tulkotu atbilstoši izvēlētajai lokālei.
Noslēgums
Next.js nodrošina visaptverošu funkciju kopumu internacionalizācijas ieviešanai jūsu tīmekļa lietojumprogrammās. Sekojot šajā rokasgrāmatā izklāstītajiem principiem un paņēmieniem, jūs varat izveidot daudzvalodu lietojumprogrammas, kas sniedz lokalizētu pieredzi lietotājiem visā pasaulē. Atcerieties plānot savu i18n stratēģiju agri, izvēlēties savām vajadzībām atbilstošu tulkošanas metodi un prioritizēt lietotāja pieredzi. Ar rūpīgu plānošanu un izpildi jūs varat veidot lietojumprogrammas, kas rezonē ar globālu auditoriju un atver jaunas izaugsmes iespējas. Nepārtraukta mācīšanās, sekošana līdzi jaunākajiem izlaidumiem un labākajām praksēm nodrošinās, ka jūs efektīvi izmantojat savus rīkus un tehnoloģijas.
Tehnoloģijām attīstoties, sagaidāms, ka parādīsies vēl progresīvākas i18n funkcijas. Spēja sasniegt lietotājus dažādās kultūrās un lingvistiskajās grupās paliks galvenā prioritāte lietojumprogrammu izstrādātājiem visā pasaulē. Tāpēc i18n pamatu apguve ir vērtīga prasme, kas uzlabos jūsu vērtību mūsdienu globālajā izstrādes ainavā.