Сховище локалі
Уся реактивність у Langsys залежить від одного невеликого елемента стану: сховища з поточною локаллю. Змініть її — і кожен переклад у дереві перерендериться. Без перезавантаження, без зміни маршруту.
Одне сховище керує всім
Ви передаєте LangsysApp.init() об’єкт UserLocaleStore — реактивне значення, що містить рядок локалі. Це те, що у вашому фреймворку називають реактивним: сигнал Langsys, writable у Svelte або ref у Vue. Запишіть у нього значення — і SDK заново визначить кожен t(), <Translate> та <Phrase> відповідно до нової локалі.
import { LangsysApp, createLocaleStore } from 'langsys-js-react';
const locale = createLocaleStore('en-US'); // one reactive store
await LangsysApp.init({
projectid,
key, // read-only in the browser
UserLocaleStore: locale,
});
// Later — anywhere in the app:
locale.set('es-ES'); // every t(), <Translate>, <Phrase> re-renders Кожен фреймворк читає її нативно
Реактивна внутрішня логіка відрізняється в різних фреймворках, але модель однакова — єдине джерело істини для активної локалі, представлене через звичні вам підходи.
// React — a hook returns the current t, re-rendering on change
const t = useT();
// Vue — a composable ref, auto-unwrapped in templates
const t = useT();
// Svelte — a store, auto-subscribed with $
$t('Hello, {name}!', 'Greetings', { name }); Перемикання перекладає наново на місці
Коли сховище змінюється, SDK отримує каталог нової локалі — одним запитом, без перезавантаження сторінки — і повторно перекладає все, щойно він надходить. До цього часу сторінка зберігає мову, яку відображала, тож нічого не повертається до вихідного тексту.
Інтерполяція та множина
Параметри підставляються в {placeholders}. Речення з кількістю залишаються у вашому коді простими: Langsys генерує форми множини для кожної мови під час перекладу, а SDK відображає відповідну гілку — під час рендерингу, в активній локалі.
t('You have {count} items', 'Cart', { count });
// You write that one flat sentence. Langsys generates each locale's plural
// forms during translation, and the SDK renders the branch your count matches:
// en → "1 item" / "3 items" · es → "1 artículo" / "3 artículos" Фішка пліч-о-пліч. Усі прив’язки делегують роботу одному спільному ядру langsys-js-typescript, тож одне сховище може одночасно керувати React, Vue і Svelte — саме так демо порівняння синхронізує всі три з одного перемикача.
Спробуйте вживу: інтерактивний майданчик дозволяє редагувати фразу та параметри, перемикати локаль і дивитися, як справжній SDK перекладає її знову.