Langsys avec Next.js

Le principe est le même partout : le serveur récupère le catalogue une seule fois (la clé d'écriture reste côté serveur), et le client initialise langsys-js-react à partir de ces données avec une clé en lecture seule, sans second appel. La traduction elle-même s'effectue dans le navigateur : le HTML envoyé par le serveur est dans la langue de base, celle-là même que les moteurs de recherche indexent, et la page bascule dans la langue du visiteur au fil de son chargement.

1 · Récupérer le catalogue côté serveur

Un composant serveur récupère le catalogue avec un fetch brut — le SDK n'est pas nécessaire côté serveur. La clé d'écriture reste sur le serveur ; le client reçoit une clé en lecture seule. Les deux côtés voient le même catalogue — le client se contente d'ignorer la récupération initiale.

// app/layout.tsx (Server Component)
import type { iCategories } from 'langsys-js-react';
import { LangsysClient } from './LangsysClient';

async function getTranslations(locale: string): Promise<iCategories> {
  const res = await fetch(
    `https://api.langsys.dev/api/projects/${process.env.LANGSYS_PROJECT_ID}/translations?locale=${locale}`,
    { headers: { 'x-Authorization': process.env.LANGSYS_API_KEY! } }
  );
  const result = await res.json();
  return result.data as iCategories;
}

export default async function RootLayout({ children }: { children: React.ReactNode }) {
  const locale = 'en-US'; // from cookie / Accept-Language / route segment
  const translations = await getTranslations(locale);

  return (
    <html lang={locale}>
      <body>
        <LangsysClient
          locale={locale}
          translations={translations}
          projectId={process.env.LANGSYS_PROJECT_ID!}
          apiKey={process.env.NEXT_PUBLIC_LANGSYS_API_KEY!} // read-only
        >
          {children}
        </LangsysClient>
      </body>
    </html>
  );
}

2 · Initialiser côté client

Un petit wrapper 'use client' initialise le SDK dans le navigateur avec le catalogue pré-chargé, de sorte qu'il démarre sans rien récupérer. Le texte passe de la langue de base à celle du visiteur lorsque cet effet s'exécute.

// app/LangsysClient.tsx
'use client';

import { useEffect, type ReactNode } from 'react';
import { LangsysApp, useLocaleStore, type iCategories } from 'langsys-js-react';

export function LangsysClient(props: {
  locale: string;
  translations: iCategories;
  projectId: string;
  apiKey: string;
  children: ReactNode;
}) {
  const [, , localeStore] = useLocaleStore(props.locale);

  useEffect(() => {
    LangsysApp.init({
      projectid: props.projectId,
      key: props.apiKey,
      UserLocaleStore: localeStore,
      initialTranslations: props.translations,
      initialTranslationsLocale: props.locale,
      ssrTokenStrategy: 'client',
    });
  }, [localeStore, props.projectId, props.apiKey, props.translations, props.locale]);

  return <>{props.children}</>;
}

3 · Utilisez-le partout ci-dessous

À partir de là, c'est le SDK React classique : useT() dans n'importe quel composant client, avec le changement de langue via le même store. Gardez un seul store de langue pour l'application (créé à l'endroit où vous appelez init) et transmettez setLocale vers le bas, plutôt que de créer de nouveaux stores dans des arborescences sans rapport.

'use client';
import { useT } from 'langsys-js-react';

export function Hero() {
  const t = useT();
  return <h1>{t('Welcome to our store', 'Home')}</h1>;
}
Rechercher dans la documentation et le centre d'apprentissage