Nuxt के साथ Langsys

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

1 · एक सर्वर रूट कैटलॉग को प्रॉक्सी करता है

एक Nitro रूट कैटलॉग फ़ेच करता है ताकि राइट की निजी रनटाइम कॉन्फ़िग में ही रहे — ब्राउज़र केवल आपके अपने /api रूट से ही संवाद करता है। राइट की सर्वर पर रहती है; क्लाइंट को रीड-ओनली की मिलती है। दोनों हिस्से एक ही कैटलॉग देखते हैं — क्लाइंट बस शुरुआती फ़ेच छोड़ देता है।

// server/api/langsys.get.ts
export default defineEventHandler(async (event) => {
  const config = useRuntimeConfig();
  const locale = (getQuery(event).locale as string) ?? 'en-US';
  const res = await $fetch<{ data: unknown }>(
    `https://api.langsys.dev/api/projects/${config.langsysProjectId}/translations`,
    { query: { locale }, headers: { 'x-Authorization': config.langsysApiKey } }
  );
  return { locale, translations: res.data };
});

2 · SSR के दौरान सीड करें, क्लाइंट पर इनिशियलाइज़ करें

useAsyncData सर्वर पर फ़ेच चलाता है और पेलोड को पेज में सीरियलाइज़ कर देता है, ताकि क्लाइंट दोबारा फ़ेच किए बिना उसी से शुरू हो सके। Init onMounted में चलता है — SDK एक ब्राउज़र SDK है; Nuxt का सर्वर वाला हिस्सा केवल डेटा उपलब्ध कराता है।

<!-- app.vue -->
<script setup lang="ts">
import { LangsysApp, createLocaleStore } from 'langsys-js-vue';
import type { iCategories } from 'langsys-js-vue';

const { data } = await useAsyncData('langsys', () =>
  $fetch('/api/langsys', { query: { locale: 'en-US' } })
);

const store = createLocaleStore(data.value!.locale);

onMounted(() => {
  LangsysApp.init({
    projectid: useRuntimeConfig().public.langsysProjectId,
    key: useRuntimeConfig().public.langsysApiKey, // read-only
    UserLocaleStore: store,
    initialTranslations: data.value!.translations as iCategories,
    initialTranslationsLocale: data.value!.locale,
    ssrTokenStrategy: 'client',
  });
});
</script>

<template>
  <NuxtPage />
</template>

3 · इसे नीचे कहीं भी उपयोग करें

यहाँ से यह सादा Vue SDK है: किसी भी कंपोनेंट में useT(), और लोकेल बदलने के लिए store.set()। अगर आपके ऐप में लोकेल पहले से किसी ref (Pinia, useState) में है, तो createLocaleStore पर माइग्रेट करने के बजाय उसे Vue बाइंडिंग के refToLocaleSource से जोड़ लें।

<script setup>
import { useT } from 'langsys-js-vue';
const t = useT();
</script>

<template>
  <h1>{{ t('Welcome to our store', 'Home') }}</h1>
</template>
डॉक्स और लर्निंग सेंटर में खोजें