Langsys مع SvelteKit
النمط واحد في كل مكان: يجلب الخادم الكتالوج مرة واحدة (ويبقى مفتاح الكتابة على جهة الخادم)، ثم يهيّئ العميل langsys-js-svelte انطلاقًا من هذه البيانات الأولية بمفتاح للقراءة فقط — دون جلب مكرر. أما الترجمة نفسها فتتم في المتصفح: إذ يكون HTML الذي يرسله الخادم باللغة الأساسية، وهو ما تفهرسه محركات البحث أيضًا، ثم تتحول الصفحة إلى لغة الزائر أثناء تحميلها.
1 · تحميل الفهرس في +layout.server.ts
تجلب دالة load على الخادم الكتالوج مرة واحدة عند كل عرض للصفحة؛ ويُحوّله SvelteKit إلى بيانات الصفحة. يبقى مفتاح الكتابة على الخادم، ويحصل العميل على مفتاح للقراءة فقط. ويرى الطرفان الكتالوج نفسه — فقط يتخطى العميل الجلب الأولي.
// 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 · التهيئة في +layout.svelte
يُعدّ Svelte writable القياسي مخزن اللغة — ويكيّفه ارتباط Svelte لحزمة SDK. يُنفَّذ Init داخل onMount مع الفهرس المُهيَّأ مسبقًا، فلا يُجلب شيء مرتين. ويتحول النص من اللغة الأساسية إلى لغة الزائر بمجرد تشغيل 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 · استخدمه في أي مكان أدناه
من هنا يصبح الأمر هو Svelte SDK العادي: استخدم $t في أي مكوّن (فالإشارات تفي بعقد مخزن Svelte بصورة أصلية)، و$locale = 'fr-FR' يبدّل اللغة في التطبيق بأكمله.
<script>
import { t } from 'langsys-js-svelte';
</script>
<h1>{$t('Welcome to our store', 'Home')}</h1>