<Translate> — content block
Welcome to our store
Browse the catalog in your language.
langsys-js-vueBinding Vue 3 yang tipis di atas langsys-js-typescript, dibangun dari composable yang menjembatani sinyal dasar ke dalam shallowRef. Frasa di kode Anda berfungsi sekaligus sebagai kunci pencarian dan default bahasa dasar.
Add Langsys translation to this Vue app.
1. Read https://docs.langsys.dev/llms.txt, then follow
https://docs.langsys.dev/learn/sdk/vue/ 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. npm install langsys-js-vue Belum punya proyek atau kunci? Mulai Cepat memberi Anda keduanya dalam dua menit.
import { LangsysApp, createLocaleStore } from 'langsys-js-vue';
const locale = createLocaleStore('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,
}); Perlu membaca penyimpanan locale — atau sinyal SDK dasar apa pun, seperti store yang Anda bagikan di luar Vue — secara reaktif? useSignal(store) menjembataninya ke dalam shallowRef yang dapat dilacak Vue. (Svelte tidak memerlukan padanannya: sinyalnya secara native memenuhi kontrak store-nya.)
<script setup>
import { useSignal, useCurrentLocale } from 'langsys-js-vue';
// Vue tracks only its own refs — a base-SDK signal is invisible to it.
// useSignal(signal) bridges it into a shallowRef Vue can track.
const selected = useSignal(locale); // your createLocaleStore(...)
const loaded = useCurrentLocale(); // shortcut for the loaded locale
</script>
<template>
<footer>selected {{ selected }} · loaded {{ loaded }}</footer>
</template> Ubah frasa dan kategori, atur parameter sebagai kolom atau JSON mentah, lalu ganti locale dan saksikan SDK asli menerjemahkan secara langsung.
count ke 1 lalu kembali — tata bahasanya mengikuti. Frasa ini ditulis flat: Langsys menghasilkan bentuk jamak setiap lokal selama penerjemahan (termasuk lokal dasar) dan SDK memilih cabang berdasarkan count. Tidak ada yang perlu mengetik ICU. Hello, Sarah! You have 3 new messages.
const t = useT();
<p>{{ t("Hello, {name}! You have {count} new messages.", "Greetings", {"name":"Sarah","count":3}) }}</p><script setup>
import { useT } from 'langsys-js-vue';
const t = useT();
const name = 'Sarah';
</script>
<template>
<p>{{ t('Hello, {name}!', 'Greetings', { name }) }}</p>
</template> | 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. | useT() | 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. | <DontTranslate> | Tokenizer dan renderer melewati subtree tersebut; isinya tetap apa adanya sementara kalimat di sekitarnya diterjemahkan. |
Aturan praktis: string → useT() · kalimat dengan markup → <Phrase> · area markup → <Translate> · tidak boleh diubah → <DontTranslate>.
Setiap komponen konten dirender langsung di sebelah kiri; kode yang menghasilkannya di sebelah 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 blockBrowse the catalog in your language.
<script setup>
import { Translate } from 'langsys-js-vue';
</script>
<template>
<Translate category="Home">
<h3>Welcome to our store</h3>
<p>Browse the catalog in your language.</p>
</Translate>
</template> <Phrase> — params & markup<Phrase category="Cart" :params="{ name: 'Sarah', count: 3 }">
Hi %name%, you have %count% items in your cart.
</Phrase> <DontTranslate> — never translatedWelcome! This sentence always stays in English. Thanks for visiting!
<!-- 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> 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 →
<script setup>
import { useT } from 'langsys-js-vue';
const props = defineProps({ user: Object });
const t = useT();
</script>
<template>
<!-- Pass the agreement argument alongside the value it inflects.
user.gender is 'male' | 'female' | 'other'. -->
<p>{{ t('{username} has been invited', 'Team',
{ username: props.user.name, username_gender: props.user.gender }) }}</p>
</template> 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.
Ambil katalog di server (Nuxt) dan serahkan ke klien, sehingga SDK mulai tanpa perlu mengambilnya lagi. SDK menerjemahkan di browser, jadi HTML hasil render server masih dalam bahasa dasar sampai SDK dimulai.
// Nuxt: the server plugin 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',
});