Svelte langsys-js-svelte

Eine schlanke Svelte-5-Anbindung auf Basis von langsys-js-typescript – der ausgereiften, kanonischen Anbindung. Die Basis-Signale erfüllen bereits den Store-Vertrag von Svelte, sodass Übersetzungen mit der $-Store-Syntax gelesen werden.

Ansehen · 1:00 Svelte: die Schritt-für-Schritt-Anleitung
Sie verwenden einen KI-Coding-Agenten? Geben Sie ihm diesen Prompt
Add Langsys translation to this Svelte app.

1. Read https://docs.langsys.dev/llms.txt, then follow
   https://docs.langsys.dev/learn/sdk/svelte/ for the install and setup.
2. The English text in the code is the translation key. Wrap user-facing
   strings as they are: no keys file, no extraction step, and no
   hand-written plural or gender branches (Langsys generates those).
3. Read the Langsys project id and API key from environment variables.
   The write key is for development and servers only; anything shipped
   to the browser gets the read-only key.
4. Keep brand names and user-generated content out of translation.

Installieren

npm install langsys-js-svelte

Noch kein Projekt und keine Schlüssel? Mit dem Schnellstart haben Sie beides in zwei Minuten.

Initialisieren

import { writable } from 'svelte/store';
import { LangsysApp } from 'langsys-js-svelte';

const locale = writable('en-US'); // a standard Svelte writable

await LangsysApp.init({
  projectid: import.meta.env.VITE_LANGSYS_PROJECT_ID,
  key: import.meta.env.VITE_LANGSYS_API_KEY, // read-only in the browser
  UserLocaleStore: locale,
});

Interaktiver Playground

Ansehen · 1:09 t(phrase, category, params)

Bearbeiten Sie Phrase und Kategorie, legen Sie die Parameter als Felder oder als rohes JSON fest, wechseln Sie dann die Locale und sehen Sie live zu, wie das echte SDK übersetzt.

Beispiele
Parameter
Output

Hello, Sarah! You have 3 new messages.

const value = $derived($t("Hello, {name}! You have {count} new messages.", "Greetings", {"name":"Sarah","count":3}));
t() — Inline-String in einer Komponente Quelle anzeigen ↗
<script>
  import { t } from 'langsys-js-svelte';
  let name = 'Sarah';
</script>

<p>{$t('Hello, {name}!', 'Greetings', { name })}</p>

Welches soll ich verwenden?

Sie übersetzen… Verwenden Warum
Ein einfacher String in Ihrem Code – ein Label, ein Titel, eine Meldung. Parameter inklusive; schreiben Sie Anzahlen flach, und Langsys generiert die Pluralformen. $t Gibt einen String zurück. Die Phrase in Ihrem Code ist zugleich Lookup-Schlüssel und Standardtext in der Basissprache.
Ein Satz mit Inline-Markup oder dynamischen Werten, der als Ganzes erhalten bleibt. <Phrase> Inline-Elemente werden zu neutralen Tokens, sodass Übersetzer den gesamten Satz – einschließlich der Position des Markups – umstellen können, und die echten Elemente werden beim Rendern wiederhergestellt.
Ein Markup-Bereich mit mehreren Phrasen – ein Hero, ein Footer, eine Karte. <Translate> Ein einziges Tag registriert den Bereich als einen zusammenhängenden Inhaltsblock: Jeder Textabschnitt wird als eigene Phrase extrahiert, und die Markup-Struktur bleibt erhalten.
Etwas, das nie übersetzt werden darf – Markennamen, Code, IDs. <DontTranslate> Tokenizer und Renderer überspringen den Teilbaum; er bleibt unverändert, während der Satz drumherum übersetzt wird.

Faustregel: String → $t · Satz mit Markup → <Phrase> · Markup-Bereich → <Translate> · unantastbar → <DontTranslate>.

Jede Inhaltskomponente links live gerendert, der Code, der sie erzeugt, rechts – und der zugehörige Demoschnitt über dem Paar.

Ansehen · 1:04 <Translate>

<Translate> — content block

Welcome to our store

Browse the catalog in your language.

<Translate> — Inhaltsblock Quelle anzeigen ↗
<script>
  import { Translate } from 'langsys-js-svelte';
</script>

<Translate category="Home">
  <h3>Welcome to our store</h3>
  <p>Browse the catalog in your language.</p>
</Translate>
Ansehen · 1:06 <Phrase>

<Phrase> — params & markup

Hi %name%, you have %count% items in your cart.
<Phrase> — Parameter & Markup (%name%) Quelle anzeigen ↗
<Phrase category="Cart" params={{ name: 'Sarah', count: 3 }}>
  Hi %name%, you have %count% items in your cart.
</Phrase>
Ansehen · 0:34 <DontTranslate>

<DontTranslate> — never translated

Welcome! This sentence always stays in English. Thanks for visiting!

<DontTranslate> Quelle anzeigen ↗
<!-- Inside a translated region, the marked span alone stays verbatim. -->
<Translate category="Tour">
  <p>Welcome! <DontTranslate>This sentence always stays in English.</DontTranslate> Thanks for visiting!</p>
</Translate>

Genusübereinstimmung

Ansehen · 0:39 Genus-Kongruenz

Spanisch, Französisch oder Russisch flektieren {username} has been invited je nach der Person, um die es geht. Langsys generiert diese Varianten bei der Übersetzung – genauso wie Pluralformen – und das Argument trägt den Namen der Variablen mit angehängtem _gender: male, female oder other. Übergeben Sie es immer, wenn Sie es kennen. So funktioniert es und so finden Sie die Phrasen, die es benötigen →

Das Gender-Argument übergeben
<script>
  import { t } from 'langsys-js-svelte';
  export let user; // user.gender is 'male' | 'female' | 'other'
</script>

<!-- Pass the agreement argument alongside the value it inflects. -->
<p>{$t('{username} has been invited', 'Team',
    { username: user.name, username_gender: user.gender })}</p>

Sie kennen das Geschlecht nicht? Übergeben Sie 'other' ausdrücklich – das ist die neutrale Variante. Fehlt sie trotzdem, übernimmt das SDK automatisch die Variante other (langsys-js-typescript ab Version 0.6.4), sodass der Satz weiterhin korrekt klingt.

Inhaltsblöcke

Ansehen · 0:42 Inhaltsblöcke

Ein <Translate>-Bereich wird als ein Inhaltsblock registriert: Der Abschnitt wird im Translation Manager als Einheit übersetzt und geprüft, aber jeder Textabschnitt darin bleibt eine eigene Phrase. Wenn Sie denselben Satz an anderer Stelle schreiben, wird die vorhandene Übersetzung wiederverwendet.

Ein Block, drei Phrasen
<Translate category="Home">
    <h3>Welcome to our store</h3>
    <p>Browse the catalog in your language.</p>
    <p>Free shipping on orders over $50.</p>
</Translate>

Kategorien

Ansehen · 0:34 Kategorien

Andere i18n-Bibliotheken zwingen dich, für jeden String einen Schlüssel zu erfinden, weil ein Wort zwei Bedeutungen haben kann. In Langsys bleibt der Satz in deinem Code, und die Kategorie übernimmt diese Aufgabe: Der Ausdruck plus seine Kategorie ist der Schlüssel, sodass dasselbe Wort in zwei Kategorien zu zwei Übersetzungen wird.

Dasselbe Wort, zwei Bedeutungen
<!-- The phrase plus its category is the key. -->
<a href="/">{$t('Home', 'Main menu')}</a>          <!-- es: Inicio -->
<h2>{$t('Home', 'Home repairs')}</h2>           <!-- es: Hogar -->

Attribute

Ansehen · 1:07 Attribute

Ein Formular ist nur halb übersetzt, wenn sich der sichtbare Text ändert, der Platzhalter, die Bildbeschreibung und das Label für Screenreader aber auf Englisch bleiben. <Translate> erfasst sie im selben Durchgang: placeholder, alt, title, aria-label und aria-placeholder werden zusammen mit dem Text übersetzt, ganz ohne zusätzliches Markup. Alles, was mit translate="no" markiert ist, wird übersprungen, einschließlich untergeordneter Elemente.

Text und Attribute, ein Tag
<Translate category="Checkout">
    <label>Email address</label>
    <input placeholder="[email protected]" />
    <img src="/lock.svg" alt="Secure checkout" />
    <button aria-label="Place your order">
        Place order
    </button>
</Translate>

Zahlen & Datumsangaben

Ansehen · 0:46 Zahlen & Datumsangaben

Übergeben Sie Zahlen und Datumsangaben als Parameter, und das SDK formatiert sie gemäß CLDR (den Unicode-Locale-Daten) für die jeweils angezeigte Sprache: Eine Zahl läuft über Intl.NumberFormat, ein Date über Intl.DateTimeFormat. Das betrifft mehr als nur das Trennzeichen: Die Gruppierung ist eine Form, daher wird 1234567 im amerikanischen Englisch zu 1,234,567 und im indischen Englisch (en-IN) zu 12,34,567.

Die Kehrseite: Alles, was als Zahl übergeben wird, gilt als Menge. Eine Bestellnummer ist keine Menge. Übergeben Sie sie daher als String, sonst zeigt Deutsch Ihre Bestellreferenz als 1.048.576 an.

Pro Locale formatiert
<script lang="ts">
    import { t } from 'langsys-js-svelte';
    const renewsAt = new Date(2026, 2, 14); // 14 March 2026, local time
</script>

<p>{$t('Balance: {amount}', 'Billing', { amount: 1234.5 })}</p>
<p>{$t('Renews {when}', 'Billing', { when: renewsAt })}</p>

<!-- An order number is not a quantity: pass it as a string. -->
<p>{$t('Order {ref}', 'Billing', { ref: '1048576' })}</p>

Serverseitiges Rendering

Rufen Sie den Katalog auf dem Server ab (SvelteKit) und übergeben Sie ihn an den Client, damit das SDK ohne erneuten Abruf startet. Das SDK übersetzt im Browser, daher liegt das serverseitig gerenderte HTML bis zum Start in der Basissprache vor.

// SvelteKit: +layout.server.ts seeds the catalog, the client init reuses it.
LangsysApp.init({
  projectid, key,
  UserLocaleStore: locale,
  initialTranslations,        // fetched on the server
  initialTranslationsLocale,  // fetched on the server
  ssrTokenStrategy: 'client',
});
Dokumentation & Learning Center durchsuchen