用户两条反馈: 1. 空闲和已完成分开折叠合集 2. 空闲的无法折叠 第 2 条是纯疏漏:chevron 的出现条件写死在 `settled = done | error` 上, 「待命」的卡因此从来不画折叠按钮(跟折叠规则无关,规则早就允许手动收)。 现在 chevron 按「不在执行」(done | error | idle)出现,而 `settled` 仍只 表示完成/出错 —— 它管的是卡片该不该变淡,待命不是完成的工作。 第 1 条把上一轮那个「混合聚合」拆开: - 一个父节点现在最多两行 —— `fold:<parent>`(已完成/出错)与 `fold:<parent>:idle`(待命成员); - 各自的徽标说实话:完成行仍是「✓ N 已完成」,待命行是「N 个待命」; 完成行的条会额外报 `出错 N`(全是失败时只剩这一项),否则失败会藏在 ✓ 里; - 待命行的条只写 `N 待命`(同组同状态,不重复计数); - 阈值只作用于**自动**规则(≥3 待命成员才随页面级折叠一起收),手动 chevron 永远有效,两行互不牵连 —— 想扫掉待命的成员,不必连已完成的一起带走。 新增 tasksFoldIdleGroup ×20 词典;删掉上一轮的 hasIdle 与 foldBadgeCount (分组后它们没有意义)。 测试:新增/改写 7 例 —— 三个待命成员收进 idle 行、两个保持可见、运行中成员 达标也不收、混合场景两行各归各的、手动折叠单个待命成员落进 idle 行、 待命卡确实带 chevron 且点后只剩聚合、聚合徽标说「N 个待命」。 pnpm test 1286 passed / 9 skipped,typecheck / lint 通过。 (cherry picked from commit 0c9c8abca85e8aeb54bb2e9fcaaeed0486a56c28)
502 lines
41 KiB
TypeScript
502 lines
41 KiB
TypeScript
/**
|
|
* The ar (Arabic) dictionary for the betterSidebar namespace.
|
|
*
|
|
* Mirrors the key set of `zh` in `locales.ts`. The sidebar's `t()`
|
|
* consults this dict when `attachBetterLocale(store)` has been called
|
|
* with an active better-locale store whose `active` is `'ar'`; absent
|
|
* that, the existing zh/en chain runs unchanged.
|
|
*
|
|
* Translation conventions:
|
|
* - Modern Standard Arabic (فصحى); UI text is RTL-ready (the framework
|
|
* handles direction).
|
|
* - Git vocabulary follows standard Arabic localizations (إدراج، تثبيت، فرع).
|
|
* - Placeholders keep `{name}` verbatim (interpolation runs after lookup).
|
|
* - English brand names (VS Code, Cursor, Zed, SSH, Git, HTML, PDF, Markdown)
|
|
* stay as-is.
|
|
*/
|
|
|
|
/** The ar dictionary (key-set-equal to zh, enforced by the type annotation in locales.ts). */
|
|
export const ar: Record<string, string> = {
|
|
files: 'الملفات',
|
|
guideDescFiles: 'استعرض شجرة ملفات مساحة العمل؛ انقر للمعاينة أو التحرير',
|
|
guideDescGit: 'تغييرات Git وتعديلات ملفات هذه الجلسة في تبويب واحد',
|
|
guideDescSubagent: 'مخطط سير العمل، لوحة مهام الفريق، والمهام الخلفية مباشرةً',
|
|
guideDescSidechat: 'خيط متابعة مستقل يرث سياق هذه الجلسة',
|
|
guideDescTerminal: 'صدفة حقيقية (xterm + pty) مع إعادة الاتصال',
|
|
guideDescBrowser: 'متصفح مدمج يمكنه فتح روابط المحادثة',
|
|
changesSessionEmpty: 'لا توجد عمليات ملفات في هذه الجلسة بعد',
|
|
changesRead: 'قراءة',
|
|
changesMdReading: 'قراءة',
|
|
changesHtmlRender: "عرض",
|
|
changesHtmlRaw: "المصدر",
|
|
changesPdfRender: "عرض",
|
|
changesPdfRaw: "المصدر",
|
|
changesMdRaw: 'الخام',
|
|
changesWrite: 'كتابة',
|
|
changesEdit: 'تحرير',
|
|
changesRunning: 'قيد التنفيذ',
|
|
changesError: 'خطأ',
|
|
changesFold: '{count} أسطر… انقر للتوسيع',
|
|
changesFoldLoading: 'جارٍ التوسيع…',
|
|
changesFoldUnavailable: 'السياق غير متوفر',
|
|
changesContext: 'سياق',
|
|
changesPriorUnknown: 'المحتوى السابق خارج النافذة؛ يُعرض كما لو أُضيف بالكامل',
|
|
explorer: 'المستكشف',
|
|
terminal: 'الطرفية',
|
|
editor: 'المحرّر',
|
|
editorExplorer: 'سلوك فتح الملفات',
|
|
editorExplorerDesc: 'يتحكّم في كيفية فتح الملفات',
|
|
editorExplorerMerged: 'مدمج',
|
|
editorExplorerMergedDesc: 'الملفات تتبدّل في مكانها داخل نفس النافذة؛ النوافذ الجديدة تبدأ بالشجرة مفتوحة',
|
|
editorExplorerSplit: 'منفصل',
|
|
editorExplorerSplitDesc: 'النوافذ بلا مسار هي المستكشف المستقل (شجرة فقط)؛ كل ملف يفتح نافذته الخاصة (الشجرة مرساة، مغلقة افتراضياً)',
|
|
editorTreeToggle: 'لوحة شجرة الملفات',
|
|
editorPathPlaceholder: 'مسار الملف (نسبي لدليل الجلسة أو مطلق)، Enter للفتح',
|
|
editorSearchPlaceholder: 'البحث في الملفات بالاسم…',
|
|
editorSearchNoResults: 'لا ملفات مطابقة',
|
|
editorSearchTruncated: 'نتائج كثيرة جداً — عرض قائمة جزئية',
|
|
editorEmptyHint: 'اختر ملفاً من لوحة الشجرة أو من حقل المسار بالأعلى لبدء المعاينة',
|
|
openFileNewTab: 'فتح في تبويب جديد',
|
|
openFileSide: 'فتح إلى الجانب',
|
|
openWithMenu: 'فتح بواسطة',
|
|
openWithSshSuffix: ' (SSH)',
|
|
pinOpenWith: 'تثبيت في القائمة',
|
|
unpinOpenWith: 'إلغاء التثبيت',
|
|
openWithExplorer: 'مدير الملفات',
|
|
openWithVscode: 'VS Code',
|
|
openWithCursor: 'Cursor',
|
|
openWithZed: 'Zed',
|
|
openWithSettingsSshTitle: 'مضيف SSH البعيد',
|
|
openWithSettingsSshDesc: 'فارغ = مساحة عمل محلية؛ مع user@host أو اسم مستعار SSH، تتحوّل فواتح عائلة VSCode إلى بروتوكول vscode-remote/ssh-remote ويُخفى مدير الملفات وZed والمحرّرات المخصّصة غير التابعة لعائلة VSCode من القائمة',
|
|
openWithSettingsSshPlaceholder: 'user@host أو اسم مستعار SSH',
|
|
openWithSettingsCustomTitle: 'محرّرات مخصّصة',
|
|
openWithSettingsCustomDesc: 'اسم + قالب URL (عنصر نائب {path}) + علامة عائلة VSCode؛ في الوضع البعيد، يمكن فقط لمحرّرات عائلة VSCode فتح مسار بعيد',
|
|
openWithSettingsAdd: 'إضافة',
|
|
openWithSettingsName: 'الاسم',
|
|
openWithSettingsTemplate: 'مثل cursor://file/{path}',
|
|
openWithSettingsFamily: 'عائلة VSCode',
|
|
openWithSettingsFamilyDesc: 'يتحدّث هذا المحرّر لهجة URL لـ VSCode (يدعم الفتح عبر SSH البعيد)',
|
|
openWithSettingsRemove: 'إزالة',
|
|
openWithSettingsInvalidHint: 'لن تظهر المحرّرات التي تفتقر إلى الاسم أو القالب (يلزم أن يحتوي على {path} ويبدأ بـ scheme://) في القائمة',
|
|
newTab: 'تبويب جديد',
|
|
brokenSymlink: 'رابط رمزي معطوب',
|
|
close: 'إغلاق',
|
|
closeOtherTabs: 'إغلاق التبويبات الأخرى',
|
|
closeLeftTabs: 'إغلاق التبويبات على اليسار',
|
|
closeRightTabs: 'إغلاق التبويبات على اليمين',
|
|
pinTerminal: 'تثبيت الطرفية',
|
|
pinAgentTerminal: 'تثبيت طرفية Agent',
|
|
pinToWorkspace: 'تثبيت إلى مساحة العمل',
|
|
pinToGlobal: 'تثبيت عام',
|
|
unpinTerminal: 'إلغاء التثبيت',
|
|
collapseBottomPanel: 'طي اللوحة السفلية',
|
|
expandBottomPanel: 'توسيع اللوحة السفلية',
|
|
terminalError: 'فشل اتصال الطرفية',
|
|
terminalConnectFailed: 'فشل اتصال الطرفية عدة مرات',
|
|
terminalRetry: 'إعادة المحاولة',
|
|
terminalWaitBanner: 'الوكيل ينتظر {needle}',
|
|
terminalSkipWait: 'تخطي الانتظار',
|
|
terminalDepsFailed: 'فشل تحميل تبعية الطرفية node-pty',
|
|
terminalDepsHint: 'شغّل الأمر التالي في طرفية أو cmd على جهاز DSH للإصلاح، ثم أعد المحاولة (يبقى node-pty متزامناً مع إصدار نواة DSH):',
|
|
terminalDepsProfile: ' (الملف الشخصي المكتشف: {profile})',
|
|
terminalShellNotFound: 'لم يتم العثور على الصدفة المُعدَّة: {name} — تحقق من مسار الصدفة في الإعدادات → Side card → Terminal',
|
|
preview: 'معاينة',
|
|
toc: 'الفهرس',
|
|
edit: 'تحرير',
|
|
mermaidError: 'فشل رسم Mermaid',
|
|
mermaidZoomIn: 'تكبير',
|
|
mermaidZoomOut: 'تصغير',
|
|
mermaidZoomReset: 'إعادة تعيين',
|
|
mermaidZoomHint: 'العجلة للتقريب · السحب للتحريك · Esc للإغلاق',
|
|
refresh: 'تحديث',
|
|
showInFolder: 'إظهار في المجلد',
|
|
refreshUnsavedConfirm: 'تغيّر الملف على القرص. سيؤدي التحديث إلى فقدان التعديلات غير المحفوظة. متابعة؟',
|
|
save: 'حفظ',
|
|
saved: 'تم الحفظ',
|
|
unsaved: 'غير محفوظ',
|
|
saveFailed: 'فشل الحفظ',
|
|
truncation: 'الملف كبير جداً — عرض أول 512KB',
|
|
binary: 'ملف ثنائي، المعاينة غير متاحة',
|
|
loading: 'جارٍ التحميل…',
|
|
error: 'فشل التحميل',
|
|
retry: 'إعادة المحاولة',
|
|
notRepo: 'هذا الدليل ليس مستودع git',
|
|
noChanges: 'لا تغييرات',
|
|
statusTruncated: 'التغييرات كثيرة جدًا؛ يتم عرض أول 2000 إدخال فقط',
|
|
stage: 'إدراج',
|
|
unstage: 'إلغاء الإدراج',
|
|
stageAll: 'إدراج الكل',
|
|
unstageAll: 'إلغاء إدراج الكل',
|
|
commitPlaceholder: 'رسالة التثبيت (Ctrl+Enter)',
|
|
commit: 'تثبيت',
|
|
branch: 'الفرع',
|
|
worktree: 'شجرة العمل',
|
|
checkoutError: 'فشل تبديل الفرع',
|
|
history: 'السجل',
|
|
changes: 'تغييرات الملفات',
|
|
changesGitLens: 'Git',
|
|
changesSessionLens: 'الجلسة',
|
|
changesFilterAll: 'الكل',
|
|
changesFilterEmpty: 'لا توجد عمليات من هذا النوع',
|
|
changesOpenDiffTab: 'فتح في تبويب diff منفصل',
|
|
changesClosePreview: 'إغلاق المعاينة',
|
|
changesResizePreview: 'تغيير حجم المعاينة',
|
|
changesLoadError: 'سجلات ملفات الجلسة غير متاحة الآن',
|
|
staged: 'مُدرج',
|
|
unstaged: 'غير مُدرج',
|
|
cancel: 'إلغاء',
|
|
diffEmpty: 'لا تغييرات نصية',
|
|
diffLoadError: 'فشل تحميل الفرق',
|
|
diffBinary: 'ثنائي',
|
|
diffAdded: 'مُضاف',
|
|
diffDeleted: 'محذوف',
|
|
diffRenamed: 'إعادة تسمية',
|
|
diffExpand: 'إظهار {count} صفوف أخرى',
|
|
discard: 'تجاهل التغييرات',
|
|
discardTitle: 'تجاهل التغييرات',
|
|
discardDesc: 'هذا يتجاهل تغييرات مساحة العمل في "{path}" (غير قابل للاستعادة).',
|
|
viewCommitDiff: 'عرض فرق التثبيت',
|
|
copyShortHash: 'نسخ الهاش القصير',
|
|
copyFullHash: 'نسخ الهاش الكامل',
|
|
copySubject: 'نسخ موضوع التثبيت',
|
|
revertCommit: 'عكس التثبيت',
|
|
revertTitle: 'عكس التثبيت',
|
|
revertDesc: 'ينشئ تثبيتاً جديداً على الفرع الحالي يعكس "{subject}".',
|
|
cherryPickCommit: 'اقتطاف التثبيت',
|
|
cherryPickTitle: 'اقتطاف التثبيت',
|
|
cherryPickDesc: 'يطبّق تغييرات "{subject}" على الفرع الحالي.',
|
|
timeJustNow: 'الآن',
|
|
timeMinutesAgo: 'منذ {n} دقيقة',
|
|
timeHoursAgo: 'منذ {n} ساعة',
|
|
timeYesterday: 'أمس',
|
|
loadMore: 'تحميل المزيد',
|
|
historyLoadError: 'فشل تحميل المزيد من السجل',
|
|
produced: 'النواتج',
|
|
disconnected: 'انقطع اتصال الطرفية، جارٍ إعادة الاتصال…',
|
|
exited: 'خرجت عملية الطرفية',
|
|
noSession: 'اختر محادثة لاستخدام الشريط الجانبي',
|
|
pluginNotLoaded: 'الإضافة غير محمّلة؛ التبويب غير متاح:',
|
|
parent: 'الدليل الأصل',
|
|
copied: 'تم النسخ',
|
|
copy: 'نسخ',
|
|
openEditor: 'فتح المحرّر',
|
|
referenceFile: '@ملف',
|
|
addToConversation: 'إضافة إلى المحادثة',
|
|
copyRelative: 'نسخ المسار النسبي',
|
|
copyAbsolute: 'نسخ المسار المطلق',
|
|
rename: 'إعادة تسمية',
|
|
renameInvalid: 'لا يمكن أن يكون الاسم فارغًا أو يحتوي على فواصل مسار.',
|
|
delete: 'حذف',
|
|
deleteTitle: 'حذف «{name}»؟',
|
|
deleteDescFile: 'سيتم حذف هذا الملف نهائيًا. لا يمكن التراجع عن هذا الإجراء.',
|
|
deleteDescDir: 'سيتم حذف هذا الدليل وكل محتوياته نهائيًا. لا يمكن التراجع عن هذا الإجراء.',
|
|
dismiss: 'إغلاق',
|
|
download: 'تنزيل',
|
|
uploadFiles: 'رفع ملفات',
|
|
uploadFolder: 'رفع مجلد',
|
|
uploadHere: 'ارفع هنا',
|
|
uploadDropHint: 'أسقط الملفات/المجلدات هنا للرفع',
|
|
uploadDropChat: 'الإسقاط على منطقة المحادثة: إضافة صور إلى المحادثة',
|
|
uploadTo: 'رفع إلى {dir}',
|
|
uploadingTo: 'جارٍ الرفع إلى {dir}…',
|
|
uploadProgress: 'جارٍ الرفع {done}/{total}: {name}',
|
|
uploadDone: 'تم رفع {count} ملف',
|
|
uploadFailed: 'فشل الرفع: {error}',
|
|
uploadFailedUnknown: 'خطأ غير معروف',
|
|
uploadTooLarge: 'الملف كبير جداً (يتجاوز حد الرفع)',
|
|
uploadCancelled: 'تم إلغاء الرفع',
|
|
settingsNav: 'البطاقة الجانبية',
|
|
settingsIntro: 'إدارة ما تعرضه البطاقة الجانبية وكيف تتصرف',
|
|
settingsPopupDesc: 'تكوين خيارات ذات صلة بـ {feature}',
|
|
settingsDone: 'تم',
|
|
settingsOpenToolsTitle: 'حقن أداة فتح الشريط الجانبي للنموذج',
|
|
settingsOpenToolsDesc: 'عند التفعيل، يمكن للنموذج فتح الملفات والمجلدات وصفحات HTTP(S) في الشريط الجانبي عبر أداة sidebar_open (معطّل افتراضياً)',
|
|
settingsTitleBarTitle: 'وضع توافق الموضع',
|
|
settingsTitleBarDesc: 'اختر نظام توافق الشريط العلوي: كشف تلقائي (افتراضي، محافظ) / ويب DSH الرسمي / أغلفة سطح المكتب المعروفة / مخصّص (مسافة الإزاحة + CSS مخصّص)',
|
|
settingsTitleBarStripTitle: 'مسافة الإزاحة',
|
|
settingsTitleBarStripDesc: 'ارتفاع شريط الشريط العلوي: كم بكسل تتحرك به أزرار الشريط الجانبي والمحتوى للأسفل (0–120، افتراضي 40؛ يسري تحت النظام المخصّص)',
|
|
settingsSchemeAutoTitle: 'كشف تلقائي',
|
|
settingsSchemeAutoDesc: 'محافظ: يساهم فقط معيار Window Controls Overlay API (ارتفاع التسمية التوضيحية الحقيقي)؛ بيئات الويب العادية لا تعدّل شيئاً',
|
|
settingsSchemeWebTitle: 'ويب DSH الرسمي',
|
|
settingsSchemeWebDesc: 'صراحة: الإعلان عن تشغيل في واجهة الويب الرسمية: لا أي تكيّف (حتى هندسة WCO القياسية لا تطبّق)',
|
|
settingsSchemeCustomTitle: 'مخصّص',
|
|
settingsSchemeCustomDesc: 'تحكّم كامل: حقن CSS مخصّص (يمكن أن يلغي الأنماط المدمجة) وتحديد مسافة إزاحة الشريط العلوي',
|
|
settingsSchemeDetectedSuffix: 'تم الكشف',
|
|
settingsCustomCssTitle: 'CSS مخصّص',
|
|
settingsCustomCssPlaceholder: '/* مثال: حجز 36px لغلاف له شريط علوي مرسوم ذاتياً */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
|
|
settingsSaveFailed: 'فشل الحفظ',
|
|
settingsConflict: 'تغيّر الإعداد في نافذة أخرى — يُرجى إعادة المحاولة',
|
|
binaryNoPreview: 'لا يمكن معاينة هذا النوع من الملفات',
|
|
downloadToView: 'تنزيل للعرض',
|
|
settingsSubagentTitle: 'تفعيل صفحة المهام تلقائياً عند ظهور وكيل فرعي',
|
|
settingsSubagentDesc: 'تُفعَّل صفحة المهام عندما تُنشئ المحادثة الحالية وكيلاً فرعياً جديداً؛ في الشاشات العريضة تُوسَّع البطاقة الجانبية أيضاً، أما في الشاشات الضيقة فلا يُفرض فتح الدرج بملء الشاشة؛ عند إيقاف الخيار يصبح الفتح يدوياً',
|
|
settingsJobsTitle: 'تفعيل صفحة المهام تلقائياً عند ظهور مهمة خلفية جديدة',
|
|
settingsJobsDesc: 'تُفعَّل صفحة المهام كلما ظهرت مهمة خلفية جديدة للمحادثة الحالية (كل مهمة جديدة تُطلق التفعيل)؛ في الشاشات العريضة تُوسَّع البطاقة الجانبية أيضاً، أما في الشاشات الضيقة فلا يُفرض فتح الدرج بملء الشاشة؛ عند إيقاف الخيار يصبح الفتح يدوياً',
|
|
settingsToolsTitle: 'حقن أدوات الطرفية للنموذج',
|
|
settingsToolsDesc: 'عند التفعيل، يمكن للنموذج إنشاء وتشغيل طرفيات الشريط الجانبي عبر أدوات terminal_* الثمانية (معطّل افتراضياً)',
|
|
settingsFenceTitle: 'فحص مسارات مساحة العمل',
|
|
settingsFenceDesc: 'عند التفعيل، تصل وظائف الملفات في الشريط الجانبي إلى مسارات داخل مساحة عمل الجلسة فقط (الافتراضي)؛ عند الإيقاف تصبح ملفات المضيف كلها متاحة — وتحصل سكربتات الصفحة على النفاذ نفسه طوال ذلك',
|
|
fenceErrorReason: 'هذا المسار خارج مساحة عمل الجلسة وقد حجبه الفحص',
|
|
fenceDisableAction: 'إيقاف فحص مساحة العمل',
|
|
settingsBottomTerminalTitle: 'فتح طرفية تلقائياً عند أول توسيع للوحة السفلية',
|
|
settingsBottomTerminalDesc: 'عند توسيع اللوحة السفلية لأول مرة في الجلسة، حاول فتح تبويب طرفية جديد هناك (حصة الطرفيات ما زالت تسري؛ مفعّل افتراضياً)',
|
|
settingsFontFamilyTitle: 'عائلة خط الطرفية',
|
|
settingsFontFamilyDesc: 'عائلة خط الطرفية المخصّصة (مكدس CSS font-family مثل "JetBrains Mono", monospace؛ اتركه فارغاً لاتّباع خط السمة أحادي المسافة)',
|
|
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
|
|
settingsFontSizeTitle: 'حجم خط الطرفية',
|
|
settingsFontSizeDesc: 'حجم خط الطرفية بالبكسل (9–32، افتراضي 13)',
|
|
settingsShellTitle: 'مسار الصدفة',
|
|
settingsShellDesc: 'الصدفة التي تُطلق لطرفيات الواجهة والنموذج (مسار مطلق أو اسم تنفيذي مجرّد). الفراغ يحافظ على الترتيب القائم: yaml config.shell ← $SHELL / صدفة الدخول / Windows powershell.exe. يسري على الطرفيات المفتوحة لاحقاً',
|
|
settingsShellPlaceholder: 'مثل /bin/zsh (فارغ = تلقائي)',
|
|
settingsShellArgsTitle: 'وسائط الصدفة',
|
|
settingsShellArgsDesc: 'وسائط صدفة صريحة، مفصولة بمسافات؛ عند عدم الفراغ تستبدل الافتراضيات بالكامل (نفس عقد yaml shellArgs)',
|
|
settingsShellArgsPlaceholder: 'مثل -l (فارغ = الافتراضيات)',
|
|
settingsTabsTitle: 'محتوى الشريط الجانبي',
|
|
settingsViewersTitle: 'عارضات الملفات',
|
|
settingsMobileTitle: "الجوال",
|
|
settingsMobileNoAutoOpenTitle: "عدم الفتح التلقائي على الشاشات الضيقة",
|
|
settingsMobileNoAutoOpenDesc: "على الهاتف أو الشاشة الضيقة، لن يؤدي وكيل فرعي أو مهمة خلفية جديدة إلى الانتقال تلقائيًا إلى صفحة المهام (يمكنك فتحها يدويًا)",
|
|
settingsMobileTreeTitle: "افتراض الشجرة لصفحة المهام",
|
|
settingsMobileTreeDesc: "على الهاتف أو الشاشة الضيقة تُفتح صفحة المهام كشجرة كلاسيكية بدل مخطط سير العمل (مفتاح الصفحة يظل يعمل)",
|
|
settingsGeneralTitle: 'عام',
|
|
settingsPopup: 'إعدادات الميزة',
|
|
settingsViewerCatchAll: 'شامل: أي ملف',
|
|
viewerMarkdown: 'Markdown',
|
|
viewerCode: 'كود',
|
|
viewerHtml: 'HTML',
|
|
browser: 'المتصفح',
|
|
browserPlaceholder: 'أدخل عنوان URL، مثل example.com',
|
|
browserGo: 'اذهب',
|
|
browserBack: 'للخلف',
|
|
browserForward: 'للأمام',
|
|
browserStart: 'أدخل عنوان URL لبدء التصفح (وضع الحماية)',
|
|
browserBlockedScheme: 'محظور: يُسمح فقط بعناوين URL من نوع http/https',
|
|
browserBlockedLoopback: 'محظور: لا يمكن تصفّح العناوين المحلية والداخلية هنا',
|
|
browserInvalid: 'عنوان URL غير صالح',
|
|
htmlNoSandboxWarning: 'الحماية معطّلة: يعمل هذا HTML بنفس أصل الواجهة — يمكنه قراءة ملفات الجلسة وواجهات API الداخلية (يمكن إعادة تفعيلها في الإعدادات)',
|
|
sandboxStatusOn: 'وضع الحماية: مفعّل · لا يمكن للصفحات الوصول إلى بيانات الواجهة أو الملفات المحلية؛ قد لا تعمل تسجيلات الدخول وملفات الارتباط التابعة لجهات خارجية',
|
|
sandboxUnlock: 'تعطيل مؤقت (غير آمن)',
|
|
sandboxRestore: 'استعادة الحماية',
|
|
settingsHtmlDefaultUnsafeTitle: 'فتح معاينات HTML بدون حماية افتراضياً (غير آمن)',
|
|
settingsHtmlDefaultUnsafeDesc: 'عند التفعيل، تبدأ كل معاينة HTML مفتوحة حديثاً في الحالة غير المحمية (نفس أصل الواجهة — يمكنها قراءة ملفات الجلسة وواجهات API الداخلية)؛ يوفر صف الحالة استعادة بلمسة واحدة',
|
|
settingsHtmlSandboxTitle: 'تعطيل حماية معاينة HTML (غير آمن)',
|
|
settingsHtmlSandboxDesc: 'مع تعطيل الحماية، يعمل HTML المعاين بنفس أصل الواجهة: يمكنه قراءة ملفات الجلسة والتخزين المحلي واستدعاء واجهات API الداخلية. فعّله فقط للملفات الموثوقة بالكامل',
|
|
settingsBrowserSandboxTitle: 'تعطيل حماية المتصفح (غير آمن)',
|
|
settingsBrowserSandboxDesc: 'مع تعطيل الحماية، يعمل أي موقع تزوره بنفس أصل الواجهة: يمكنه قراءة بيانات الجلسة وانتحال جلسة تسجيل الدخول الخاصة بك. فعّله فقط للمواقع الموثوقة بالكامل',
|
|
settingsBrowserLoopbackTitle: 'العناوين المحلية المسموح بها',
|
|
settingsBrowserLoopbackDesc: 'قائمة بيضاء مفصولة بفواصل لعناوين الاسترجاع المحلي (مثل localhost:5174 أو 127.0.0.1:8080) يمكن للمتصفح الجانبي زيارتها؛ فارغة افتراضيًا تمنع جميع العناوين المحلية. تظل صندوق الحماية سارية — لا يمكن للصفحات قراءة بيانات الواجهة',
|
|
settingsBrowserLoopbackPlaceholder: 'مثال localhost:5174, 127.0.0.1:8080',
|
|
browserOpenExternal: 'فتح في المتصفح',
|
|
browserEmbedBlocked: 'رفض {host} التضمين',
|
|
browserEmbedBlockedDesc: 'يحظر الموقع عرضه داخل صفحات أخرى (X-Frame-Options / frame-ancestors)، لذا لا يمكن تحميله في الشريط الجانبي. افتحه مباشرة في متصفحك بدلاً من ذلك.',
|
|
browserEmbedAnyway: 'تحميل على أي حال',
|
|
subagent: 'المهام',
|
|
subagentMainAgent: 'الوكيل الرئيسي',
|
|
subagentEmpty: 'لا وكلاء فرعيون',
|
|
subagentEmptyDesc: 'الوكلاء الفرعيون المُنتَجون تحت الوكيل الرئيسي سيظهرون هنا',
|
|
subagentInactive: 'خامل',
|
|
subagentModeOneShot: 'مرة واحدة',
|
|
subagentModeContinuable: 'قابل للاستئناف',
|
|
subagentCount: '{count} وكلاء فرعيون',
|
|
subagentCountRunning: '{count} وكلاء فرعيون · {running} قيد التشغيل',
|
|
subagentThinking: 'جارٍ التفكير…',
|
|
sideChat: 'محادثة جانبية (تجريبية)',
|
|
sideChatNew: 'خيط جديد',
|
|
sideChatUntitled: 'خيط جديد',
|
|
sideChatEmpty: 'لا محادثات جانبية',
|
|
sideChatEmptyDesc: 'كل محادثة جانبية هي تبويب مستقل في شريط التبويبات — ترث سياق الجلسة الحالية ولا تدخل المحادثة الرئيسية',
|
|
sideChatCreating: 'جارٍ إنشاء محادثة جانبية…',
|
|
sideChatRetry: 'إعادة المحاولة',
|
|
sideChatThreads: 'تبديل خيط / جديد',
|
|
sideChatSave: 'حفظ كجلسة جديدة',
|
|
sideChatSaveTitle: 'ترقية هذا الخيط إلى جلسة عالية المستوى في قائمة الجلسات الرئيسية',
|
|
sideChatSaved: 'تم الحفظ كجلسة جديدة',
|
|
sideChatNoTurn: 'الحفظ متاح بعد أول دور مكتمل',
|
|
sideChatPendingDrop: 'لن يُضمَّ آخر متابعة لم يُجَب عنها في الجلسة المحفوظة',
|
|
sideChatFirstPlaceholder: 'اطرح السؤال الأول — السياق موروث…',
|
|
sideChatComposerPlaceholder: 'متابعة…',
|
|
sideChatThinking: 'جارٍ التعمّق…',
|
|
sideChatThink: 'التفكير',
|
|
sideChatInjection: 'تم حقن السياق',
|
|
sideChatSend: 'إرسال',
|
|
sideChatCancelTitle: 'إلغاء الدور الجاري (يُحتفظ بالعمل في قائمة الانتظار)',
|
|
sideChatError: 'خطأ في المحادثة الجانبية: {message}',
|
|
sideChatTurnUsage: 'إدخال {input} توكن · إخراج {output} توكن',
|
|
sideChatBlockCollapse: 'طي',
|
|
sideChatBlockCollapseAria: 'طي',
|
|
sideChatBlockExpand: 'توسيع {hidden} أسطر',
|
|
sideChatBlockExpandAria: 'توسيع {hidden} أسطر إضافية',
|
|
sideChatBlockSignal: 'أُنهي بالإشارة: {signal}',
|
|
sideChatBlockExitCode: 'رمز الخروج {code}',
|
|
sideChatBlockNoExitCode: "انتهى دون رمز خروج",
|
|
sideChatBlockRunning: 'قيد التشغيل',
|
|
sideChatBlockFailed: 'فشل',
|
|
sideChatBlockDone: 'اكتمل',
|
|
sideChatBlockNoOutput: '(لا يوجد إخراج)',
|
|
codeBlockTitle: 'كتلة التعليمات البرمجية',
|
|
codeBlockWrap: 'التفاف الأسطر',
|
|
codeBlockUnwrap: 'بدون التفاف للأسطر',
|
|
sideChatBlockWindow: '{shown} من {total} سطرًا',
|
|
sideChatConnDisconnected: 'انقطع الاتصال',
|
|
sideChatConnConnecting: 'جارٍ إعادة الاتصال…',
|
|
sideChatConnRecovered: 'تم استعادة الاتصال',
|
|
sideChatConnReconnectAction: 'إعادة الاتصال الآن',
|
|
sideChatConnRestartAction: 'بدء الاتصال من جديد',
|
|
jobs: 'المهام الخلفية',
|
|
jobsCount: '{count} مهمة خلفية',
|
|
jobsCountRunning: '{count} مهمة خلفية · {running} قيد التشغيل',
|
|
jobStatusRunning: 'قيد التشغيل',
|
|
jobStatusStopping: 'جارٍ الإيقاف',
|
|
jobStatusCompleted: 'اكتمل',
|
|
jobStatusKilled: 'تم الإنهاء',
|
|
jobStatusFailed: 'فشل',
|
|
jobDurationSeconds: '{seconds}ث',
|
|
jobDurationMinutes: '{minutes}د {seconds}ث',
|
|
jobDurationHours: '{hours}س {minutes}د',
|
|
jobViewOutput: 'عرض الإخراج',
|
|
jobNoOutput: 'لا إخراج بعد',
|
|
jobNotReadYet: 'في انتظار قراءة النموذج لإخراج هذه المهمة؛ سيظهر الإخراج هنا بمجرد أن يشغّل النموذج job_output',
|
|
jobOutputTruncated: 'الإخراج مقطوع',
|
|
jobOutputError: 'فشل قراءة الإخراج',
|
|
jobKill: 'إنهاء',
|
|
jobKillConfirm: 'انقر مجدداً للتأكيد على الإنهاء',
|
|
jobKillError: 'فشل الإنهاء',
|
|
tasksViewGraph: 'مخطط سير العمل',
|
|
tasksViewTree: 'شجرة',
|
|
tasksViewSwitchToGraph: 'التبديل إلى مخطط سير العمل',
|
|
tasksViewSwitchToTree: 'التبديل إلى الشجرة',
|
|
settingsViewModeTitle: 'العرض الافتراضي لصفحة المهام',
|
|
settingsViewModeDesc: 'كيف تُعرض صفحة المهام عند الفتح (زر التبديل داخل الصفحة يظل يبدّلها مؤقتًا)',
|
|
settingsViewModeGraph: 'مخطط سير العمل',
|
|
settingsViewModeGraphDesc: 'مخطط عُقد متدرج مع تكبير وتحريك',
|
|
settingsViewModeTree: 'شجرة',
|
|
settingsViewModeTreeDesc: 'شجرة كلاسيكية بمسافات بادئة، قابلة للتنقل بلوحة المفاتيح',
|
|
tasksFoldIdleGroup: 'N waiting',
|
|
tasksFoldIdle: 'Idle {count}',
|
|
tasksFoldCompleted: '✓ {count} مكتمل',
|
|
tasksFoldOne: 'الطي مع المكتملة',
|
|
tasksFoldExpand: 'توسيع العُقد المكتملة',
|
|
tasksFoldCollapse: 'طي العُقد المكتملة',
|
|
tasksZoomIn: 'تكبير',
|
|
tasksZoomOut: 'تصغير',
|
|
tasksZoomFit: 'ملاءمة اللوحة',
|
|
tasksNodeJump: 'فتح النسخة',
|
|
tasksNodeDetail: 'تفاصيل العقدة',
|
|
workflowRun: 'سير العمل',
|
|
tasksNodeState: 'الحالة',
|
|
tasksNodeMode: 'الوضع',
|
|
tasksNodeModel: 'الطراز',
|
|
tasksNodeTeamRole: 'دور الفريق',
|
|
tasksNodeActivity: 'آخر نشاط',
|
|
tasksStateRunning: 'قيد التشغيل',
|
|
tasksStateIdle: 'خامل',
|
|
tasksStateProvisioning: 'Provisioning',
|
|
tasksStateDone: 'مكتمل',
|
|
tasksStateError: 'خطأ',
|
|
tasksKindSubagent: 'وكيل فرعي',
|
|
tasksKindTeammate: 'عضو فريق',
|
|
tasksKindWorkflow: 'سير عمل',
|
|
taskWindowCreate: 'New task',
|
|
taskWindowDetail: 'Task detail',
|
|
teamBoard: 'لوحة مهام الفريق',
|
|
teamChip: 'فريق {members} أعضاء · {tasks} مهام',
|
|
teamTasksEmpty: 'لا مهام مشتركة بعد',
|
|
teamTaskCreate: 'مهمة جديدة',
|
|
teamTaskSubject: 'الموضوع',
|
|
teamTaskDescription: 'الوصف',
|
|
teamTaskOwner: 'المسؤول',
|
|
teamTaskUnowned: 'غير مُسندة',
|
|
teamTaskPending: 'معلّقة',
|
|
teamTaskInProgress: 'قيد التنفيذ',
|
|
teamTaskCompleted: 'مكتملة',
|
|
teamTaskBlocked: 'محجوبة',
|
|
teamTaskClaim: 'Claim',
|
|
teamTaskComplete: 'إكمال',
|
|
teamTaskReopen: 'إعادة فتح',
|
|
teamTaskDelete: 'حذف',
|
|
teamTaskDeleteConfirm: 'تأكيد الحذف',
|
|
teamTaskEdit: 'تحرير',
|
|
teamTaskSave: 'حفظ',
|
|
teamTaskCancel: 'إلغاء',
|
|
teamTaskConflict: 'تم تعديل المهمة من جهة أخرى، تم التحديث',
|
|
teamTaskError: 'فشلت العملية: {message}',
|
|
teamTaskDeleted: 'محذوفة',
|
|
teamTaskActions: 'إجراءات المهمة',
|
|
teamTaskDetail: 'تفاصيل المهمة',
|
|
teamTaskNoDescription: 'لا يوجد وصف بعد — انقر على «تحرير» لإضافة واحد',
|
|
teamTaskBlockedBy: 'محجوبة بسبب',
|
|
teamTaskSubjectPlaceholder: 'سطر واحد يصف العمل',
|
|
teamTaskDescriptionPlaceholder: 'تفاصيل إضافية (اختياري)',
|
|
teamFilterAll: 'الكل',
|
|
tasksNodeTasks: 'المهام المشتركة',
|
|
jobCopyOutput: 'نسخ الإخراج',
|
|
jobCopied: 'تم النسخ',
|
|
jobFollowTail: 'متابعة الأحدث',
|
|
jobDragHint: 'اسحب للتحريك',
|
|
workflowRunning: 'قيد التشغيل',
|
|
workflowCompleted: 'مكتمل',
|
|
workflowCancelled: 'أُلغي',
|
|
workflowFailed: 'فشل',
|
|
workflowPhaseUnnamed: 'مرحلة بدون اسم',
|
|
workflowMembers: '{done}/{total} أعضاء',
|
|
jobsAutoCollapsed: 'تم الطي تلقائيًا (وكلاء كثيرون)',
|
|
catalogLoadFailed: 'فشل تحميل {count} من الفروع',
|
|
addPluginsTabCard: 'إضافة إضافات تبويب',
|
|
addPluginsTabCardDesc: 'تسجيل صفحة شريط جانبي جديدة',
|
|
addPluginsViewerCard: 'إضافة إضافات معاينة',
|
|
addPluginsViewerCardDesc: 'تسجيل معاينة نوع ملف',
|
|
addPluginsTabDesc: 'يمكن توسيع صفحات الشريط الجانبي (التبويبات) بواسطة الإضافات. تُسجَّل الإضافات عبر خدمة ctx.betterSidebar؛ النقر على «تثبيت» ينسخ أمر التثبيت — الصقه في طرفية حيث يقيم ملف DSH الشخصي وشغّله.',
|
|
addPluginsViewerDesc: 'يمكن توسيع عارضات الملفات بواسطة الإضافات. تُسجَّل الإضافات عبر خدمة ctx.betterSidebar؛ النقر على «تثبيت» ينسخ أمر التثبيت — الصقه في طرفية حيث يقيم ملف DSH الشخصي وشغّله.',
|
|
addPluginsBrowseMore: 'تصفّح المزيد من الإضافات على GitHub (topic: dsh-better-sidebar)',
|
|
addPluginsSearch: 'البحث باسم الإضافة / الوصف…',
|
|
addPluginsNoMatch: 'لا إضافات مطابقة',
|
|
addPluginsRecommended: 'إضافات موصى بها',
|
|
addPluginsEmpty: 'لا إضافات منسّقة بعد — انشر إضافتك تحت موضوع GitHub',
|
|
openPlugin: 'فتح',
|
|
copyInstall: 'نسخ أمر التثبيت',
|
|
pluginOfficeDesc: 'معاينة حزمة Office (.docx / .xlsx / .pptx) لمحرّر better-sidebar، مع إبقاء مكتبات عرض Office الثقيلة خارج الحزمة الأساسية، تُثبَّت عند الطلب',
|
|
pluginFlowglassDesc: 'مخطط تدفق جلسة حيّ بثلاثة مسارات للمستخدم والمساعد واستدعاءات الأدوات، مع مجموعات متوازية وفروع وكلاء فرعيين وتعمّق تدريجي وحالة حيّة؛ يُسجِّل تبويب Flowglass الأصلي عند تثبيت better-sidebar ويحتفظ بدرجه المستقل كاحتياط',
|
|
pluginGitForgeDesc: 'تبويب Git Forge: مكتبة حسابات GitHub/Gitea (وغيرها من Forges) + منح لكل مشروع + سياسة دفع صارمة؛ تبقى الرموز في الأسرار المحلية (لا تدخل سياق النموذج)؛ أداة GitForge للقراءة فقط ومساعد بيانات اعتماد HTTPS للوكيل',
|
|
pluginGithubWorkbenchDesc: 'تبويب GitHub Workbench: شجرة المستودع البعيد + Issues / Pull requests / Actions مع دعم كامل للكتابة — إنشاء Issue/PR، والتعليق، والتعديل، والإغلاق/إعادة الفتح، والدمج عبر squash·merge·rebase (بتأكيد قوي)، وإعادة تشغيل CI أو إلغائها؛ يعرض مبدّل المستودعات تلقائيًا المستودعات المتاحة ويتيح البحث في المستودعات العامة؛ وبدون better-sidebar يتحول تلقائيًا إلى لوحة جانبية مستقلة على اليمين',
|
|
pluginMdExportDesc: 'يضيف زر «تصدير» إلى شريط أدوات Markdown في better-sidebar: يعرض ملف .md الحالي بنقرة واحدة كملف HTML مستقل (الجداول/كتل الأكواد/مخططات Mermaid مدمجة، والتخطيط يتبع سمة المعاينة) ويحفظه بجوار الملف، أو يصدّره PDF عبر نافذة الطباعة',
|
|
pluginCodeNavDesc: 'تنقل معاينة الكود: يكتشف اللغة تلقائياً من نوع الملف ويبرز الصياغة، مخطط الرموز (تصفية الفئات/الطرق/المتغيرات + قفزة بنقرة واحدة)، والبحث داخل الملف (إبراز كل التطابقات، السابق/التالي، مطابقة حالة الأحرف) — يتولى معاينة ملفات الكود في محرر better-sidebar',
|
|
pluginSuhuangScrollDesc: 'يربط بيئة Suhuang Scroll المحلية بإعدادات DSH وbetter-sidebar لإعداد النموذج واختبار الاتصال والتحكم في التصحيح المتواصل؛ يتطلب Suhuang Scroll Runtime وdsh-better-sidebar',
|
|
pluginBetterOverleafDesc: 'تبويب Overleaf لـ better-sidebar: تسجيل دخول مباشر عبر متصفح CDP (يدعم Chromium من جهات أخرى)، قائمة المشاريع/التبديل، نسخ git محلية ضمن <workspace>/overleaf/، مزامنة git ثنائية الاتجاه مع تراجع إلى API للقراءة فقط، ومعاينة الملفات عبر مساحة عمل الشريط الجانبي',
|
|
pluginGitRemotesDesc: 'تبويب Git Remotes: فرع/أصل/أمام-خلف، fetch (مع prune اختياري)، ff-only pull، والدفع فقط بعد تأكيد داخل التبويب. لا يستبدل تبويب Git المدمج للإدراج/التثبيت، ولا يقدّم force-push أو أداة دفع آلي للنموذج',
|
|
pluginSentinelDesc: 'نظام إيقاظ وكيل يحرّكه تحقّق الشروط: مستشعرات ملف/عملية/منفذ/HTTP/أمر/webhook توقظ الجلسات الخاملة عند تحقّق الشرط؛ يُسجِّل تبويب «Sentinel» مع جدول مراقبة شامل للخادم',
|
|
pluginServerDeckDesc: 'لوحة بطاقات الخوادم: بطاقة لكل خادم تعرض حالة الاتصال ونظام التشغيل ومدة التشغيل واستخدام المعالج/الذاكرة/القرص وزمن الاستجابة؛ انقر على البطاقة لفتح طرفية xterm.js تفاعلية؛ استيراد ~/.ssh/config بنقرة واحدة (يتم تجاهل أسماء مواقع Git المستعارة تلقائياً). يسجّل تبويب «الخوادم» الأصلي عند تثبيت better-sidebar ويحافظ على الدرج الجانبي المستقل كبديل',
|
|
pluginSidebarQaDesc: 'حدِّد واسأل: تحديد نص المحادثة ← السؤال في اللوحة اليمنى ← جلسة متابعات مخصّصة في نفس مساحة العمل (❓ متابعة · موضوع): نموذج سريع بلا تفكير يضغط سياق المحادثة الرئيسي ويحقنه مع الاقتباس دون مقاطعة المحادثة الرئيسية؛ المتابعات تتداخل وتستمر وتُؤرشف',
|
|
pluginSidenoteDesc: 'محادثة جانبية بأسلوب Codex + تعليقات على التحديد: أنشئ fork للجلسة الحالية في لوحة جانبية دائمة (تُؤرشف فتُخفى من قائمة الجلسات، تعمل نسخ متعددة معًا، أمر /side، تبقى بعد إعادة التحميل، والنموذج يتبع الجلسة الرئيسية)؛ حدِّد نص الـ assistant ← شارة مرقّمة + محرّر ملاحظات ← chip "N تعليقات" يُرفق برسالتك التالية، أو اسأل مباشرةً في محادثة جانبية',
|
|
pluginSshTunnelDesc: 'تبويب «SSH Tunnel»: قائمة مضيفين متعددين + منح لكل مشروع + أسرار محلية؛ أداة SSHManager للنموذج (exec/SFTP/استراتيجيات الجلسة)؛ طرفية تفاعلية مركزية وSFTP ذو عمودين',
|
|
pluginTurnReviewDesc: 'بوابة بشرية على فرق «الدور المنتهي للتو»: Approve / Request changes لكل مسار مع تعليق اختياري؛ المسارات مجمّعة حسب الجلسة الرئيسية / الوكيل الفرعي / غير منسوب؛ فرق snapshot-vs-now مضمّن قبل القرار. لا تفريع، لا /rewind',
|
|
pluginVideoPreviewDesc: 'معاينة فيديو مضمّنة (.mp4/.webm/.mov/.mkv/.avi إلخ) في محرّر better-sidebar، مدعومة بمسار /video مخصّص يدعم HTTP Range (206) — التحكم بالتشغيل يعمل والملفات غير مقيدة بحد mediaLimit البالغ 20MB',
|
|
pluginDocsPanelDesc: '«وثائق عامة» في شريط DSH الجانبي: ملاحظات Markdown عامة، قابلة للقراءة من أي مساحة عمل — قائمة ملفات، مخطط تفصيلي، فتح في Chrome / VS Code، وأزرار نسخ؛ دليل الوثائق قابل للتكوين (الافتراضي ~/.dsh/docs)',
|
|
pluginEgoBrowserDesc: 'متصفح الوكيل لـ DeepSeek Harness: 32 أداة ego_* تقود متصفح Chromium حقيقي، مع تبويب «متصفح ego» أصلي في الشريط الجانبي يعرض مباشرة كل صفحة يزورها الوكيل — يمكنك النقر والسحب والكتابة لتولي التحكم. يسجّل التبويب تلقائيًا عند وجود better-sidebar، وإلا يظهر كفقاعة عائمة',
|
|
pluginBilingualReaderDesc: 'اقرأ ملفات PDF في الشريط الجانبي لـ DSH: عرض PDF أصلي، حدد نصًا لترجمته بواسطة النموذج اللغوي مع السياق، معزولًا تمامًا عن المحادثة الرئيسية',
|
|
changesRedactOn: "تنقيع مُفعّل: تظهر الأسرار كـ [REDACTED]؛ انقر للتعطيل (على مسؤوليتك)",
|
|
changesRedactOff: "تنقيع مُعطّل: سيُعرض المحتوى كما هو؛ انقر للتفعيل",
|
|
changesRedactOnLabel: "تنقيع",
|
|
changesRedactOffLabel: "بدون تنقيع",
|
|
changesRedactBanner: "مُنقّى",
|
|
pluginSentinelName: 'dsh-sentinel نظام الاستيقاظ',
|
|
pluginEgoBrowserName: 'ego-browser متصفح الوكيل',
|
|
pluginBetterOverleafName: 'dsh-better-overleaf تبويب Overleaf',
|
|
pluginDocsPanelName: 'dsh-docs-panel مستندات عامة',
|
|
pluginFlowglassName: 'dsh-flowglass Flowglass',
|
|
pluginGitForgeName: 'dsh-git-forge بيانات اعتماد Git',
|
|
pluginGitRemotesName: 'dsh-git-remotes أجهزة Git البعيدة',
|
|
pluginGithubWorkbenchName: 'dsh-github-workbench منصة GitHub',
|
|
pluginSidebarQaName: 'dsh-sidebar-qa تحديد وسؤال',
|
|
pluginSidenoteName: 'dsh-sidenote محادثة جانبية',
|
|
pluginServerDeckName: 'dsh-server-deck لوحة الخوادم',
|
|
pluginSuhuangScrollName: 'dsh-suhuang-scroll Suhuang Scroll',
|
|
pluginSshTunnelName: 'dsh-ssh-tunnel نفق SSH',
|
|
pluginTurnReviewName: 'dsh-turn-review مراجعة الجولة',
|
|
pluginBilingualReaderName: 'dsh-bilingual-reader قارئ ثنائي اللغة',
|
|
pluginOfficeName: 'معاينة Office',
|
|
pluginMdExportName: 'تصدير Markdown',
|
|
pluginCodeNavName: 'مستكشف معاينة الكود',
|
|
pluginVideoPreviewName: 'معاينة الفيديو',
|
|
presetDshDesktopDesc: 'وضع Electron المتقدم (بلا إطار): يحجز macOS شريطًا علويًا بمقدار 20px، ويحجز Windows بمقدار 32px لشريط العنوان عند غياب WCO',
|
|
}
|