استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تاريخ الإصدارات
- "Init doc — @intlayer/analytics package, provider/node-level tracking, A/B testing, dashboard"v9.0.08/7/2026
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزيةIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
توثيق Intlayer Analytics
@intlayer/analytics هي حزمة مساعدة اختيارية تخبرك بالمحتوى الذي يتم عرضه بالفعل لزوارك — أي صفحة، بأي لغة (locale)، وأي جزء محدد من المحتوى المترجم — حتى تتمكن من فهم جمهورك وإجراء اختبارات A/B على المحتوى.
جدول المحتويات
ما الذي يتم تتبعه
تجمع حزمة @intlayer/analytics ثلاثة أنواع من الأحداث المجهولة في دفعات:
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| الحدث (Event) | أين يتم التقاطه | ماذا يخبرك |
|---|---|---|
page_view | على مستوى المزود (IntlayerProvider) | أي صفحة ولغة شاهدتها الجلسة، عند التحميل الأولي، أو تغيير المسار، أو تبديل اللغة. |
content_exposure | على مستوى العقدة (useIntlayer / إضافات المفسر) | أي مفتاح قاموس / مسار مفتاح تم حله وعرضه بالفعل — وإذا كان جزءًا من تجربة، أي متغير (variant) تم عرضه. |
conversion | أينما تستدعي useConversion() | هدف تم تحقيقه (تسجيل، نقرة، شراء...) يُنسب إلى متغير A/B الذي تعرضت له الجلسة. |
يتم جمع الأحداث في الذاكرة وإرسالها كـ طلب دفعة واحد كل 20 ثانية تقريبًا — وليس عند كل ضغطة زر أو كل عملية تصيير (render) — لذا فإن التحليلات لا تؤثر أبدًا على وقت التصيير الأول ولا تضيف طلبًا عند كل تفاعل.
كيف يدعم اختبارات A/B على المحتوى
يسمح لك Intlayer بالفعل بتعريف متغيرات المحتوى (Variants) (على سبيل المثال، قاموس hero-banner مع متغير control ومتغير black_friday). حزمة @intlayer/analytics تغلق الدائرة:
- دالة
getVariant(experimentKey, variants)تخصص بشكل حتمي كل جلسة مجهولة لمتغير — وهي دالة بحتة تعتمد على معرف الجلسة ومفتاح التجربة، لذا فإن التخصيص يكون مستقرًا طوال الجلسة ولا يتطلب أي اتصال بالخادم (server round-trip) قبل التصيير الأول (بدون وميض، وبدون تحول في التخطيط). - كل حدث
content_exposureيحمل الـvariantالذي تم عرضه. - تتيح لك
useConversion()نسبة هدف (مثل"cta_click") إلى ذلك المتغير. - تقارن نقطة نهاية (endpoint) نتائج التجربة في لوحة التحكم معدلات التحويل لكل متغير، بما في ذلك الدلالة الإحصائية (اختبار z).
التثبيت
حزمة @intlayer/analytics هي تبعية نظيرة واختيارية (peer, optional) — لا يتم تثبيتها تلقائيًا أبدًا بواسطة حزم إطارات العمل. أضفها جنبًا إلى جنب مع intlayer:
نسخ الكود إلى الحافظة
npm install @intlayer/analyticsإذا لم تقم بتثبيتها، فإن كل نقطة تكامل تتحول إلى عملية لا تفعل شيئًا (no-op) — انظر تكلفة صفرية عند عدم التثبيت أدناه.
التكوين (Configuration)
التحليلات تعيد استخدام كتلة التكوين editor الحالية — لا يوجد مخطط تكوين analytics منفصل لملئه:
نسخ الكود إلى الحافظة
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
backendURL: "https://back.intlayer.org", // يستخدم أيضًا كنقطة نهاية لاستيعاب أحداث التحليلات
clientId: "your-client-id", // يستخدم أيضًا كمفتاح مشروع التحليلات
clientSecret: "your-client-secret",
},
};
export default config;editor.backendURL— عنوان URL الأساسي الذي يتم إرسال أحداث التحليلات إليه (POST {backendURL}/api/analytics/events).editor.clientId— مفتاح المشروع العام المنسوب إلى كل حدث يتم استيعابه. وهو يعمل أيضًا كـ مفتاح تفعيل: تظل التحليلات معطلة تمامًا (ومحذوفة كتعليمات برمجية ميتة، انظر أدناه) حتى يتم تكوينclientId.
إذا قمت بالاستضافة الذاتية لـ Intlayer (self-host)، فإن التحليلات تشير تلقائيًا إلى النسخة الخاصة بك لأنها تتشارك editor.backendURL.
دعم إطارات العمل
التحليلات مدمجة في IntlayerProvider المشترك من react-intlayer، لذا فهي متاحة اليوم في أي مكان يُستخدم فيه هذا المزود:
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| إطار العمل (Framework) | الحالة (Status) |
|---|---|
| React | ✅ متاح |
Next.js (next-intlayer) | ✅ متاح (عبر react-intlayer) |
React Native / Expo (react-native-intlayer) | ✅ متاح (عبر react-intlayer) |
| Vue, Svelte, Angular, Solid, Preact, Lit, Astro, Vanilla | 🚧 مخطط له — نفس العميل، ارتباطات على مستوى المزود تتبع نمط إطلاق @intlayer/editor |
الاستخدام
التتبع التلقائي على مستوى المزود
لا توجد تغييرات برمجية مطلوبة. بمجرد تثبيت @intlayer/analytics وتكوين editor.clientId، يقوم IntlayerProvider تلقائيًا بـ:
- تهيئة عميل التحليلات عند التحميل (mount)،
- تسجيل
page_viewعند التحميل الأولي، - تسجيل
page_viewعند كل تغيير في اللغة (locale)، - بدء حلقة الإرسال كل ~20 ثانية وإرسال أي أحداث متبقية عند إزالة التحميل / إغلاق التبويب (عبر
navigator.sendBeacon، مع العودة إلىfetch(..., { keepalive: true })).
التتبع التلقائي على مستوى العقدة (Node)
في كل مرة يقوم فيها useIntlayer بحل جزء من المحتوى لعرضه، يقوم المفسر بالإبلاغ عن حدث content_exposure لذلك الـ dictionaryKey المحدد + مسار المفتاح + اللغة — مرة أخرى، لا توجد تغييرات برمجية مطلوبة. يتم تجميع مرات العرض المتكررة لنفس العقدة داخل نافذة الإرسال في حدث واحد مع count (عدد)، لذلك فإن القائمة التي تتم إعادة تصييرها 50 مرة لا ترسل 50 حدثًا.
تتبع التحويلات (Conversions) لاختبارات A/B
استخدم useConversion() لنسبة هدف إلى المتغير الذي شاهدته الجلسة:
حل متغير على جانب العميل
الخصوصية والأداء
- مجهول حسب التصميم: يتم تحديد الجلسات بواسطة معرّف متغير (rotating id)؛ وتقوم الواجهة الخلفية (backend) دائمًا بتخزين تجزئة SHA-256 فقط لهذا المعرف — ولا تقوم أبدًا بتخزين المعرف الخام، ولا تقوم أبدًا بتخزين عنوان IP.
- الموقع تقريبي: فقط رمز الدولة، المستمد من رؤوس تحديد الموقع الجغرافي الخاصة بشبكة CDN (مثل
cf-ipcountry،x-vercel-ip-country، ...) — لا يتم قراءة أو تخزين أي IP. - تستبعد عناوين URL معلمات البحث افتراضيًا، لذلك لا يتم التقاط سلاسل الاستعلام (query strings) أبدًا.
- أخذ العينات (Sampling): يتيح لك
sampleRateالاحتفاظ بجزء بسيط فقط من أحداث عرض المحتوى في التطبيقات ذات حركة المرور العالية. - معالجة مجمعة (Batched): طلب واحد تقريبًا كل 20 ثانية (
flushInterval)، أو في وقت مبكر إذا امتلأت الذاكرة المؤقتة (maxBufferSize) — لا يتم أبدًا إرسال طلب واحد لكل حدث.
تكلفة صفرية عند عدم التثبيت
تتبع @intlayer/analytics نفس نمط التبعية الاختيارية المتبع في @intlayer/editor:
- تقوم كل نقطة تكامل بتحميل الحزمة عبر استيراد ديناميكي
import()مغلف بـtry/catch— التطبيق الذي لم يقم أبدًا بتثبيت@intlayer/analyticsلا يدفع أي تكلفة لحجم الحزمة أو وقت التشغيل، ولا يرى خطأ أبدًا؛ - متغير البيئة في وقت التجميع (
INTLAYER_ANALYTICS_ENABLED)، والذي يتم تعيينه تلقائيًا إلى'false'بواسطة@intlayer/configكلما لم يتم تكوينeditor.clientId، يسمح للمجمعين (bundlers) بـ إزالة التعليمات البرمجية الميتة (dead-code-eliminate) للتكامل بأكمله؛ - يتم تعطيل التحليلات داخل نافذة إطار المعاينة (iframe) الخاصة بمحرر Intlayer / CMS، لذا لا يتم حساب جلسات المحرر كحركة مرور حقيقية أبدًا.
لوحة التحكم (Dashboard): صفحة التحليلات
بمجرد أن يجمع مشروعك الأحداث، فإن صفحة التحليلات (Analytics) في لوحة تحكم Intlayer (تظهر في الشريط الجانبي بمجرد تحديد المشروع) تعرض:
- المستخدمين النشطين — الزوار الفريدين خلال النافذة الزمنية المحددة (7 / 30 / 90 يومًا).
- المستخدمين اليوم و المستخدمين خلال آخر 7 أيام.
- مشاهدات الصفحة خلال النافذة المحددة.
- رسم بياني للتطور للزوار الفريدين اليوميين.
- علامات تبويب لتحليل اللغات (Locales) و الموقع (Location)، مما يصنف جمهورك حسب اللغة وحسب البلد.
مرجع واجهة برمجة تطبيقات الواجهة الخلفية (Backend API)
تتطلب جميع نقاط نهاية القراءة المصادقة؛ استيعاب البيانات عام وينسب إلى clientId.
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| الطريقة (Method) | نقطة النهاية (Endpoint) | الوصف (Description) |
|---|---|---|
POST | /api/analytics/events | استيعاب دفعة من الأحداث (عام، يُنسب بواسطة clientId في جسم الطلب). |
GET | /api/analytics/overview | إجماليات الصفحة/اللغة للمشروع الموثق. |
GET | /api/analytics/audience?days=30 | زوار فريدون، مشاهدات الصفحة، سلاسل يومية، تفصيلات اللغة + البلد. |
GET | /api/analytics/content-stats | إجماليات عرض كل محتوى، مجمعة حسب مفتاح القاموس / مسار المفتاح / اللغة. |
GET | /api/analytics/experiments/:experimentKey | معدلات التحويل لكل متغير والدلالة الإحصائية لتجربة A/B. |
يمكنك أيضًا استدعاء هذه النقاط برمجيًا باستخدام CMS SDK:
نسخ الكود إلى الحافظة
import { createIntlayerCMS } from "@intlayer/api";import { analyticsEndpoint } from "@intlayer/api/analytics";const cms = createIntlayerCMS();const { data: audience } = await analyticsEndpoint(cms).getAudience(30);