Nuxt ile Langsys
Desen her yerde aynıdır: sunucu kataloğu bir kez çeker (yazma anahtarı sunucu tarafında kalır) ve istemci, bu başlangıç verisinden salt okunur bir anahtarla langsys-js-vue başlatır — yinelenen çekme olmaz. Çevirinin kendisi tarayıcıda gerçekleşir: sunucunun gönderdiği HTML temel dildedir, arama motorları da bunu dizinler; sayfa yüklenirken ziyaretçinin diline geçer.
1 · Bir sunucu rotası kataloğa aracılık eder
Bir Nitro rotası kataloğu getirir, böylece yazma anahtarı özel çalışma zamanı yapılandırmasında kalır — tarayıcı yalnızca kendi /api rotanızla iletişim kurar. Yazma anahtarı sunucuda kalır; istemci salt okunur bir anahtar alır. Her iki taraf da aynı kataloğu görür — istemci yalnızca ilk getirme işlemini atlar.
// 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 sırasında besleyin, istemcide başlatın
useAsyncData veri çekme işlemini sunucuda çalıştırır ve yükü sayfaya serileştirir; böylece istemci yeniden çekmeden bundan başlatılır. Init, onMounted içinde çalışır — SDK bir tarayıcı SDK'sıdır; Nuxt'ın sunucu tarafı yalnızca veriyi sağlar.
<!-- 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 · Aşağıda her yerde kullanın
Buradan sonrası düz Vue SDK'sıdır: herhangi bir bileşende useT(), dili değiştirmek için store.set(). Uygulamanız dili zaten bir ref içinde tutuyorsa (Pinia, useState), createLocaleStore'a geçmek yerine Vue bağlayıcısının refToLocaleSource işleviyle uyarlayın.
<script setup>
import { useT } from 'langsys-js-vue';
const t = useT();
</script>
<template>
<h1>{{ t('Welcome to our store', 'Home') }}</h1>
</template>