Skip to main content

SvelteKit i18n: kansainvälistämisen käyttöönotto-opas

Tyhjästä monikieliseksi: ota svelte-i18n käyttöön SvelteKit-sovelluksessasi ICU-sanomamuodolla, kieliversiopohjaisella reitityksellä ja älykkäillä varakieliketjuilla.

1

Asenna svelte-i18n

svelte-i18n on Svelte:in ja SvelteKit:in tavallinen kansainvälistämiskirjasto. Siinä on heti käytettävissä reaktiiviset säilöt, ICU MessageFormat -tuki ja kieliversioiden laiska lataus.

svelte-i18n käyttää monikkomuotoihin ja muuttujiin ICU MessageFormat:ia, samaa standardia kuin FormatJS/react-intl. Jos siirryt React:ista, sanomasyntaksi on tuttu.
Terminal
npm install svelte-i18n
2

Määritä svelte-i18n

Luo i18n-määritystiedosto, joka rekisteröi kieliversiosi laiskasti ladattavilla tuontifunktioilla. svelte-i18n hakee kieliversion sanomat vasta, kun kieliversio aktivoidaan.

src/lib/i18n.ts
// src/lib/i18n.ts
import { register, init, getLocaleFromNavigator } from 'svelte-i18n';

// Register locale loaders (lazy-loaded)
register('en', () => import('../locales/en.json'));
register('de', () => import('../locales/de.json'));
register('ja', () => import('../locales/ja.json'));
register('es', () => import('../locales/es.json'));

init({
  fallbackLocale: 'en',
  initialLocale: getLocaleFromNavigator(),  // Auto-detect browser language
});
i18n-määritystiedosto on tuotava +layout.svelte-tiedostoon ennen minkään komponentin hahmontamista. Jos käännöksissä näkyy käsittelemättömiä avaimia, kuten 'nav.home', määritystä ei tuotu riittävän aikaisin.

SvelteKit-asettelun integraatio

Tuo i18n-määritys juuriasetteluun ja estä hahmontaminen $isLoading-säilöllä. Näin kääntämättömät avaimet eivät välähdä kieliversiotietojen asynkronisen latauksen aikana.

src/routes/+layout.svelte
<!-- src/routes/+layout.svelte -->
<script>
  // Import i18n config — must run before any component renders
  import '../lib/i18n';
  import { isLoading } from 'svelte-i18n';
</script>

{#if $isLoading}
  <p>Loading translations...</p>
{:else}
  <slot />
{/if}

Kieliversiopohjainen reititys SvelteKit:issä

Käytä hakukoneystävällisissä URL-osoitteissa, kuten /en/about ja /de/about, [lang]-reittiparametria. Aseta svelte-i18n:n kieliversio asettelun load-funktiossa URL-parametrin perusteella.

SvelteKit locale routing
// src/routes/[lang]/+layout.ts
import { locale } from 'svelte-i18n';

export function load({ params }) {
  // Set the active locale from the URL parameter
  locale.set(params.lang);
  return {};
}

// src/routes/[lang]/+layout.svelte
<script>
  import '../../lib/i18n';
  import { isLoading } from 'svelte-i18n';
</script>

{#if $isLoading}
  <p>Loading...</p>
{:else}
  <slot />
{/if}

Käännöstiedostomuoto

Luo jokaiselle kieliversiolle yksi JSON-tiedosto. svelte-i18n tukee sisäkkäisiä avaimia ja ICU MessageFormat -syntaksia monikkomuodoille, muuttujille ja select-lausekkeille.

Translation files
// src/locales/en.json
{
  "nav": {
    "home": "Home",
    "about": "About",
    "settings": "Settings"
  },
  "greeting": "Hello, {name}!",
  "cart": {
    "itemCount": "{count, plural, one {# item} other {# items}}"
  }
}

// src/locales/de.json
{
  "nav": {
    "home": "Startseite",
    "about": "Uber uns",
    "settings": "Einstellungen"
  },
  "greeting": "Hallo, {name}!",
  "cart": {
    "itemCount": "{count, plural, one {# Artikel} other {# Artikel}}"
  }
}
Nimeä avaimet sen mukaan, mitä ne kuvaavat, älä niiden sijainnin mukaan: 'cart.itemCount' on parempi kuin 'homepageCartLabel'. Avainten tulisi kestää käyttöliittymän uudistukset.
3

Käytä käännöksiä komponenteissa

Tuo $_-säilö (tai $format) svelte-i18n:stä ja käytä sitä Svelte-malleissasi. Säilö on reaktiivinen — kieliversion vaihtuessa kaikki käännetyt merkkijonot päivittyvät automaattisesti.

Component.svelte
<script>
  import { _ } from 'svelte-i18n';
</script>

<h1>{$_('greeting', { values: { name: 'World' } })}</h1>

<nav>
  <a href="/">{$_('nav.home')}</a>
  <a href="/about">{$_('nav.about')}</a>
</nav>
Formatting helpers
<script>
  import { _, date, number, time } from 'svelte-i18n';
</script>

<!-- Simple string -->
<p>{$_('greeting', { values: { name: userName } })}</p>

<!-- ICU plurals — handled automatically -->
<p>{$_('cart.itemCount', { values: { count: 3 } })}</p>

<!-- Date formatting -->
<p>{$date(new Date(), { format: 'long' })}</p>

<!-- Number formatting -->
<p>{$number(1999.99, { style: 'currency', currency: 'USD' })}</p>
$_ on Svelte-säilö, joten malleissa on käytettävä $-etuliitettä. _('key') ilman dollarimerkkiä palauttaa säilöobjektin, ei käännettyä merkkijonoa.

Kielen vaihtaminen

Luo $locale-säilöön sidottu kielivalitsin. Arvon muuttuessa svelte-i18n lataa uuden kieliversion sanomat ja päivittää kaikki käännetyt merkkijonot reaktiivisesti.

LanguageSwitcher.svelte
<script>
  import { locale, locales } from 'svelte-i18n';

  const LANGUAGE_NAMES = {
    en: 'English',
    de: 'Deutsch',
    ja: '日本語',
    es: 'Espanol',
  };
</script>

<select bind:value={$locale}>
  {#each $locales as loc}
    <option value={loc}>{LANGUAGE_NAMES[loc] ?? loc}</option>
  {/each}
</select>
4

Käsittele monikkomuodot ICU MessageFormat:illa

svelte-i18n käyttää monikkomuotoihin ICU MessageFormat:ia, joka on kaikki CLDR-monikkoluokat käsittelevä kansainvälinen standardi. Arabiassa on kuusi muotoa, venäjässä neljä ja japanissa yksi. Määritä kohdekielten tarvitsemat muodot, niin svelte-i18n valitsee oikean automaattisesti.

ICU plural forms by language
// svelte-i18n uses ICU MessageFormat for plurals
// English:
{
  "items": "{count, plural, one {# item} other {# items}}"
}

// Arabic (6 forms):
{
  "items": "{count, plural, zero {no items} one {item} two {two items} few {# items} many {# items} other {# items}}"
}

// Japanese (1 form):
{
  "items": "{count, plural, other {#個のアイテム}}"
}
Älä koskaan kovakoodaa komponentteihisi yksikkö- tai monikkologiikkaa. Ranskan kaltaisissa kielissä 0 käsitellään yksikkönä. Arabiassa, venäjässä ja puolassa on monikkomuotoja, joita englannissa ei ole. Anna ICU-monikkosyntaksin hoitaa tämä.

Älykkäät varakielet svelte-i18n-locale-chainilla

svelte-i18n siirtyy avaimen puuttuessa suoraan fallbackLocale-arvoon ilman välivaihetta. pt-BR-käyttäjä näkee täysin käyttökelpoisten pt-PT-käännösten sijaan englannin. svelte-i18n-locale-chain korjaa tämän älykkäillä varakieliketjuilla, jotka syväyhdistävät alueellisten kielimuotojen sanomat.

Terminal
npm install svelte-i18n-locale-chain svelte-i18n
src/lib/i18n.ts
// src/lib/i18n.ts
import { initLocaleChain, setLocale } from 'svelte-i18n-locale-chain';

// Replace svelte-i18n's init + register with initLocaleChain
await initLocaleChain({
  loadMessages: (locale) =>
    import(`../locales/${locale}.json`).then(m => m.default),
  defaultLocale: 'en',
  initialLocale: 'pt-BR',
});

// Later, to change locale:
await setLocale('fr-CA');
// fr-CA user sees: fr-CA messages -> fr messages -> en messages
// No missing keys — deep-merged automatically
svelte-i18n-locale-chain hallitsee kaiken sanomien lataamisen sisäisesti. Älä käytä sen kanssa svelte-i18n:n register()-funktiota — initLocaleChain hoitaa rekisteröinnin, lataamisen ja syväyhdistämisen.

Automatisoi käännökset

Kun i18n on otettu käyttöön, käännä kieliversiotiedostosi tekoälyllä. Pyydä IDE-ympäristössäsi tekoälyavustajaasi kääntämään lähdetiedostosi tai käytä i18n Agent:in CLI:tä CI/CD-putkessasi.

Terminal
# In your IDE, ask your AI assistant:
> Translate src/locales/en.json to German, Japanese, and Spanish

✓ de.json created (1.2s)
✓ ja.json created (1.5s)
✓ es.json created (1.1s)

# Or use the CLI in CI/CD:
npx i18n-agent translate src/locales/en.json --lang de,ja,es
Käännä vaiheittain — kun lisäät uusia avaimia lähdetiedostoon, käännä vain muutokset äläkä luo kaikkia tiedostoja uudelleen. Näin ihmisten tarkistamat käännökset säilyvät.

Automatisoi käännöslaatu

Löydä puuttuvat avaimet ja rikkoutuneet paikkamerkit i18n-validate:lla ennen julkaisua. Testaa käyttöliittymää pseudokäännöksillä i18n-pseudo:n avulla ennen oikeiden käännösten valmistumista.

Tavalliset sudenkuopat

SSR-kieliversio vuotaa SvelteKit:issä

svelte-i18n-säilöt ovat singleton-olioita. SvelteKit:in SSR:ssä samanaikaiset pyynnöt jakavat saman säilön, joten yhden käyttäjän kieliversio voi vuotaa toisen vastaukseen. Korjaus: kutsu locale.set()-funktiota handle-koukussa tai asettelun load-funktiossa, jotta kukin pyyntö saa oikean kieliversioyhteyden.

register()-funktion käyttö svelte-i18n-locale-chainin kanssa

Älä käytä svelte-i18n:n register()-funktiota, jos käytät svelte-i18n-locale-chainia. initLocaleChain hoitaa kaiken sanomien lataamisen sisäisesti. Molempien käyttö aiheuttaa päällekkäisen tai ristiriitaisen sanomien lataamisen.

ICU-syntaksivirheet epäonnistuvat huomaamatta

Pariton aaltosulje tai puuttuva monikkoluokka ICU MessageFormat -merkkijonoissa aiheuttaa huomaamattoman virheen — muotoillun tulosteen sijaan näytetään käsittelemätön sanomamerkkijono. Validoi ICU-syntaksi CI-putkessasi.

Kääntämättömän sisällön välähdys

Jos hahmonnat komponentit ennen käännösten latautumista, käyttäjät näkevät käsittelemättömiä avaimia. Estä asettelusi hahmontaminen lohkolla {#if $isLoading}...{:else}...{/if}, jotta lataustila näkyy sanomien valmistumiseen asti.

Suositeltu tiedostorakenne

Project Structure
my-sveltekit-app/
├── src/
│   ├── lib/
│   │   └── i18n.ts              # i18n configuration
│   ├── locales/
│   │   ├── en.json              # Source language
│   │   ├── de.json              # German
│   │   ├── ja.json              # Japanese
│   │   └── es.json              # Spanish
│   └── routes/
│       ├── +layout.svelte       # Import i18n, guard isLoading
│       ├── +page.svelte
│       └── [lang]/              # Optional: locale-based routing
│           ├── +layout.ts       # Set locale from URL param
│           ├── +layout.svelte
│           └── +page.svelte
├── svelte.config.js
└── package.json

Kokeile i18n Agent:ia nyt

Pudota käännöstiedostosi tähän

JSON, YAML, PO, XML, CSV, Markdown, Properties

tai valitse napsauttamalla

Kohdekielet

Rekisteröitymistä ei tarvitaVälitön arvio

Varakieliketju svelte-i18n-locale-chainilla

Kun alueellisesta kieliversiosta, kuten pt-BR:stä, puuttuu käännösavain, svelte-i18n siirtyy suoraan oletuskieliversioon eikä tarkista ensin pääkieliversiota pt.

Terminal
npm install svelte-i18n-locale-chain
Configuration
import { initLocaleChain } from 'svelte-i18n-locale-chain';

initLocaleChain({
  fallbacks: {
    'pt-BR': ['pt', 'en'],
    'zh-Hant-HK': ['zh-Hant', 'zh', 'en'],
  },
  defaultLocale: 'en',
});

Katso varakielioppaastamme kaikki tuetut ohjelmistokehykset ja 75 sisäänrakennettua ketjua. Learn more →

Usein kysytyt kysymykset