TypeScript langsys-js-typescript

Das frameworkunabhängige Basis-SDK – reines TypeScript oder JavaScript, kein Framework erforderlich. Die Bindings für React, Vue und Svelte sind dünne Wrapper um dieses Paket; hier steuert es das DOM direkt. Überall gilt dieselbe Regel: Die Phrase in Ihrem Code ist zugleich der Schlüssel für die Suche und der Standardtext in der Basissprache.

Sie verwenden einen KI-Coding-Agenten? Geben Sie ihm diesen Prompt
Add Langsys translation to this TypeScript app.

1. Read https://docs.langsys.dev/llms.txt, then follow
   https://docs.langsys.dev/learn/sdk/typescript/ 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-typescript

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

Initialisieren

import { LangsysApp, createSignal } from 'langsys-js-typescript';

const locale = createSignal('en-US');

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

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

t() — Inline-String, mit dem DOM verbunden Quelle anzeigen ↗
import { t, tSignal } from 'langsys-js-typescript';

const greeting = document.querySelector('#greeting');
const name = 'Sarah';

// tSignal re-emits a fresh t() whenever the locale or catalog
// changes — subscribe once and the element stays translated.
tSignal.subscribe(() => {
  greeting.textContent = t('Hello, {name}!', 'Greetings', { name });
});

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. translate="no" 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 → translate="no".

Jeder Vanilla-DOM-Handler läuft links live; der Code, der ihn einbindet, steht rechts.

Ansehen Die Demo-Ausschnitte zu diesen Primitiven finden sich vorerst auf der Svelte-Seite – die Oberfläche ist identisch, nur die Syntax unterscheidet sich: <Translate> (1:04) · <Phrase> (1:06) · <DontTranslate> (0:34).

Translate — content block

Welcome to our store

Browse the catalog in your language.

Übersetzen – Inhaltsblock Quelle anzeigen ↗
import { Translate } from 'langsys-js-typescript';

// <section id="hero">
//   <h3>Welcome to our store</h3>
//   <p>Browse the catalog in your language.</p>
// </section>
new Translate(document.querySelector('#hero'), { category: 'Home' });

Phrase — params & markup

Hi {name}, you have {count} items in your cart.

Phrase – Parameter & Markup Quelle anzeigen ↗
import { Phrase } from 'langsys-js-typescript';

// <p id="cart-note">Hi {name}, you have {count} items in your cart.</p>
new Phrase(document.querySelector('#cart-note'), {
  category: 'Cart',
  params: { name: 'Sarah', count: 3 },
});

translate="no" — never translated

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

translate="no" — never translated Quelle anzeigen ↗
// The standard translate="no" attribute — the tokenizer
// and renderer skip the subtree, so it stays verbatim while
// the sentence around it translates.
// <p id="signin">Welcome! <span translate="no">This sentence always stays in English.</span> Thanks for visiting!</p>
new Translate(document.querySelector('#signin'), { category: 'Tour' });

Genusübereinstimmung

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
import { t } from 'langsys-js-typescript';

// Pass the agreement argument alongside the value it inflects.
t('{username} has been invited', 'Team', {
  username: user.name,
  username_gender: user.gender, // 'male' | 'female' | 'other'
});

Sie kennen das Geschlecht nicht? Übergeben Sie 'other' explizit – das ist der neutrale Zweig. Fehlt der Wert trotzdem, verwendet das SDK automatisch den other-Zweig (langsys-js-typescript ab Version 0.6.4), sodass der Satz weiterhin korrekt klingt. TypeScript lehnt username_gender in einem Inline-Parameterobjekt derzeit ab (Fehler TS2353; ein Fix wird geprüft). Bis dieser verfügbar ist, erstellen Sie das Parameterobjekt zuerst und übergeben Sie die Variable.

Serverseitiges Rendering

Rufe den Katalog auf dem Server ab und übergib ihn an den Client, damit das SDK startet, ohne ihn erneut abzurufen. Das SDK übersetzt im Browser, daher liegt das auf dem Server gerenderte HTML bis zum Start des SDK in der Basissprache vor.

// The server fetches the catalog; the client init starts from it
// instead of fetching it again, and translates once it runs.
LangsysApp.init({
  projectid, key,
  UserLocaleStore: locale,
  initialTranslations,        // fetched on the server
  initialTranslationsLocale,  // fetched on the server
  ssrTokenStrategy: 'client',
});
Dokumentation & Learning Center durchsuchen