نظام إدارة المحتوى المعتمد على Git لمواقع MDX متعددة اللغات
يُحفظ المحتوى الإنجليزي في ملفات MDX داخل مستودعك، بينما تُخزن ترجمات الذكاء الاصطناعي في ملف SQLite بجوارها. يتولى Zod التحقق من صحة كليهما، ويقرأ وقت التشغيل المكتوب كل شيء عند البناء. لا حاجة لخادم CMS أو اتصال شبكة وقت الطلب.
pnpm add scribe-cms zod better-sqlite3كيف يعمل
- 1
تحديد الهيكل
أنواع المحتوى هي هياكل Zod. يمكنك تحديد الحقول التي ستُترجم، وتلك التي ستبقى بالإنجليزية فقط، وكيف ترتبط المستندات ببعضها.
// scribe.config.ts defineContentType({ id: "blog", path: "/blog/{slug}", slugStrategy: "localized", schema: z.object({ title: field.translatable(z.string().min(1)), description: field.translatable(z.string().min(50)), author: field.relation("author"), heroImage: field.structural(z.string().optional()), }), }); - 2
كتابة المحتوى
ملف MDX واحد لكل مستند، يُحفظ في مستودعك. اسم الملف هو الرابط الإنجليزي، ويتم التحقق من صحة البيانات الوصفية (frontmatter) مقابل الهيكل.
--- title: "Hello, world" description: "A first post that says hello to the world." author: jane publishedAt: "2026-01-15" --- The body is MDX. **Markdown** and <Components /> both work. - 3
ترجمة ما تغير
يتم تشفير المحتوى القابل للترجمة، لذلك تُرسل الصفحات المفقودة أو القديمة فقط إلى Gemini، عبر واجهة برمجة تطبيقات Batch بنصف تكلفة الرموز. الموجه مُعد خصيصاً للترجمة الإبداعية، بحيث تبدو النصوص وكأنها كُتبت باللغة الهدف. يُحلل الإخراج كـ MDX قبل تخزينه؛ وإذا كان الرد سيئاً يفشل التشغيل، ولا يتأثر موقعك.
export GEMINI_API_KEY=... npx scribe translate --locale fr de --dry-run # show the worklist npx scribe translate --locale fr de # translate, validate, store git add .scribe/store.sqlite # translations live in git - 4
قراءته بأنواع مكتوبة
يستنتج وقت التشغيل أنواع المستندات من إعداداتك. القوائم، وعمليات البحث، والعلاقات، وبدائل hreflang، وإدخالات خريطة الموقع تعود جميعها مكتوبة بالكامل.
const scribe = createScribe(config); const posts = scribe.blog.list("fr"); // BlogDoc[] const { document } = scribe.blog.resolve(slug, "fr"); // EN fallback built in const author = scribe.blog.related(document!, "author"); // AuthorDoc const hreflang = scribe.blog.alternates(document!);
ماذا ستحصل
ترجمة تدريجية
ترتبط الترجمات بتجزئة (hash) من مصدرها الإنجليزي. عدّل فقرة واحدة وسيُترجم هذا المستند فقط؛ وسيُظهر لك التشغيل التجريبي التكلفة أولاً.
يبدو وكأن كاتباً محلياً كتبه
صُمم الموجه للترجمة الإبداعية، بصوت كاتب إعلانات محلي يُعيد صياغة المصطلحات بدلاً من الترجمة الحرفية.
التحقق قبل التخزين
تُحلل كل ترجمة كـ MDX ويُعاد فحصها مقابل هيكل Zod قبل تخزينها. أخطاء النموذج تُفشل الأمر، وليس الإنتاج.
مكتوب بالكامل
هياكل Zod، أنواع مستندات مستنتجة، ولا يوجد توليد أكواد. تعود العلاقات مفككة ومكتوبة بالكامل.
رموز مدمجة
تُدمج الروابط والأصول والسلاسل غير القابلة للترجمة مباشرة في النصوص. عدّل رمزاً واحداً وسيتم تحديث كل لغة على الفور دون الحاجة لإعادة الترجمة.
تحسين محركات البحث (SEO) مدمج
بدائل hreflang، وخرائط الموقع مع x-default، والروابط الأساسية (canonicals)، وعلامة noindex، وقواعد إعادة التوجيه JSON، وسلاسل اللغات البديلة.
كل شيء في Git
ملفات MDX مع مخزن SQLite واحد. تسجل اللقطات المصدر الذي أُخذت منه كل ترجمة؛ ويعرض سجل Scribe التسلسل الزمني.
بدون خادم
يُقرأ كل شيء من القرص عند البناء؛ ويعمل مع Next.js، أو Astro، أو أي بيئة Node. يضيف الاستوديو المحلي إمكانيات التصفح والبحث ومعرفة التغطية بنظرة سريعة.
مصمم ليكون أولويته الذكاء الاصطناعي
تقرأ الوكلاء وتحرر MDX بنفس الأدوات التي تستخدمها في كتابة الأكواد، وكل تغيير هو فرق تراجعه بنفسك. لا توجد واجهة برمجة تطبيقات بين النموذج والكلمات.
مبني بشفافية
نظام scribe-cms مرخص بموجب MIT ويُطور على GitHub. يعمل هذا الموقع بواسطته. كل صفحة هنا هي محتوى scribe، مع مخزن SQLite مخصص يدعم عشر لغات. اقرأ المصدر، أو افتح مشكلة، أو أرسل طلب سحب.