الوثائقحزمة JavaScript7 دقيقة قراءة
حزمة JavaScript
حزمة siyak-js ملف واحد، بلا اعتماديات، وكائن واحد في المتصفح وعلى الخادم. ESM وCommonJS، وNode 18 فأحدث، وأي أداة حزم.
npm install ./siyak-js-0.1.0.tgz # the file you just downloaded
import { init } from 'siyak-js'; // ESM
const { init } = require('siyak-js'); // CommonJSالخيارات
apiKeystring- مطلوب. sk_live أو sk_test. تُفحص الصيغة محليًا قبل أن تُهدر أي طلب.
targetstring- مطلوب. وسم BCP-47 مثل ar وar-EG وhe. الوسم الخاطئ يُفشل كل طلب، لذا يُتحقق منه عند التهيئة.
sourcestring- اختياري. عند حذفه تُستخدم لغة المصدر المضبوطة على المشروع.
contextstring- افتراضي اختياري للمعنى، يُتجاوز في كل استدعاء. السياق لكل نص أفضل، فسياق عام يجعل كل النصوص في شاشة واحدة.
endpointstring- مطلوب. المضيف فقط، ويُضاف /v1 تلقائيًا؛ وانسخ العنوان المكتوب في شاشة مفاتيح API بمشروعك. لا تحمل الحزمة مضيفًا افتراضيًا عمدًا: فأي نطاقٍ بديل قد يسجّله أحدٌ لاحقًا، والمفتاح الذي يصل إليه مفتاحٌ مسرّب. وحدّده لخادمٍ محلي أو لنشرتك الخاصة.
cachefalse | {maxEntries, ttlMs}- قيمة false تحفظ الترجمات في الذاكرة فقط — وهذا ما تريده في SSR والاختبارات والصفحات التي لا تملكها. الافتراضي ألف مدخل وثلاثون يومًا.
debounceMsnumber- نافذة تجميع للطلبات الخلفية. الافتراضي 50 مللي ثانية. قلّلها إن كنت تستدعي flush() بنفسك على أي حال.
onError(e) => void- يصل هنا كل خطأ تبتلعه الحزمة: {code, message, status}.
fetchSiyakFetch- أدخل fetch مخصصًا — للاختبارات أو لبيئة بلا fetch عام.
الدوال
t(text, context?)string- متزامنة لا ترمي. الترجمة من الذاكرة أو نصّك مع طلب في الخلفية.
translate(text, context?)Promise<string>- تنتظر الشبكة، وعند أي خطأ تُجيب بنصّك الأصلي، فلا ترفض أبدًا.
preload()Promise<void>- طلب واحد يملأ الذاكرة بكل ما يعرفه المشروع.
flush()Promise<void>- ترسل ما في الطابور الآن وتنتهي عند فراغه. تُستخدم في Node والاختبارات وقبل لقطات الواجهة.
onReadyPromise<void>- تنتهي عندما يهدأ الطابور والشبكة. أعد قراءتها بعد كل دفعة استدعاءات، فهي جديدة في كل مرة.
clearCache()void- تحذف نصوص هذا الكائن من الذاكرة والتخزين.
المتصفح
main.js
const siyak = init({
apiKey: import.meta.env.VITE_SIYAK_KEY,
endpoint: import.meta.env.VITE_SIYAK_URL,
target: 'ar',
});
// Paint instantly, then repaint once the batch lands.
const render = () => document.getElementById('app')!.replaceChildren(t('Continue'));
siyak.t('Continue');
await siyak.onReady;
render();Node.js وسطر الأوامر
server.js
const siyak = init({
apiKey: process.env.SIYAK_KEY,
endpoint: process.env.SIYAK_URL,
target: 'ar',
cache: false, // no localStorage on a server
});
// A server render cannot repaint, so await the work it queues.
siyak.t('Your order has shipped');
siyak.t('Track shipment', 'screen:checkout');
await siyak.flush();
res.send(page({ continue: siyak.t('Continue') })); // warm now- Node 18+ يوفّر fetch عامًّا؛ والإصدارات الأقدم تمرّره عبر خيار fetch.
- قائمة النطاقات حارسٌ لمفاتيح المتصفح. أمّا مفتاح الخادم فلا متصفح له ليُحرس؛ فلذلك يبقى في البيئة لا داخل الحزمة.
- الخادم بلا مستخدم يعيد الرسم، فاستدعِ flush() قبل العرض — وإلا خرج النص الأصلي.
التجميع في فقرة
كل نص ناقص خلال debounceMs يخرج كطلب واحد إلى POST /v1/translate/batch على دفعات من عشرين. استدعاءان لـ t() بالنص والسياق نفسيهما طلب واحد. و402 أو 429 يوقفان الكائن بقية الجلسة: لا يجوز لتطبيق أن يُغرق الخدمة بسبب فاتورة، فتبقى النصوص بلغتها الأصلية.