Next.js के साथ Langsys

पैटर्न हर जगह एक ही है: सर्वर कैटलॉग को एक बार फ़ेच करता है (राइट की सर्वर-साइड ही रहती है), और क्लाइंट उसी सीड से रीड-ओनली की के साथ langsys-js-react को इनिशियलाइज़ करता है — कोई दोहरा फ़ेच नहीं। अनुवाद का काम ब्राउज़र में होता है: सर्वर जो HTML भेजता है वह मूल भाषा में होता है, जिसे सर्च इंजन इंडेक्स करते हैं, और पेज लोड होते समय विज़िटर की भाषा में बदल जाता है।

1 · कैटलॉग को सर्वर पर फ़ेच करें

एक Server Component सीधे fetch से कैटलॉग लाता है — सर्वर पर SDK की ज़रूरत नहीं है। राइट की सर्वर पर ही रहती है; क्लाइंट को सिर्फ़ पढ़ने वाली की मिलती है। दोनों हिस्से एक ही कैटलॉग देखते हैं — क्लाइंट बस शुरुआती fetch छोड़ देता है।

// 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 · क्लाइंट पर इनिशियलाइज़ करें

एक छोटा 'use client' रैपर ब्राउज़र में सीड किए गए कैटलॉग के साथ SDK को इनिशियलाइज़ करता है, इसलिए यह कुछ भी फ़ेच किए बिना शुरू हो जाता है। यह इफ़ेक्ट चलने पर टेक्स्ट बेस भाषा से विज़िटर की भाषा में बदल जाता है।

// 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 · इसे नीचे कहीं भी उपयोग करें

यहाँ से यह सामान्य React SDK ही है: किसी भी Client Component में useT(), और उसी स्टोर के ज़रिए लोकेल बदलना। पूरे ऐप के लिए एक ही लोकेल स्टोर रखें (जिसे आप init कॉल करते समय बनाते हैं) और setLocale को नीचे के कंपोनेंट तक पहुँचाएँ, असंबंधित ट्री में नए स्टोर न बनाएँ।

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

export function Hero() {
  const t = useT();
  return <h1>{t('Welcome to our store', 'Home')}</h1>;
}
डॉक्स और लर्निंग सेंटर में खोजें