Opi toteuttamaan saumaton kansainvälistäminen (i18n) Next.js-sovelluksissasi tavoittaaksesi globaalin yleisön. Käsittelee reititystä, sisällön kääntämistä ja parhaita käytäntöjä.
Next.js-kansainvälistäminen: Monikielisten sovellusten rakentaminen globaalille yleisölle
Nykypäivän verkostoituneessa maailmassa globaalille yleisölle suunnattujen sovellusten rakentaminen ei ole enää ylellisyyttä – se on välttämättömyys. Next.js, tehokas React-kehys, tarjoaa vankat ominaisuudet kansainvälistämisen (i18n) toteuttamiseen, mikä mahdollistaa monikielisten sovellusten luomisen, jotka tarjoavat paikallistetun kokemuksen käyttäjille maailmanlaajuisesti. Tämä kattava opas johdattaa sinut läpi kansainvälistettyjen Next.js-sovellusten rakentamisen keskeiset käsitteet, tekniikat ja parhaat käytännöt.
Kansainvälistämisen ja lokalisaation ymmärtäminen
Ennen kuin syvennymme Next.js:n i18n-ominaisuuksien yksityiskohtiin, selvitetään keskeiset termit:
- Kansainvälistäminen (i18n): Prosessi, jossa sovellus suunnitellaan ja kehitetään siten, että se voidaan helposti mukauttaa eri kieliin ja alueisiin ilman teknisiä muutoksia. Tämä käsittää tekstin, muotoilujen ja muiden kieliversiokohtaisten elementtien abstrahoinnin.
- Lokalisointi (l10n): Prosessi, jossa sovellus mukautetaan tiettyyn kieleen ja alueeseen. Tähän kuuluu tekstin kääntäminen, päivämäärä- ja aikamuotojen, valuuttasymbolien ja muiden vastaavien säätäminen.
Pohjimmiltaan i18n valmistelee sovelluksesi lokalisointia varten. Erottamalla kieliriippuvaiset elementit ydinkoodista teet sovelluksen lokalisoimisesta eri markkinoille helpompaa.
Miksi toteuttaa kansainvälistäminen Next.js:ssä?
i18n:n toteuttaminen Next.js-sovelluksessasi tarjoaa lukuisia etuja:
- Laajempi tavoittavuus: Tavoita laajempi yleisö tarjoamalla sisältöä heidän haluamallaan kielellä.
- Parempi käyttäjäkokemus: Tarjoa henkilökohtaisempi ja sitouttavampi kokemus käyttäjille eri alueilla.
- Parannettu SEO: Paranna hakukoneoptimointia (SEO) tarjoamalla lokalisoitua sisältöä, joka kohdistuu tietyille maantieteellisille alueille.
- Lisääntyneet konversiot: Kasvata konversioita esittämällä tiedot käyttäjän äidinkielellä, mikä edistää luottamusta ja ymmärrystä.
- Globaali brändinäkyvyys: Vahvista globaalia brändinäkyvyyttä osoittamalla sitoutumista osallisuuteen ja palvelemalla monimuotoisia yleisöjä.
Next.js:n i18n-ominaisuudet ja konfiguraatio
Next.js tarjoaa sisäänrakennetun tuen i18n:lle reititys- ja sisällönhallintaominaisuuksiensa kautta. Seuraavassa on erittely tärkeistä ominaisuuksista:
1. i18n:n konfigurointi next.config.js-tiedostossa
i18n:n ydinkonfiguraatio sijaitsee next.config.js
-tiedostossa. Tässä on esimerkki:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // Tuettujen kieliversioiden (kielikoodien) taulukko
defaultLocale: 'en', // Oletuskieliversio
localeDetection: true, // Salli/estä automaattinen kieliversion tunnistus selaimen asetusten perusteella (valinnainen)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
Selitys:
locales
: Taulukko, joka sisältää sovelluksesi tukemien kielten kielikoodit (esim.'en'
englannille,'es'
espanjalle,'fr'
ranskalle). Muista noudattaa ISO 639-1 -kielikoodeja johdonmukaisuuden vuoksi.defaultLocale
: Oletuskieli, jota sovelluksesi käyttää. Tämä on kieli, joka näytetään, jos muuta kieltä ei ole määritetty URL-osoitteessa tai tunnistettu käyttäjän selainasetuksista. Valitse kieli, joka edustaa ensisijaista kohdeyleisöäsi.localeDetection
: Boolen arvo, joka ohjaa, tunnistaako Next.js automaattisesti käyttäjän ensisijaisen kielen hänen selainasetustensa perusteella. Jos asetuksena ontrue
, Next.js yrittää ohjata käyttäjän sivustosi sopivaan kieliversioon.domains
(valinnainen): Taulukko, jonka avulla voit liittää kieliversioita tiettyihin verkkotunnuksiin. Tämä on hyödyllistä, jos sinulla on erilliset verkkotunnukset eri kielille (esim.example.com
englanniksi,example.es
espanjaksi).
2. Reititys kieliversion etuliitteillä
Next.js lisää automaattisesti reitteihin kieliversion etuliitteen. Esimerkiksi, jos sinulla on sivu osoitteessa /about
ja kieliversio on 'es' (espanja), URL-osoitteeksi tulee /es/about
. Tämä mahdollistaa sivujen eri kieliversiot ja antaa hakukoneille mahdollisuuden indeksoida sisältöä kullekin kieliversiolle. Kehys hoitaa uudelleenohjauksen ja reitityksen puolestasi.
3. useRouter
-koukun hyödyntäminen
useRouter
-koukku next/router
-paketista antaa pääsyn nykyiseen kieliversioon ja muihin reititystietoihin.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Nykyinen kieliversio: {locale}
Saatavilla olevat kieliversiot: {locales.join(', ')}
Oletuskieliversio: {defaultLocale}
);
}
export default MyComponent;
router
-objekti tarjoaa seuraavat keskeiset ominaisuudet:
locale
: Tällä hetkellä valittu kieliversio (esim. 'en', 'es', 'fr').locales
: Kaikkiennext.config.js
-tiedostossa määriteltyjen tuettujen kieliversioiden taulukko.defaultLocale
:next.config.js
-tiedostossa asetettu oletuskieliversio.asPath
: Polku sellaisena kuin se näkyy selaimessa, mukaan lukien kieliversion etuliite (esim./es/about
).pathname
: Polku ilman kieliversion etuliitettä (esim./about
).
Sisällön kääntämisen strategiat
Kun olet konfiguroinut Next.js-sovelluksesi i18n:ää varten, sinun on toteutettava strategioita sisältösi kääntämiseksi. Tässä on useita suosittuja lähestymistapoja:
1. Erillisen käännöstenhallintajärjestelmän (TMS) käyttö
Suurissa projekteissa, joissa on monia kieliä, TMS on erittäin suositeltava. Suosittuja vaihtoehtoja ovat:
- Phrase: Pilvipohjainen TMS, jossa on integraatioita eri alustoille, mukaan lukien Next.js. Tarjoaa yhteistyöominaisuuksia ja automatisoituja työnkulkuja.
- Localize: Toinen pilvipohjainen TMS, joka tukee laajaa valikoimaa tiedostomuotoja ja tarjoaa käännöstenhallintaominaisuuksia.
- Crowdin: Tehokas TMS, joka on erittäin suosittu avoimen lähdekoodin yhteisössä ja integroituu hyvin Next.js:ään, mahdollistaen tiimien tehokkaan sisällön kääntämisen.
Edut:
- Keskitetty käännöstenhallinta.
- Yhteistyöominaisuudet kääntäjille.
- Käännöstyönkulkujen automatisointi.
- Integraatio kehitystyönkulkuusi.
2. JSON-käännöstiedostojen luominen
Pienemmissä projekteissa JSON-tiedostojen käyttö käännösten tallentamiseen on yksinkertainen ja tehokas menetelmä.
Esimerkki hakemistorakenteesta:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
Esimerkki en.json
:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Esimerkki es.json
:
{
"greeting": "¡Hola, mundo!",
"welcomeMessage": "Bienvenido a nuestro sitio web."
}
Esimerkki 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;
Tämä lähestymistapa tarjoaa joustavuutta ja on suoraviivainen pienempiin projekteihin. Sitä on yleensä helppo päivittää ja ylläpitää.
3. Käännöskirjaston käyttö
Useat JavaScript-kirjastot tehostavat sisällön kääntämistä React-komponenteissasi.
next-i18next
: Suosittu kirjasto, joka on suunniteltu erityisesti Next.js:lle. Se integroituu hyvin kehykseen ja tarjoaa ominaisuuksia, kuten palvelinpuolen renderöinnin (SSR) ja asiakaspuolen kääntämisen.react-i18next
: Yleiskäyttöinen i18n-kirjasto Reactille. Voit käyttää sitä Next.js-sovelluksissasi, vaikka se saattaa vaatia enemmän konfigurointia verrattunanext-i18next
-kirjastoon.
Esimerkki next-i18next
-kirjastolla (Asennus: npm install next-i18next i18next react-i18next
):
Luo i18n-konfiguraatiotiedosto (esim. i18n.js
juurihakemistoosi):
// 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 }
Luo Next.js-konfiguraatio next-i18nextille.
// 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'],
},
// other configuration
}
module.exports = nextConfig
Lisää konfiguraatio ja käännöksen tuonti _app.js
-tiedostoosi:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
Luo kansio ja täytä se käännöstesi kieliversioilla.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
Esimerkki en/common.json:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Käännöksen käyttäminen komponentissa:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
Tämä esimerkki käyttää useTranslation
-koukkua noutamaan käännöksiä nykyisen kieliversion perusteella.
Dynaamisten reittien ja staattisen sivuston generoinnin (SSG) käsittely
Kansainvälistäminen muuttuu monimutkaisemmaksi, kun käsitellään dynaamisia reittejä (esim. blogikirjoitukset, tuotesivut) ja staattista sivuston generointia (SSG).
1. Dynaamiset reitit (esim. /blog/[slug])
Dynaamisille reiteille sinun on generoitava oikeat polut jokaiselle kieliversiolle koontivaiheessa käyttämällä getStaticPaths
-funktiota. Tämä funktio palauttaa taulukon poluista, jotka Next.js:n tulisi esirenderöidä.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // Hae blogikirjoitusten tiedot
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // tai 'blocking', jos haluat näyttää lataustilan
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Selitys:
getStaticPaths
: Tämä funktio käy läpi blogikirjoituksesi ja generoi polun jokaiselle kirjoitukselle ja jokaiselle kieliversiolle.params
-objekti sisältää reitin parametrit (esim. blogikirjoituksen slug).locale
: Tämä parametri antaa nykyisen kieliversion, jonka avulla voit hakea käännetyn sisällön tietylle kieliversiolle.fallback
: Määrittää, miten Next.js käsittelee polkuja, joita ei ole määriteltygetStaticPaths
-funktiossa.fallback: false
generoi 404-sivuja määrittelemättömille poluille.fallback: 'blocking'
esirenderöi sivuja tarvittaessa.
2. Staattinen sivuston generointi (SSG) getStaticProps
-funktiolla
getStaticProps
-funktiossa voit hakea käännettyä sisältöä locale
-parametrin perusteella.
export async function getStaticProps({ params, locale }) {
// Hae sisältöä kieliversion ja parametrien perusteella
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
getPostBySlug
-funktion tulisi hakea annetun slugin ja kieliversion käännetty sisältö, joka voidaan noutaa käännöstiedostoistasi, tietokannasta tai CMS:stä.
3. Palvelinpuolen renderöinti (SSR) getServerSideProps
-funktiolla
Sisällölle, joka on haettava pyynnön hetkellä, käytä getServerSideProps
-funktiota. Tämä on hyödyllistä, jos sisältö muuttuu usein tai on henkilökohtaista kullekin käyttäjälle.
export async function getServerSideProps({ params, locale, req, res }) {
// Hae dataa kieliversion ja parametrien perusteella (esim. tietokannasta)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
Parhaat käytännöt Next.js-kansainvälistämiseen
Näiden parhaiden käytäntöjen noudattaminen auttaa sinua rakentamaan vakaita, ylläpidettäviä ja käyttäjäystävällisiä monikielisiä sovelluksia:
- Suunnittele ajoissa: Harkitse kansainvälistämistä projektisi alusta alkaen. Sen toteuttaminen etukäteen on paljon helpompaa kuin sen lisääminen jälkikäteen.
- Erota sisältö koodista: Tallenna kaikki käännettävä teksti erillisiin tiedostoihin (esim. JSON-tiedostot tai TMS) ja vältä tekstin kovakoodaamista suoraan komponentteihisi.
- Käytä käännöstenhallintajärjestelmää (TMS): Suuremmissa projekteissa TMS voi tehostaa käännösprosessia ja parantaa yhteistyötä.
- Testaa perusteellisesti: Testaa sovellustasi kaikilla tuetuilla kielillä varmistaaksesi tarkat käännökset, oikean muotoilun ja asianmukaisen renderöinnin eri selaimissa ja laitteissa. Testaa oikeilla laitteilla, ei vain emulaattoreilla.
- Harkitse oikealta vasemmalle (RTL) -kieliä: Jos tuet kieliä kuten arabiaa tai hepreaa, varmista, että suunnittelusi ja asettelusi mukautuvat oikealta vasemmalle -tekstisuuntaan. Next.js ei hoida tätä automaattisesti, joten CSS- tai muut ratkaisut ovat tarpeen.
- Käsittele päivämäärä- ja aikamuotoiluja: Käytä kirjastoja tai sisäänrakennettuja funktioita päivämäärien ja aikojen muotoiluun käyttäjän kieliversion mukaan. Moment.js ja date-fns ovat kaksi suosittua ja hyödyllistä kirjastoa.
- Hallitse numero- ja valuuttamuotoiluja: Muotoile numerot ja valuuttasymbolit oikein käyttäjän kieliversion perusteella.
- Optimoi SEO: Käytä kielikohtaisia metatageja (
hreflang
) auttaaksesi hakukoneita indeksoimaan sisältösi oikein. Sisällytä kielikoodit URL-osoitteisiisi. - Priorisoi käyttäjäkokemus: Tarjoa käyttäjille selkeä ja intuitiivinen tapa vaihtaa kieltä. Harkitse automaattisen kielen tunnistuksen tarjoamista selainasetusten perusteella.
- Pysy ajan tasalla: Pidä Next.js-versiosi ja i18n-kirjastosi ajan tasalla hyötyäksesi uusimmista ominaisuuksista ja tietoturvakorjauksista.
- Harkitse saavutettavuutta (a11y): Varmista, että käännetty sisältösi on saavutettavissa myös vammaisille käyttäjille. Tarjoa vaihtoehtoinen teksti kuville ja käytä asianmukaisia ARIA-attribuutteja. Testaa ruudunlukijoilla.
SEO-näkökohdat kansainvälistetyille verkkosivustoille
Kansainvälistetyn verkkosivustosi optimointi hakukoneita varten on välttämätöntä orgaanisen liikenteen ohjaamiseksi ympäri maailmaa. Tässä on joitakin keskeisiä SEO-parhaita käytäntöjä:
hreflang
-tagit: Toteutahreflang
-tagit HTML-koodisi<head>
-osioon kertoaksesi hakukoneille sisältösi kieli- ja alueellisista variaatioista. Tämä on kriittistä SEO:lle. Esimerkiksi:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
ja<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- Kielikohtaiset URL-osoitteet: Käytä kielikoodeja URL-osoitteissasi (esim.
/en/about
,/es/acerca-de
). Tämä osoittaa selkeästi sisällön kielen sekä käyttäjille että hakukoneille. - Lokalisoitu sisältö: Käännä sisältösi tarkasti ja luonnollisesti. Koneelliset käännökset tulisi tarkistaa äidinkielisen puhujan toimesta.
- Lokalisoidut metakuvaukset ja otsikot: Kirjoita ainutlaatuisia ja houkuttelevia metakuvauksia ja otsikoita jokaiselle kielelle parantaaksesi klikkausprosentteja hakutuloksissa.
- XML-sivustokartat: Luo ja lähetä XML-sivustokarttoja, jotka sisältävät kaikki sivujesi kieliversiot.
- Sisäinen linkitys: Käytä asianmukaisia sisäisiä linkkejä sisältösi kieliversioiden välillä.
- Maakohtainen avainsanatutkimus: Tee avainsanatutkimusta kullakin kielellä tunnistaaksesi termit, joita käyttäjät hakevat kullakin alueella.
Esimerkki: Yksinkertaisen monikielisen blogin rakentaminen
Luodaan yksinkertaistettu esimerkki monikielisestä blogista käyttäen Next.js:ää. Tämä antaa konkreettisemman kuvan siitä, miten yllä käsiteltyjä käsitteitä sovelletaan.
1. Projektin perustaminen
Luo uusi Next.js-projekti:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
2. Konfiguroi i18n (next.config.js
)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
3. Luo käännöstiedostot
Luo locales
-kansio juurihakemistoon ja lisää seuraavat JSON-tiedostot:
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. Luo blogikirjoituskomponentti (esim. 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. Luo etusivu (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;
Tämä yksinkertaistettu esimerkki esittelee Next.js-kansainvälistämisen perusperiaatteet. Voit laajentaa tätä peruskehystä sisältämään monimutkaisempia ominaisuuksia, kuten dynaamisia reittejä ja integraatiota käännöstenhallintajärjestelmiin. Harkitse yllä olevien linkkien parantamista Link
-komponentilla ja lisäämällä asianmukainen locale
-attribuutti.
6. Suorita sovellus
Suorita sovellus komennolla:
npm run dev
Nyt voit käyttää blogiasi osoitteissa http://localhost:3000
(englanti), http://localhost:3000/es
(espanja) ja http://localhost:3000/fr
(ranska). Sinun pitäisi nähdä otsikko ja blogikirjoituksen sisältö käännettynä valitun kieliversion mukaan.
Johtopäätös
Next.js tarjoaa kattavan joukon ominaisuuksia kansainvälistämisen toteuttamiseen verkkosovelluksissasi. Noudattamalla tässä oppaassa esitettyjä periaatteita ja tekniikoita voit luoda monikielisiä sovelluksia, jotka tarjoavat paikallistettuja kokemuksia käyttäjille ympäri maailmaa. Muista suunnitella i18n-strategiasi ajoissa, valita tarpeisiisi sopiva käännösmenetelmä ja priorisoida käyttäjäkokemus. Huolellisella suunnittelulla ja toteutuksella voit rakentaa sovelluksia, jotka resonoivat globaalin yleisön kanssa ja avaavat uusia kasvumahdollisuuksia. Jatkuva oppiminen, uusimpien julkaisujen ja parhaiden käytäntöjen seuraaminen varmistaa, että hyödynnät työkaluja ja teknologioita tehokkaasti.
Teknologian edetessä on odotettavissa yhä kehittyneempiä i18n-ominaisuuksia. Kyky tavoittaa käyttäjiä eri kulttuureista ja kieliryhmistä säilyy keskeisenä prioriteettina sovelluskehittäjille maailmanlaajuisesti. Siksi i18n:n perusteiden hallitseminen on arvokas taito, joka lisää arvoasi nykypäivän globaalissa kehitysmaailmassa.