Skip to main content

SvelteKit i18n: nemzetköziesítési beállítási útmutató

A nullától a többnyelvűségig: állítsa be a svelte-i18n csomagot SvelteKit-alkalmazásában ICU-üzenetformátummal, területalapú útválasztással és intelligens tartalékláncokkal.

1

A svelte-i18n telepítése

A svelte-i18n a Svelte és a SvelteKit szabványos nemzetköziesítési könyvtára. Azonnal használható reaktív tárakat, ICU MessageFormat-támogatást és lusta területibetöltést biztosít.

A svelte-i18n ICU MessageFormat formátumot használ a többes számokhoz és változókhoz — ugyanazt a szabványt, mint a FormatJS/react-intl. Ha Reactről érkezik, ismerős lesz az üzenetszintaxis.
Terminal
npm install svelte-i18n
2

A svelte-i18n beállítása

Hozzon létre i18n-konfigurációs fájlt, amely lusta betöltésű importfüggvényekkel regisztrálja a területi beállításokat. A svelte-i18n csak egy terület aktiválásakor kéri le annak üzeneteit.

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
});
Az i18n-konfigurációs fájlt minden komponens renderelése előtt importálnia kell a +layout.svelte fájlban. Ha a fordítások nyers kulcsokat, például „nav.home” értéket mutatnak, a konfiguráció importálása túl későn történt.

SvelteKit-elrendezés integrációja

Importálja az i18n-konfigurációt a gyökérelrendezésben, és az $isLoading tárral szabályozza a renderelést. Ez megakadályozza a lefordítatlan kulcsok felvillanását a területi adatok aszinkron betöltése közben.

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}

Területalapú útválasztás SvelteKitben

Az olyan SEO-barát URL-ekhez, mint az /en/about és /de/about, használjon [lang] útvonalparamétert. Az URL-paraméter alapján állítsa be a svelte-i18n területét az elrendezés load függvényében.

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}

Fordításfájl-formátum

Hozzon létre területenként egy JSON-fájlt. A svelte-i18n támogatja az egymásba ágyazott kulcsokat és az ICU MessageFormat-szintaxist a többes számokhoz, változókhoz és select kifejezésekhez.

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}}"
  }
}
A kulcsokat az általuk leírt fogalomról, ne a megjelenési helyükről nevezze el: a „cart.itemCount” jobb a „homepageCartLabel” névnél. A kulcsoknak a felület újratervezése után is használhatónak kell maradniuk.
3

Fordítások használata komponensekben

Importálja a $_ tárat (vagy a $format értéket) a svelte-i18n csomagból, és használja Svelte-sablonjaiban. A tár reaktív — a terület változásakor minden lefordított karakterlánc automatikusan frissül.

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>
A $_ egy Svelte-tár — a sablonokban kötelező a $ előtag. A dollárjel nélküli _('key') a lefordított karakterlánc helyett a tárobjektumot adja vissza.

Nyelvváltás

Készítsen az $locale tárhoz kötött nyelvválasztót. Az érték változásakor a svelte-i18n betölti az új terület üzeneteit, és reaktívan frissíti az összes lefordított karakterláncot.

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

Többes szám kezelése ICU MessageFormat használatával

A svelte-i18n ICU MessageFormat formátumot használ a többes számhoz — ez a nemzetközi szabvány minden CLDR többesszám-kategóriát kezel. Az arabnak 6, az orosznak 4, a japánnak 1 alakja van. Határozza meg a célnyelvekhez szükséges alakokat, a svelte-i18n pedig automatikusan kiválasztja a megfelelőt.

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 {#個のアイテム}}"
}
Soha ne égessen be egyes-/többesszám-logikát a komponensekbe. A francia például a 0 értéket egyes számként kezeli. Az arab, az orosz és a lengyel az angolban nem létező többes számú alakokat használ. Bízza ezt az ICU többesszám-szintaxisára.

Intelligens területi tartalékok svelte-i18n-locale-chain használatával

Hiányzó kulcsnál a svelte-i18n közvetlenül a fallbackLocale értékre vált — nincs köztes tartalék. Egy pt-BR felhasználó angolt lát a megfelelő pt-PT fordítás helyett. A svelte-i18n-locale-chain ezt regionális változatok üzeneteit mélyen egyesítő intelligens tartalékláncokkal javítja.

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
A svelte-i18n-locale-chain belsőleg kezeli az összes üzenetbetöltést. Ne használja vele párhuzamosan a svelte-i18n register() függvényét — az initLocaleChain végzi a regisztrációt, a betöltést és a mély egyesítést.

Fordítások automatizálása

A kész i18n-beállítással AI segítségével fordítsa le a területi fájlokat. Az IDE-ben kérje meg AI-asszisztensét a forrásfájl lefordítására, vagy használja az i18n Agent CLI-t a CI/CD-folyamatban.

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
Fordítson lépésenként: amikor új kulcsokat ad a forrásfájlhoz, az összes fájl újragenerálása helyett csak a különbséget fordítsa le. Így megmaradnak az ember által ellenőrzött fordítások.

A fordítási minőség automatizálása

Az i18n-validate segítségével még kiadás előtt találja meg a hiányzó kulcsokat és hibás helyőrzőket. Az i18n-pseudo használatával valódi fordítások beérkezése előtt tesztelje a felületet pszeudofordításokkal.

Gyakori buktatók

SSR-terület átszivárgása SvelteKitben

A svelte-i18n tárai egyke példányok. A SvelteKit SSR-ben az egyidejű kérések ugyanazt a tárat használják — az egyik felhasználó területe átszivároghat a másik válaszába. Megoldás: hívja meg a locale.set() függvényt a handle hookban vagy az elrendezés load függvényében, hogy minden kérés a megfelelő területi kontextust kapja.

register() használata svelte-i18n-locale-chain mellett

Ha svelte-i18n-locale-chain csomagot használ, ne használja a svelte-i18n register() függvényét. Az initLocaleChain belsőleg kezel minden üzenetbetöltést. A kettő keverése ismétlődő vagy ütköző betöltést okoz.

Az ICU-szintaxishibák csendben maradnak

Az ICU MessageFormat-karakterláncokban nem egyező kapcsos zárójel vagy hiányzó többesszám-kategória csendes hibát okoz — a formázott kimenet helyett a nyers üzenetkarakterlánc jelenik meg. Ellenőrizze az ICU-szintaxist a CI-folyamatban.

Lefordítatlan tartalom felvillanása

Ha a fordítások betöltése előtt rendereli a komponenseket, a felhasználók nyers kulcsokat látnak. Az üzenetek elkészültéig megjelenített betöltési állapothoz szabályozza az elrendezést a {#if $isLoading}...{:else}...{/if} kifejezéssel.

Ajánlott fájlszerkezet

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

Try i18n Agent Now

Drop your translation file here

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

or click to browse

Target languages

No signup requiredInstant estimate

Területi tartalék svelte-i18n-locale-chain használatával

Ha egy fordítási kulcs hiányzik egy regionális területi beállításból, például a pt-BR változatból, a svelte-i18n a pt szülőterület ellenőrzése helyett közvetlenül az alapértelmezett területre vált.

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',
});

A támogatott keretrendszerek és a 75 beépített lánc teljes listájáért tekintse meg Területi tartalék útmutatónkat. Learn more →

Gyakran Ismételt Kérdések