الميزات العربية والثقافية
كاظمة عربية بالأصل افتراضيًا. يغطّي هذا المستند المكوّنات الثلاثة التي تطبّق ذلك: المُرمِّز العربي، وطبقة واجهة i18n + RTL، وبروتوكول المجلس الثقافي — كلها موثّقة من المصدر، مع ملاحظات صريحة عن النطاق.
1. المكوّنات الثلاثة
Section titled “1. المكوّنات الثلاثة”| المكوّن | الحزمة | الدور |
|---|---|---|
| المُرمِّز العربي | kazma-memory | تطبيع النص + فهرسة FTS5 للبحث العربي. |
| i18n + واجهة RTL | kazma-ui | ترجمة نصوص الواجهة، وضبط dir/lang لكل طلب، وسياسة الخطوط. |
| بروتوكول المجلس | kazma-core | تدفّق المحادثة الثقافي الخليجي (4 مراحل). |
هذه طبقات مستقلّة. لا يعتمد المُرمِّز على نظام i18n، والمجلس وحدة محادثية جوهرية — وليس ميزة واجهة.
2. المُرمِّز العربي
Section titled “2. المُرمِّز العربي”kazma-memory/kazma_memory/arabic_tokenizer.py (292 سطرًا). مفصَّل في الذاكرة وRAG ← المُرمِّز العربي. ملخّص خط معالجة التطبيع (normalize، الأسطر 132-165):
- إزالة التشكيل — regex
[\u064B-\u065F\u0670]. - تطبيع الألف —
أ،إ،آ→ا. - التاء المربوطة → هاء —
ة→ه. - تطبيع الياء —
ئ،ؤ،ى→ي. - إزالة التطويل/الكشيدة —
text.replace("ـ", ""). - طيّ المسافات البيضاء.
تشمل كلمات الوقف مصطلحات من اللهجة الكويتية (يلا، شلون، عشان، مو، ليه، ماكو، فد). الجذّاع تجريد بسيط للبادئات/اللواحق عبر regex (وليس lemmatizer). صنفان: ArabicTokenizer.tokenize() → سلسلة؛ ArabicTantivyTokenizer.tokenize() → قائمة.
3. طبقة i18n + واجهة RTL
Section titled “3. طبقة i18n + واجهة RTL”3.1 نظام i18n
Section titled “3.1 نظام i18n”kazma-ui/kazma_ui/i18n.py (1187 سطرًا) نظام i18n مخصّص وخفيف — ليس Babel/gettext.
- لا ملفات
ar.json/en.jsonمنفصلة. كل الترجمات مضمَّنة في dict بايثون واحدTRANSLATIONS(i18n.py:33)، بمفاتيح نصية منقوطة وقيم\{"en": ..., "ar": ...\}. - فقط
enوarيُشحَنان افتراضيًا (docstring الوحدة الأسطر 1-8). - كل مفتاح يجب أن يكون له إدخال
en؛arيعود إلى الإنجليزية إن غاب (i18n.py:1116-1119).
الواجهة البرمجية:
| الدالة | الغرض |
|---|---|
t(key, lang, **kwargs) (i18n.py:1106) | ترجمة مع استيفاء str.format. |
make_translator(lang) (i18n.py:1128) | إغلاق مربوط بلغة، لـ Jinja2. |
SUPPORTED_LANGUAGES (i18n.py:1138) | يُحسَب ديناميكيًا من الـ dict. |
ترقيع Jinja2: _patch_jinja2_templates() (i18n.py:1156) يرقّع Jinja2Templates.__init__ ليحقن دائمًا globals i18n الافتراضية (t، lang="en"، dir="ltr") حتى لا ترفع القوالب UndefinedError. يُستدعى عند تحميل الوحدة (السطر 1186).
الربط من جانب الخادم (app.py:222-248): يحقن البنّاء t، lang، dir، وtranslations_json (الـ dict الكامل كـ JSON لـ Alpine.js من جانب العميل) في globals Jinja2. language_middleware يقرأ ملف تعريف الارتباط kazma-lang ويضبط lang/dir لكل طلب.
3.2 التغطية
Section titled “3.2 التغطية”قاموس الترجمة واسع — المفاتيح تشمل nav، header، chat، dashboard، settings (كل الـ 13 تبويبًا)، swarm (عمّال، مهام، أنماط، تجميع، نتائج، توجيه، توجيه المخرجات)، agents، skills، MCP، وworkspace (بما فيها قياس GitHub عن بُعد). أمثلة: swarm.arabic_dialect (i18n.py:976)، swarm.dialect_msa (“Modern Standard Arabic” / “العربية الفصحى”، السطر 977).
3.3 معالجة RTL
Section titled “3.3 معالجة RTL”- القالب:
templates/base.html:2—<html lang="\{\{ lang|default('en') \}\}" dir="\{\{ dir|default('ltr') \}\}">. - global
dirيُضبط فيapp.py:235:"rtl" if _startup_lang == "ar" else "ltr"، يُحدَّث لكل طلب بواسطة الـ middleware. - جانب العميل:
base.html:71يحقنwindow.KAZMA_LANG؛ الأسطر 76-77 تعرضt()من جانب العميل.
3.4 سياسة الخط العربي (IBM Plex + أساس 16px لـ RTL)
Section titled “3.4 سياسة الخط العربي (IBM Plex + أساس 16px لـ RTL)”kazma-ui/kazma_ui/static/css/kazma.css — IBM Plex Sans / IBM Plex Sans Arabic هو الوجه المشترك مع المستندات المُولَّدة ووثائق Docusaurus. يبقى Amiri احتياطًا نسخيًا. حرف K هو شعار المنتج والأيقونة.
:root { --font-sans: 'IBM Plex Sans', 'IBM Plex Sans Arabic', system-ui, ...; --font-arabic: 'IBM Plex Sans Arabic', 'IBM Plex Sans', system-ui, ...; --font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', monospace;}
html { font-size: 14px; }html[dir="rtl"] { font-size: 16px; }
html[dir="rtl"] .badge,html[dir="rtl"] .metric-label,html[dir="rtl"] .text-muted,html[dir="rtl"] .text-xs { font-size: 0.82rem !important; }
[dir="rtl"] body,[dir="rtl"] input,[dir="rtl"] textarea,[dir="rtl"] button,[dir="rtl"] select { font-family: var(--font-arabic); }Plex هو الخط الأساسي لكل من اللاتينية والعربية. الأرقام الجدولية (tnum) على LTR فقط.
4. بروتوكول المجلس
Section titled “4. بروتوكول المجلس”kazma-core/kazma_core/majlis.py (348 سطرًا). موجود — مؤكَّد أثناء التدقيق (بعض الملخّصات السابقة كانت غير متأكّدة).
4.1 ما هو
Section titled “4.1 ما هو”صنف MajlisProtocol (السطر 91). من الـ docstring (الأسطر 1-12):
Majlis Protocol — Cultural conversational protocol for Gulf Arabic interactions. The Majlis (مجلس) is the traditional Gulf gathering space where conversation follows specific cultural rhythms: greetings first, then social talk, then business.
4.2 التدفّق رباعي المراحل
Section titled “4.2 التدفّق رباعي المراحل”تعداد ConversationPhase (السطر 38):
flowchart LR G[GREETING] --> S[SOCIAL] S --> T[TRANSACTION] T --> F[FAREWELL]| المرحلة | الغرض |
|---|---|
GREETING | التحية أولًا (السلام عليكم، هلا والله، شلونك). |
SOCIAL | حديث اجتماعي قبل العمل. |
TRANSACTION | المهمة/الطلب الفعلي. |
FAREWELL | لطائف الختام. |
4.3 الافتراضيات والمعدِّلات الثقافية
Section titled “4.3 الافتراضيات والمعدِّلات الثقافية”- اللهجة الافتراضية: كويتية (
dialect: str = "kw"، السطر 54). - أنماط تحية/وداع كويتية ثابتة (الأسطر 105-120):
"السلام عليكم"،"هلا والله"،"شلونك"، إلخ. - معدِّلات ثقافية (الأسطر 150-158، 287-288): رمضان، العيد، اليوم الوطني تضبط طول مرحلة التحية والرسمية.
- وحدات شقيقة:
CulturalContext،ConversationPacing/Intent/TransitionDecision،ToneAdapter/FormalityLevel(استيرادات الأسطر 21-30).
4.4 الواجهة البرمجية
Section titled “4.4 الواجهة البرمجية”process_input(text, context)(السطر 162) — نقطة دخول async، تُرجعMajlisResponse(السطر 73).
4.5 النطاق (ملاحظة صريحة)
Section titled “4.5 النطاق (ملاحظة صريحة)”يعيش المجلس في kazma-core، لا في الواجهة أو البوابة. لا يوجد مفتاح “وضع المجلس” في إعدادات الويب أو مفاتيح i18n — طبقة i18n نظام نصوص EN/AR عام. المجلس بروتوكول محادثة جوهري يُقصد ربطه بموجّه نظام الوكيل أو مهارة. إذا أوحت الوثائق بأن المجلس وضع واجهة يواجه المستخدم، فذلك غير مدعوم بكود الواجهة. توجد اختبارات عند tests/test_majlis.py، ومثال عند examples/almuhalab_custom_skills/trading_intel/.
5. توطين TUI
Section titled “5. توطين TUI”لدى TUI RTL/توطين خاص (kazma_tui/app.py):
update_localization()(السطر 512) يبدّل صنف CSSrtl-mode(السطر 520) ويترجم تسميات التبويبات (الأسطر 528-546).
عدم اتساق طفيف: تسميات TUI للوحة التحكم “لوحة القيادة” (السطر 539)؛ i18n الويب يستخدم “لوحة التحكم” (
i18n.py:77).
6. دعم اللهجات
Section titled “6. دعم اللهجات”| دليل اللهجة | أين |
|---|---|
| كلمات وقف كويتية | arabic_tokenizer.py:35-102 (يلا، شلون، عشان، مو، ليه، ماكو، فد) |
| اللهجة الافتراضية الكويتية | majlis.py:54 (dialect: str = "kw") |
| أنماط تحية/وداع كويتية | majlis.py:105-120 |
| تسمية واجهة MSA (العربية الفصحى) | i18n.py:977 (swarm.dialect_msa) |
مفتاح إعداد swarm.arabic_dialect | i18n.py:976 |
7. ملاحظات الاستخدام ثنائي اللغة
Section titled “7. ملاحظات الاستخدام ثنائي اللغة”- اللغة الافتراضية عربية (
agent.language: ar،agent.rtl: true). اضبط علىenلأولوية إنجليزية. - ملف تعريف الارتباط
kazma-langيبدّل لغة واجهة الويب لكل متصفّح دون إعادة تشغيل. system_prompt(kazma.yaml:33-45) يوجّه النموذج للرد بلغة/لهجة المستخدم.- للانتشارات ثنائية اللغة، فكّر في تقديم أمثلة EN وAR في المهارات/الأدوات حيث تهم لغة المخرجات.
ملاحظات تدقيق الوثائق
Section titled “ملاحظات تدقيق الوثائق”- المجلس موجود في
kazma-core/kazma_core/majlis.py(348 سطرًا، مع اختبارات ومثال) — مؤكَّد مقابل عدم يقين سابق. - المجلس ليس ميزة واجهة. لا مفتاح إعدادات ولا مفتاح i18n لـ “وضع المجلس.” هو بروتوكول محادثة جوهري يُربَط بالموجّهات/المهارات.
- لا ملفات ترجمة منفصلة. كل سلاسل EN/AR تعيش مضمَّنة في
i18n.py. يضيف المساهمون مفتاحًا بتحرير الـ dict. - عدم اتساق تسمية لوحة التحكم بين TUI (“لوحة القيادة”) والويب (“لوحة التحكم”) — طفيف، يستحق المواءمة لاحقًا.
- المُرمِّز ↔ i18n مستقلّان. لا تفترض أن تغيير i18n يؤثّر على فهرسة البحث؛ يخدمان طبقات مختلفة.