Skip to main content

SvelteKit i18n: Leiðbeiningar um uppsetningu alþjóðavæðingar

Frá grunni að mörgum tungumálum: settu upp svelte-i18n í SvelteKit-forritinu þínu með ICU-skeytasniði, staðfærsluháðri leiðarbeiningu og snjöllum varakeðjum.

1

Settu upp svelte-i18n

svelte-i18n er staðlað alþjóðavæðingarsafn fyrir Svelte og SvelteKit. Það býður upp á gagnvirkar gagnageymslur, stuðning við ICU MessageFormat og síðbúna hleðslu staðfærslna.

svelte-i18n notar ICU MessageFormat fyrir fleirtölur og breytur — sama staðal og FormatJS/react-intl notar. Ef þú kemur úr React ætti setningagerð skeytanna að vera þér kunnugleg.
Terminal
npm install svelte-i18n
2

Grunnstilltu svelte-i18n

Búðu til i18n-grunnstillingarskrá sem skráir staðfærslurnar þínar með síðbúið hlöðnum innflutningsföllum. svelte-i18n sækir aðeins skeyti staðfærslu þegar hún er virkjuð.

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
});
Þú verður að flytja i18n-grunnstillingarskrána þína inn í +layout.svelte áður en nokkur íhlutur er myndgerður. Ef hráir lyklar á borð við 'nav.home' birtast í stað þýðinga var grunnstillingin ekki flutt nógu snemma inn.

Samþætting við SvelteKit-útlit

Flyttu i18n-grunnstillinguna inn í rótarútlitið og verndaðu myndgerð með $isLoading-gagnageymslunni. Þetta kemur í veg fyrir að óþýddir lyklar blikki á skjánum meðan staðfærslugögn hlaðast ósamstillt.

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}

Staðfærsluháð leiðarbeining í SvelteKit

Notaðu [lang]-leiðarviðfang til að fá leitarvélavænar vefslóðir á borð við /en/about og /de/about. Stilltu staðfærslu svelte-i18n í load-falli útlitsins út frá viðfangi vefslóðarinnar.

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}

Snið þýðingarskráa

Búðu til eina JSON-skrá fyrir hverja staðfærslu. svelte-i18n styður falda lykla og setningagerð ICU MessageFormat fyrir fleirtölur, breytur og valsegðir.

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}}"
  }
}
Nefndu lykla eftir því sem þeir lýsa, ekki hvar þeir birtast: 'cart.itemCount' er betra en 'homepageCartLabel'. Lyklar ættu að halda gildi sínu þótt notandaviðmótið sé endurhannað.
3

Notaðu þýðingar í íhlutum

Flyttu $_-gagnageymsluna (eða $format) inn úr svelte-i18n og notaðu hana í Svelte-sniðmátunum þínum. Gagnageymslan er gagnvirk — þegar staðfærslan breytist uppfærast allir þýddir strengir sjálfkrafa.

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>
$_ er Svelte-gagnageymsla — þú verður að nota $-forskeytið í sniðmátum. Ef þú skrifar _('key') án dollaramerkisins skilar það gagnageymsluhlutnum en ekki þýdda strengnum.

Skipt um tungumál

Búðu til tungumálaval sem er bundið við $locale-gagnageymsluna. Þegar gildið breytist hleður svelte-i18n skeytum nýju staðfærslunnar og uppfærir alla þýdda strengi gagnvirkt.

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

Meðhöndlaðu fleirtölur með ICU MessageFormat

svelte-i18n notar ICU MessageFormat fyrir fleirtölumyndun — alþjóðlega staðalinn sem meðhöndlar alla fleirtöluflokka CLDR. Arabíska hefur 6 myndir, rússneska 4 og japanska 1. Skilgreindu myndirnar sem marktungumálin þín þurfa og svelte-i18n velur sjálfkrafa þá réttu.

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 {#個のアイテム}}"
}
Harðkóðaðu aldrei eintölu- eða fleirtölurökfræði í íhlutunum þínum. Tungumál á borð við frönsku meðhöndla 0 sem eintölu. Arabíska, rússneska og pólska hafa fleirtölumyndir sem enska hefur ekki. Láttu ICU-fleirtölusetningagerðina sjá um þetta.

Snjallar staðfærsluvaraleiðir með svelte-i18n-locale-chain

Þegar lykil vantar fer svelte-i18n beint í fallbackLocale — engin millistigsvaraleið er til staðar. Notandi með pt-BR sér ensku í stað fullgóðra pt-PT-þýðinga. svelte-i18n-locale-chain leysir þetta með snjöllum varakeðjum sem djúpsameina skeyti úr svæðisbundnum afbrigðum.

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 sér innanhúss um alla hleðslu skeyta. Ekki nota register()-fall svelte-i18n samhliða því — initLocaleChain sér um skráningu, hleðslu og djúpsameiningu.

Sjálfvirknivæddu þýðingar

Þegar i18n-uppsetningin er tilbúin geturðu þýtt staðfærsluskrárnar með gervigreind. Biddu gervigreindaraðstoðarmanninn í þróunarumhverfinu þínu að þýða frumskrána eða notaðu i18n Agent CLI í CI/CD-vinnslurásinni.

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
Þýddu í áföngum — þegar þú bætir nýjum lyklum við frumskrána skaltu aðeins þýða mismuninn í stað þess að endurgera allar skrár. Þannig varðveitast þýðingar sem fólk hefur yfirfarið.

Sjálfvirknivæddu gæðatryggingu þýðinga

Finndu lykla sem vantar og skemmda staðgengla með i18n-validate áður en þeir fara í útgáfu. Prófaðu notandaviðmótið með sýndarþýðingum frá i18n-pseudo áður en raunverulegar þýðingar berast.

Algengar gildrur

Staðfærsla lekur milli SSR-beiðna í SvelteKit

svelte-i18n-gagnageymslur eru einungar. Í SSR SvelteKit deila samtímis beiðnir sömu gagnageymslu — staðfærsla eins notanda getur lekið inn í svar annars. Lausn: kallaðu á locale.set() í handle-króknum eða load-falli útlitsins svo hver beiðni fái rétt staðfærslusamhengi.

register() notað með svelte-i18n-locale-chain

Ekki nota register()-fall svelte-i18n ef þú notar svelte-i18n-locale-chain. initLocaleChain sér innanhúss um alla hleðslu skeyta. Ef hvoru tveggja er blandað saman eru skeyti hlaðin tvítekið eða með ósamrýmanlegum hætti.

Villur í ICU-setningagerð bregðast hljóðlega

Ósamstæð slaufa eða fleirtöluflokkur sem vantar í ICU MessageFormat-streng veldur hljóðlegri bilun — hrái skeytastrengurinn birtist í stað sniðins úttaks. Prófaðu gildi ICU-setningagerðarinnar í CI-vinnslurásinni þinni.

Óþýtt efni blikkar á skjánum

Ef þú myndgerir íhluti áður en þýðingar hafa hlaðist að fullu sjá notendur hráa lykla. Verndaðu útlitið með {#if $isLoading}...{:else}...{/if} til að sýna hleðslustöðu þar til skeytin eru tilbúin.

Ráðlögð skráaskipan

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

Prófaðu i18n Agent núna

Slepptu þýðingarskránni þinni hér

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

eða smelltu til að fletta

Markmál

Engin skráning nauðsynlegKostnaðaráætlun samstundis

Staðfærsluvaraleið með svelte-i18n-locale-chain

Þegar þýðingarlykil vantar í svæðisbundna staðfærslu á borð við pt-BR fer svelte-i18n beint í sjálfgefnu staðfærsluna í stað þess að athuga fyrst yfirstaðfærsluna 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',
});

Sjáðu leiðbeiningarnar okkar um staðfærsluvaraleiðir til að fá heildarlista yfir studda verkramma og 75 innbyggðar keðjur. Learn more →

Algengar spurningar