Langsys con SvelteKit

Lo schema è lo stesso ovunque: il server recupera il catalogo una sola volta (la chiave di scrittura resta lato server) e il client inizializza langsys-js-svelte da quel seed con una chiave di sola lettura, senza un secondo recupero. La traduzione vera e propria avviene nel browser: l'HTML inviato dal server è nella lingua di base, che è anche quella indicizzata dai motori di ricerca, e la pagina passa alla lingua del visitatore durante il caricamento.

1 · Carica il catalogo in +layout.server.ts

La funzione load del server recupera il catalogo una sola volta per ogni rendering della pagina; SvelteKit lo serializza nei dati della pagina. La chiave di scrittura resta sul server; il client riceve una chiave di sola lettura. Entrambe le parti vedono lo stesso catalogo: il client salta semplicemente il recupero iniziale.

// 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 · Inizializza in +layout.svelte

Un normale writable di Svelte è lo store della lingua: il binding Svelte lo adatta per l'SDK. L'inizializzazione viene eseguita in onMount con il catalogo precaricato, quindi nulla viene recuperato due volte. Il testo passa dalla lingua di base a quella del visitatore dopo l'esecuzione di 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 · Usalo ovunque qui sotto

Da qui in poi è il normale SDK Svelte: $t in qualsiasi componente (i signal soddisfano nativamente il contratto degli store di Svelte), e $locale = 'fr-FR' cambia la lingua in tutta l'app.

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

<h1>{$t('Welcome to our store', 'Home')}</h1>
Cerca nella documentazione e nel Learning Center