Langsys із SvelteKit

Шаблон скрізь однаковий: сервер один раз отримує каталог (ключ запису залишається на стороні сервера), а клієнт ініціалізує langsys-js-svelte із цього початкового набору за допомогою ключа лише для читання — без повторного завантаження. Сам переклад відбувається в браузері: HTML, який надсилає сервер, написаний базовою мовою, і саме його індексують пошукові системи, а під час завантаження сторінка перемикається на мову відвідувача.

1 · Завантажте каталог у +layout.server.ts

Серверна функція load отримує каталог один раз під час рендерингу сторінки; SvelteKit серіалізує його в дані сторінки. Ключ запису залишається на сервері, а клієнт отримує ключ лише для читання. Обидві частини бачать той самий каталог — клієнт лише пропускає початкове завантаження.

// src/routes/+layout.server.ts
import { LANGSYS_API_KEY, LANGSYS_PROJECT_ID } from '$env/static/private';

export const load = async ({ fetch }) => {
  const locale = 'en-US'; // from cookie / Accept-Language
  const res = await fetch(
    `https://api.langsys.dev/api/projects/${LANGSYS_PROJECT_ID}/translations?locale=${locale}`,
    { headers: { 'x-Authorization': LANGSYS_API_KEY } }
  );
  const { data: translations } = await res.json();
  return { locale, translations };
};

2 · Ініціалізація в +layout.svelte

Стандартний Svelte writable є сховищем локалі — прив’язка Svelte адаптує його для SDK. Ініціалізація виконується в onMount із попередньо завантаженим каталогом, тож нічого не завантажується двічі. Щойно onMount відпрацює, текст перемикається з базової мови на мову відвідувача.

<!-- src/routes/+layout.svelte -->
<script>
  import { onMount } from 'svelte';
  import { writable } from 'svelte/store';
  import { LangsysApp } from 'langsys-js-svelte';
  import { PUBLIC_LANGSYS_API_KEY, PUBLIC_LANGSYS_PROJECT_ID } from '$env/static/public';

  export let data;

  const locale = writable(data.locale);

  onMount(() => {
    LangsysApp.init({
      projectid: PUBLIC_LANGSYS_PROJECT_ID,
      key: PUBLIC_LANGSYS_API_KEY, // read-only
      UserLocaleStore: locale,
      initialTranslations: data.translations,
      initialTranslationsLocale: data.locale,
      ssrTokenStrategy: 'client',
    });
  });
</script>

<slot />

3 · Використовуйте будь-де нижче

Далі це звичайний Svelte SDK: $t у будь-якому компоненті (сигнали нативно відповідають контракту сховищ Svelte), а $locale = 'fr-FR' перемикає мову в усьому застосунку.

<script>
  import { t } from 'langsys-js-svelte';
</script>

<h1>{$t('Welcome to our store', 'Home')}</h1>
Пошук у документації та Навчальному центрі