ذاكرة الترجمة
ذاكرة الترجمة (TM) هي طبقة التخزين المؤقت المدمجة في champollion. تقوم بتخزين كل ترجمة باستخدام مفتاح مكوّن من النص المصدر + اللغة + الطريقة، بحيث أن إعادة تشغيل sync لا تستدعي واجهة برمجة التطبيقات (API) إلا للمفاتيح التي تغيّرت فعلياً.
لماذا توجد ذاكرة الترجمة
بدون ذاكرة الترجمة، تقوم كل عملية sync بإعادة ترجمة كل مفتاح معدَّل — حتى لو كنت قد ترجمت نفس النص الإنجليزي بالضبط لنفس اللغة في تشغيل سابق. السيناريوهات الشائعة التي يهدر فيها هذا المال:
| السيناريو | بدون ذاكرة الترجمة | مع ذاكرة الترجمة |
|---|---|---|
| إعادة تشغيل المزامنة بعد تغيير مفتاح واحد (500 مفتاح × 10 لغات) | 5,000 استدعاء API | 10 استدعاءات API |
| إرجاع مفتاح إلى قيمة إنجليزية سابقة | استدعاء API كامل | إصابة فورية في الذاكرة المؤقتة |
| ظهور نفس العبارة في 3 ملفات لغوية | 3 × استدعاءات API | استدعاء API واحد + إصابتان في الذاكرة المؤقتة |
| تشغيل تجريبي ← مزامنة حقيقية | استدعاءات API كاملة في كلتيهما | التشغيل الأول يخزّن مؤقتاً، والثاني يعيد الاستخدام |
ذاكرة الترجمة مفعّلة افتراضياً ولا تتطلب أي إعداد. تُخزَّن الترجمات مؤقتاً بشكل تلقائي أثناء كل sync وتُقدَّم في عمليات التشغيل اللاحقة.
كيف تعمل
مفتاح التخزين المؤقت
كل إدخال في ذاكرة الترجمة يُعرَّف بمفتاح هو تجزئة SHA-256 لثلاث قيم:
SHA-256( sourceValue + '\x00' + locale + '\x00' + method )
| المكوّن | سبب وجوده في المفتاح |
|---|---|
sourceValue | نص إنجليزي مختلف ← ترجمة مختلفة |
locale | كلمة "Hello" تُترجم بشكل مختلف إلى الفرنسية مقارنة باليابانية |
method | مخرجات Google Translate ≠ مخرجات GPT-4o |
الفاصل بالبايت الصفري (\x00) يمنع التصادم بين "ab" + "c" و"a" + "bc".
أثناء المزامنة
- قبل استدعاء واجهة برمجة تطبيقات الترجمة، يقوم champollion بتقسيم المفاتيح إلى إصابات في ذاكرة الترجمة وإخفاقات في ذاكرة الترجمة
- تُقدَّم الإصابات فوراً من الذاكرة المؤقتة — بلا استدعاء API، وبلا تأخير، وبلا تكلفة
- تمر الإخفاقات عبر مسار الترجمة الاعتيادي
- تُخزَّن الترجمات الجديدة الواردة من واجهة برمجة التطبيقات في ذاكرة الترجمة لعمليات التشغيل المستقبلية
- تمر جميع الترجمات (المخزّنة مؤقتاً + الجديدة) عبر بوابة الجودة
التخزين
تُخزَّن ذاكرة الترجمة في .champollion/tm.json في جذر مشروعك. يستخدم الملف صيغة JSON مضغوطة (بدون تنسيق جمالي) للحفاظ على حجم معقول. يخزّن كل إدخال:
| الحقل | الوصف |
|---|---|
t | النص المترجَم |
ts | طابع زمني بصيغة ISO-8601 لوقت تخزينه المؤقت |
l | رمز اللغة الهدف (للإحصاءات/التصفية) |
m | اسم طريقة الترجمة (للإحصاءات/التصفية) |
عند 50 لغة × 500 مفتاح = 25,000 إدخال، يُفترض أن يكون حجم الملف نحو 2-3 ميجابايت.
إدارة الذاكرة المؤقتة
عرض الإحصاءات
champollion tm stats
يعرض عدد الإدخالات وحجم الملف وتفصيلاً لكل لغة:
Translation Memory — .champollion/tm.json
Entries: 2,847
File size: 1.2 MB
Created: 2026-05-20
Last entry: 2026-05-24
By locale:
fr 482 entries (llm: 380, llm-coached: 102)
de 471 entries (llm: 471)
ja 465 entries (llm: 465)
مسح الذاكرة المؤقتة
# Clear everything (with confirmation prompt)
champollion tm clear
# Clear without prompt (CI environments)
champollion tm clear --yes
# Clear only one locale
champollion tm clear --locale fr
تخطي ذاكرة الترجمة لتشغيل واحد
# Force fresh API calls for all keys (useful when switching providers)
champollion sync --no-tm
هذا لا يحذف الذاكرة المؤقتة — بل يتجاهلها فقط لهذا التشغيل ولا يخزّن نتائج جديدة.
متى لا تكون ذاكرة الترجمة مفيدة
لن تُنتج ذاكرة الترجمة إصابة في الذاكرة المؤقتة عندما:
- يتغيّر النص المصدر — تتغيّر التجزئة، فتكون النتيجة إخفاقاً
- تتغيّر الطريقة — التبديل من
llmإلىgoogle-translateيعني مفاتيح تخزين مؤقت مختلفة - التشغيل الأول — بداية باردة، لا توجد إدخالات بعد
- علم
--no-tm— يتجاوز الذاكرة المؤقتة بشكل صريح
هل ينبغي عليك إيداع .champollion/tm.json؟
عموماً لا. ذاكرة الترجمة هي تحسين محلي للمطوّر. تُملأ تلقائياً أثناء المزامنة ولا تفيد إلا عند إعادة تشغيل المزامنة على نفس الجهاز. ومع ذلك، قد تفكر في إيداعها إذا:
- كان فريقك يشارك مشغّل CI واحداً يقوم بمزامنة الترجمات
- كنت تريد عمليات بناء قابلة لإعادة الإنتاج دون استدعاءات API
- كنت تؤرشف الترجمات لأغراض الامتثال
أضف .champollion/tm.json إلى .gitignore للاستخدام الاعتيادي.
انظر أيضاً
- كيف تعمل المزامنة — موقع ذاكرة الترجمة في مسار العمل
- مرجع واجهة سطر الأوامر — tm — مرجع الأوامر
- مرجع واجهة سطر الأوامر — sync --no-tm — تجاوز ذاكرة الترجمة