إضافة عميل غير رسمية تضيف تعريباً كاملاً ودعماً حقيقياً للاتجاه (RTL) لواجهة DeepSeek Harness، التي تُشحن بالإنجليزية والصينية فقط وبلا أي دعم اتجاه في شيفرتها.
- تثبيت بأمر واحد — بلا Node، وبلا حاجة إلى الشبكة أثناء التثبيت
- 64 نطاقاً و2953 مفتاحاً مترجمة إلى العربية الفصحى
- اتجاه حقيقي: الإضافة تكتب
dir="rtl"بنفسها، إذ لا كود في التطبيق يكتبه إطلاقاً - نص مختلط سليم: الأسطر التي تجمع العربية والإنجليزية تتوقف عن إعادة ترتيب مقاطعها
- الأكواد تبقى LTR: كتل الشيفرة والأوامر والمعرّفات واختصارات لوحة المفاتيح
- تصمد أمام تحديثات التطبيق، مع سكربت صيانة بنقرة واحدة للأجزاء التي لا تصمد وحدها
irm https://raw.githubusercontent.com/qrandmaster/dsh-ar-rtl/main/bootstrap.ps1 | iexثم أعد تحميل الواجهة واختر Settings ← General ← Language ← العربية.
تفضّل ملفاً جاهزاً؟ نزّل الحزمة من أحدث إصدار
وفكّ ضغطها ثم شغّل install.bat.
| المكوّن | التفصيل |
|---|---|
| لغة «العربية» | مسجّلة في سجل اللغات في التطبيق، وتُحفظ كتفضيل للمستخدم (preference: ar) |
| الاتجاه | لا كود في التطبيق يقرأ dir أو يكتبه؛ الإضافة تكتبه وتراقب تغيّر اللغة |
| النصوص | 64 نطاقاً و2953 مفتاحاً بالعربية الفصحى |
| النص المختلط | unicode-bidi: plaintext للفقرات، مع عزل اتجاهي لـ249 قيمة تقنية |
| الأكواد | تبقى من اليسار إلى اليمين: الكتل، الأوامر، الاختصارات، المسارات، المعرّفات |
| التخطيط | 83 قاعدة تجاوز مبنية على نصّ قواعد التطبيق المشحونة، لا على تخمين |
- DeepSeek Harness مثبّت على Windows (تطبيق سطح المكتب).
- لا شبكة، ولا pnpm، ولا Node للتثبيت — الحزمة تُنسخ كما هي.
irm https://raw.githubusercontent.com/qrandmaster/dsh-ar-rtl/main/bootstrap.ps1 | iexينزّل السكربت هذا المستودع كأرشيف، يفكّه في مجلد مؤقت، يشغّل install.ps1، ثم ينظّف نفسه.
- نزّل هذا المستودع (زر Code ثم Download ZIP) أو حزمة الإصدار من صفحة الإصدارات، وفكّ الضغط.
- انقر
install.batنقراً مزدوجاً. - أعد تحميل الواجهة، ثم Settings ← General ← Language ← العربية.
powershell -ExecutionPolicy Bypass -File install.ps1 # تثبيت
powershell -ExecutionPolicy Bypass -File install.ps1 -Update # صيانة بعد تحديث التطبيق
powershell -ExecutionPolicy Bypass -File install.ps1 -Uninstall # إزالة كاملةخيارات نافعة: -Profile <name> (الافتراضي desktop)، و-DshHome <path>،
و-AsarPath <app.asar>، و-DryRun لعرض ما سيحدث دون تنفيذ.
| الأمر | الدور |
|---|---|
install.bat |
تثبيت أو إعادة تثبيت |
update.bat |
بعد كل تحديث للتطبيق: يعيد اكتشاف أسماء الأصناف المُهشَّرة، ويعيد البناء، وينشر |
uninstall.bat |
إزالة كاملة (صف التحميل + الحزمة المثبّتة) |
الإضافة ليست داخل التطبيق، بل في ملف المستخدم:
%USERPROFILE%\.dsh\profiles\desktop\plugins\dsh-ar-rtl\ الحزمة
%USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml صف التحميل
تحديث التطبيق يستبدل التطبيق ولا يمسّ هذا المجلد، فلا تُحذف الإضافة ولا يضيع صف التحميل. لكن مصير كل مكوّن يختلف:
| المكوّن | بعد التحديث | السبب |
|---|---|---|
| اللغة والاتجاه والنصوص والعزل | يبقى | لا يعتمد على أي اسم صنف |
| مفاتيح جديدة يضيفها التحديث | تظهر بالإنجليزية حتى تُترجم | لا ترجمة لها بعد |
| تصحيحات الأيقونات والمحاذاة | قد تنكسر بصمت | أسماء الأصناف في التطبيق مُهشَّرة وتتغيّر مع كل بناء |
ولهذا وُجد update.bat: يمسح app.asar الجديد، ويعيد اكتشاف الأصناف بالمطابقة على متن
القاعدة لا على الاسم، ثم يعيد البناء والنشر. وإن تغيّر شكل مكوّن، يصرّح بذلك صراحةً
(COULD NOT RESOLVE) بدل أن يختفي أثره صامتاً.
افتح وحدة تحكم المتصفح واكتب:
__DSH_AR_RTL__ // اللغة النشطة، والاتجاه، وعدد النطاقات والمفاتيح، وهل حُقنت الورقة- أربعة أسماء إضافات تجريبية تبقى إنجليزية (Agent Teams · Auto Authorization Review ·
Automation tasks · Voice input): عناوينها تُقرأ من بيانات الحزمة داخل
app.asar، ودالةresolveTextفي التطبيق لا تستشير القواميس بحكم توثيقها وتنفيذها معاً. - الجمع العربي: صيغة القاموس الواحدة لا تعبّر عن فئات الجمع الست في العربية، فيُستعمل المفرد مع 1 والجمع مع ما فوق.
- التصحيحات البصرية تستهدف أسماء أصناف مُهشَّرة بطبيعتها؛ ولهذا وُجد
update.bat.
├─ bootstrap.ps1 مدخل التثبيت بأمر واحد
├─ install.ps1 منطق التثبيت والتحديث والإزالة
├─ install.bat ملفات النقر المزدوج
├─ uninstall.bat
├─ update.bat
├─ client.js الحزمة المخدومة (مولَّدة، ومُلتزَمة ليعمل التثبيت بلا Node)
├─ src/rtl.css الورقة الاتجاهية: الاتجاه، وbidi، والأكواد LTR، وتصحيحات التخطيط
├─ ar/*.json 58 قاموساً عربياً
├─ tools/
│ ├─ build-client.mjs يدمج الورقة والقواميس في client.js
│ ├─ selftest.mjs 20 تحقّقاً على سلوك الحزمة وقت التشغيل
│ ├─ validate-ar.mjs يطابق المفاتيح والعناصر النائبة مع المصدر الإنجليزي
│ ├─ namespace-keys.json أسماء المفاتيح فقط (القيم الإنجليزية لا تُعاد نشرها)
│ ├─ export-keys.mjs يعيد توليد namespace-keys.json من الجرد المحلي
│ ├─ refresh-selectors.mjs يعيد اكتشاف أسماء الأصناف المُهشَّرة بعد أي تحديث
│ ├─ extract-current-en.mjs يعيد جرد قواميس البناء الجديد ويقارنها بالعربية
│ └─ gh-api.mjs عميل صغير لواجهة GitHub استُخدم في نشر هذا المستودع
├─ docs/HOW-IT-WORKS.md الشرح التقني المعمّق
├─ scripts/publish.ps1 سكربت النشر على GitHub
└─ .github/workflows/ci.yml التحقق الآلي
كل الوثائق في هذا المستودع بالعربية: README.md، وCHANGELOG.md،
وINSTALL-AR.md، وdocs/HOW-IT-WORKS.md.
وأما الملفات التنفيذية فتبقى إنجليزية عمداً، لثلاثة أسباب تقنية لا خيار فيها:
- **
install.ps1وpublish.ps1**: يقرأ Windows PowerShell 5.1 — وهو المفسّر الذي يشغّل ملفات.batعند النقر المزدوج — ملفَّ السكربت الذي لا يحمل علامة ترتيب البايتات (BOM) بترميز ANSI لا UTF-8، فتظهر أي كلمة عربية داخله مشوّهة. والحل المعتاد هو إضافة BOM، لكن ذلك غير ممكن فيbootstrap.ps1(السبب التالي)، وتركه في بعض الملفات دون بعضها مربك؛ فاخترنا إبقاء الرسائل إنجليزية والوثائق عربية. - **
bootstrap.ps1**: يُنفَّذ عبرirm … | iex، وتمرير ملف يبدأ بـBOM إلى هذا المسار قد يُفشي التنفيذ بخطأ. - ملفات
.bat: يقرأهاcmd.exeبترميز النظام، والعربية داخلها تُفسد الأوامر.
وتعليقات الشيفرة في tools/*.mjs إنجليزية أيضاً لأنها تُقرأ وتُعرض في محرّرات لا تضبط
الترميز دائماً. والمصطلحات التقنية وأسماء الملفات والأوامر تبقى لاتينية في كل موضع، لأنها
معرّفات لا نصوص.
node tools/build-client.mjs # إعادة توليد client.js
node tools/selftest.mjs # 20 تحقّقاً على سلوك الحزمة
node tools/validate-ar.mjs # مطابقة القواميس
node tools/refresh-selectors.mjs --dry-run # فحص الورقة مقابل البناء المثبّت
node tools/extract-current-en.mjs # جرد قواميس البناء الجديد (يتطلّب app.asar)يحتاج refresh-selectors.mjs إلى تثبيت محلي للتطبيق (يقرأ app.asar). ويعمل
validate-ar.mjs في وضع «المفاتيح فقط» في نسخة نظيفة من المستودع؛ وإذا وُجد مجلد
inventory/ المحلي (وهو يحمل القواميس الإنجليزية المستخرجة) فسيتحقق أيضاً من تطابق
العناصر النائبة وأسطر الفقرات.
- الترجمة: عدّل
ar/<namespace>.json، وحافظ على مجموعة المفاتيح كما هي، وعلى كل عنصر نائب{placeholder}بحرفه، ثم شغّلvalidate-ar.mjs. - تصحيحات التخطيط: لا تُضف قاعدة إلى
src/rtl.cssإلا ومعه في تعليق نصّ القاعدة المشحونة التي تبرّرها — راجعdocs/HOW-IT-WORKS.mdلمعرفة السبب. - شغّل
build-client.mjsقبل الالتزام؛ فرع التحقق الآلي يعيد البناء ويقارنه بالمصدر.
بعض النصوص في التطبيق ليست مفاتيح قاموس، فلا تصل إليها ctx.locale.register.
وقد عُرِّبت هذه الطبقة في الإضافة:
| النصّ | مصدره | كيف عُرِّب |
|---|---|---|
Off · Low · High · Max |
كتالوج مزوّد DeepSeek داخل التطبيق: أسماء مكتوبة في الشيفرة، تصل الواجهةَ كبيانات (reasoning.efforts[].name)، ولا حقل لها في تهيئة المزوّد |
طبقة في الصفحة: src/effort-ar.js — تتعامل مع أزرار القوائم المنسدلة وحدها، ولا تلمس متن المحادثة، ولا تُعيد تسمية اسم نموذج منفرد، وتُعيد الأصل عند الإيقاف. اختبرها tools/selftest-effort.mjs |
| نصّ أوّل زر في شريط عنوان التطبيق (يظهر مقطوعاً) | الشل يبني شريط قوائمه في Shadow DOM ويبدأه عند 48px، وهي قيمة تفترض أزرار النافذة على اليمين؛ وفي ويندوز عربي تُنقل إلى اليسار فيقع الزرّ تحتها |
src/rtl.css (الطبقة 12): يُزاح الشريط داخل RTL بمتغيّر قابل للضبط --dsh-ar-rtl-titlebar-start، افتراضه 152px |
ملاحظة: قائمة التطبيق الأصلية (About · Check for Updates · Manage dsh Command · Exit) تُبنى في العملية الرئيسية لـElectron من قاموس الشل الذي لا يحمل إلا الإنجليزية والصينية، ولا تصل إليها أي إضافة. تعريبها يقتضي رقع
app.asar— وهو يُمحى مع كل تحديث للتطبيق، فتُرك عن قصد.
MIT — راجع LICENSE. هذا المشروع غير رسمي وغير منتسب إلى DeepSeek ولا مدعوم منه، ولا يحتوي أي شيفرة من التطبيق ولا يعيد نشر نصوصه الإنجليزية المستخرجة؛ إنما القواميس المترجمة والورقة الاتجاهية وملف الإضافة فقط.