تخطَّ إلى المحتوى
kazma.
EN نجمة 7 ابدأ الآن

الميزات العربية والثقافية

كاظمة عربية بالأصل افتراضيًا. يغطّي هذا المستند المكوّنات الثلاثة التي تطبّق ذلك: المُرمِّز العربي، وطبقة واجهة i18n + RTL، وبروتوكول المجلس الثقافي — كلها موثّقة من المصدر، مع ملاحظات صريحة عن النطاق.


المكوّنالحزمةالدور
المُرمِّز العربيkazma-memoryتطبيع النص + فهرسة FTS5 للبحث العربي.
i18n + واجهة RTLkazma-uiترجمة نصوص الواجهة، وضبط dir/lang لكل طلب، وسياسة الخطوط.
بروتوكول المجلسkazma-coreتدفّق المحادثة الثقافي الخليجي (4 مراحل).

هذه طبقات مستقلّة. لا يعتمد المُرمِّز على نظام i18n، والمجلس وحدة محادثية جوهرية — وليس ميزة واجهة.


kazma-memory/kazma_memory/arabic_tokenizer.py (292 سطرًا). مفصَّل في الذاكرة وRAG ← المُرمِّز العربي. ملخّص خط معالجة التطبيع (normalize، الأسطر 132-165):

  1. إزالة التشكيل — regex [\u064B-\u065F\u0670].
  2. تطبيع الألف — أ، إ، آا.
  3. التاء المربوطة → هاء — ةه.
  4. تطبيع الياء — ئ، ؤ، ىي.
  5. إزالة التطويل/الكشيدة — text.replace("ـ", "").
  6. طيّ المسافات البيضاء.

تشمل كلمات الوقف مصطلحات من اللهجة الكويتية (يلا، شلون، عشان، مو، ليه، ماكو، فد). الجذّاع تجريد بسيط للبادئات/اللواحق عبر regex (وليس lemmatizer). صنفان: ArabicTokenizer.tokenize() → سلسلة؛ ArabicTantivyTokenizer.tokenize() → قائمة.


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 لكل طلب.

قاموس الترجمة واسع — المفاتيح تشمل nav، header، chat، dashboard، settings (كل الـ 13 تبويبًا)، swarm (عمّال، مهام، أنماط، تجميع، نتائج، توجيه، توجيه المخرجات)، agents، skills، MCP، وworkspace (بما فيها قياس GitHub عن بُعد). أمثلة: swarm.arabic_dialect (i18n.py:976swarm.dialect_msa (“Modern Standard Arabic” / “العربية الفصحى”، السطر 977).

  • القالب: 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 فقط.


kazma-core/kazma_core/majlis.py (348 سطرًا). موجود — مؤكَّد أثناء التدقيق (بعض الملخّصات السابقة كانت غير متأكّدة).

صنف 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).
  • 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/.


لدى TUI RTL/توطين خاص (kazma_tui/app.py):

  • update_localization() (السطر 512) يبدّل صنف CSS rtl-mode (السطر 520) ويترجم تسميات التبويبات (الأسطر 528-546).

عدم اتساق طفيف: تسميات TUI للوحة التحكم “لوحة القيادة” (السطر 539)؛ i18n الويب يستخدم “لوحة التحكم” (i18n.py:77).


دليل اللهجةأين
كلمات وقف كويتيةarabic_tokenizer.py:35-102 (يلا، شلون، عشان، مو، ليه، ماكو، فد)
اللهجة الافتراضية الكويتيةmajlis.py:54 (dialect: str = "kw")
أنماط تحية/وداع كويتيةmajlis.py:105-120
تسمية واجهة MSA (العربية الفصحى)i18n.py:977 (swarm.dialect_msa)
مفتاح إعداد swarm.arabic_dialecti18n.py:976

7. ملاحظات الاستخدام ثنائي اللغة

Section titled “7. ملاحظات الاستخدام ثنائي اللغة”
  • اللغة الافتراضية عربية (agent.language: ar، agent.rtl: true). اضبط على en لأولوية إنجليزية.
  • ملف تعريف الارتباط kazma-lang يبدّل لغة واجهة الويب لكل متصفّح دون إعادة تشغيل.
  • system_prompt (kazma.yaml:33-45) يوجّه النموذج للرد بلغة/لهجة المستخدم.
  • للانتشارات ثنائية اللغة، فكّر في تقديم أمثلة EN وAR في المهارات/الأدوات حيث تهم لغة المخرجات.

  • المجلس موجود في kazma-core/kazma_core/majlis.py (348 سطرًا، مع اختبارات ومثال) — مؤكَّد مقابل عدم يقين سابق.
  • المجلس ليس ميزة واجهة. لا مفتاح إعدادات ولا مفتاح i18n لـ “وضع المجلس.” هو بروتوكول محادثة جوهري يُربَط بالموجّهات/المهارات.
  • لا ملفات ترجمة منفصلة. كل سلاسل EN/AR تعيش مضمَّنة في i18n.py. يضيف المساهمون مفتاحًا بتحرير الـ dict.
  • عدم اتساق تسمية لوحة التحكم بين TUI (“لوحة القيادة”) والويب (“لوحة التحكم”) — طفيف، يستحق المواءمة لاحقًا.
  • المُرمِّز ↔ i18n مستقلّان. لا تفترض أن تغيير i18n يؤثّر على فهرسة البحث؛ يخدمان طبقات مختلفة.