TypeScript langsys-js-typescript

SDK dasar yang tidak bergantung pada framework — TypeScript atau JavaScript biasa, tanpa framework. Binding React, Vue, dan Svelte hanyalah pembungkus tipis di atas paket ini; di sini paket ini mengendalikan DOM secara langsung. Aturan yang sama di mana pun: frasa dalam kode Anda sekaligus menjadi kunci pencarian dan default bahasa dasar.

Menggunakan agen coding AI? Berikan prompt ini kepadanya
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.

Instal

npm install langsys-js-typescript

Belum punya proyek atau kunci? Mulai Cepat memberi Anda keduanya dalam dua menit.

Inisialisasi

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

Playground interaktif

Ubah frasa dan kategori, atur parameter sebagai kolom atau JSON mentah, lalu ganti locale dan saksikan SDK asli menerjemahkan secara langsung.

Contoh
Parameter
Output

t() — string inline, terhubung ke DOM Lihat sumber ↗
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 });
});

Mana yang harus saya gunakan?

Anda sedang menerjemahkan… Gunakan Mengapa
String biasa di kode Anda — label, judul, pesan. Termasuk params; tulis jumlah dalam bentuk datar dan Langsys menghasilkan bentuk jamaknya. t() Mengembalikan string. Frasa di kode Anda berfungsi sekaligus sebagai kunci pencarian dan default bahasa dasar.
Satu kalimat yang berisi markup inline atau nilai dinamis, tetap utuh. Phrase Elemen inline diubah menjadi token netral, sehingga penerjemah menyusun ulang seluruh kalimat — termasuk posisi markup — dan elemen aslinya dipulihkan saat render.
Satu area markup dengan beberapa frasa — hero, footer, kartu. Translate Satu tag mendaftarkan area tersebut sebagai satu blok konten: setiap potongan teks diekstrak sebagai frasa tersendiri dan struktur markup tetap dipertahankan.
Sesuatu yang tidak boleh diterjemahkan — nama merek, kode, ID. translate="no" Tokenizer dan renderer melewati subtree tersebut; isinya tetap apa adanya sementara kalimat di sekitarnya diterjemahkan.

Aturan praktis: string → t() · kalimat dengan markup → Phrase · area markup → Translate · tidak boleh diubah → translate="no".

Setiap handler DOM vanilla berjalan langsung di sisi kiri; kode yang menghubungkannya ada di sisi kanan.

Tonton Cuplikan demo untuk primitif ini untuk sementara ada di halaman Svelte — permukaannya identik, hanya sintaksnya yang berbeda: <Translate> (1:04) · <Phrase> (1:06) · <DontTranslate> (0:34).

Translate — content block

Welcome to our store

Browse the catalog in your language.

Terjemahkan — blok konten Lihat sumber ↗
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 Lihat sumber ↗
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 Lihat sumber ↗
// 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' });

Kesesuaian gender

Bahasa Spanyol, Prancis, atau Rusia memberi infleksi pada {username} has been invited sesuai orang yang dimaksud. Langsys menghasilkan cabang-cabang itu saat penerjemahan — dengan cara yang sama seperti menghasilkan bentuk jamak — dan argumennya dinamai sesuai variabelnya, dengan tambahan _gender: male, female, atau other. Berikan nilainya setiap kali Anda mengetahuinya. Cara kerjanya, dan cara menemukan frasa yang membutuhkannya →

Meneruskan argumen gender
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'
});

Tidak tahu gendernya? Berikan 'other' secara eksplisit — itu adalah cabang netral. Jika tidak ada pun, SDK akan mengambil cabang other untuk Anda (langsys-js-typescript 0.6.4 dan yang lebih baru), sehingga kalimat tetap terbaca dengan benar. Saat ini TypeScript menolak username_gender dalam objek parameter inline (error TS2353; perbaikannya sedang ditinjau). Sampai perbaikan itu dirilis, buat objek parameter terlebih dahulu lalu berikan variabelnya.

Rendering di sisi server

Ambil katalog di server lalu serahkan ke klien, sehingga SDK dapat mulai tanpa mengambilnya lagi. SDK menerjemahkan di browser, jadi HTML yang dirender di server tetap dalam bahasa dasar sampai SDK mulai berjalan.

// 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',
});
Cari di dokumen & Learning Center