Files
TX/artifacts/tx-os/src/locales/ar.json
T
Riyadh c28775fe42 Task #164: Per-user notification preferences for Executive Meetings
Lets each user choose whether to receive in-app and/or email notifications
for each executive-meeting event type (meeting_created, request_submitted,
request_approved/rejected/needs_edit, task_assigned, task_completed).
Defaults to "everything on" when no preference row exists, preserving the
prior fan-out behavior for users who never visit the new UI.

Schema:
- New executive_meeting_notification_prefs table (user_id FK CASCADE,
  notification_type varchar(64), in_app bool default true, email bool
  default true, plus a unique index on (user_id, notification_type)).
- Pushed to dev DB via `pnpm --filter @workspace/db push`.

Backend:
- Exported EXECUTIVE_MEETING_NOTIFICATION_TYPES (canonical list) +
  filterRecipientsByNotificationPref(ids, type, channel) helper that
  returns only recipients whose row says the channel is on (default-on
  semantics for missing rows).
- recordExecutiveMeetingNotifications now filters recipients by
  channel="inApp" before inserting; sendExecutiveMeetingEmail filters
  by channel="email" before SMTP delivery.
- New endpoints under /executive-meetings/notification-prefs:
  GET → { types, prefs } merged with defaults.
  PUT → upserts each supplied (type, channel) pair via
  onConflictDoUpdate inside a transaction.

Frontend:
- New NotificationPrefsCard at the top of the Notifications section in
  artifacts/tx-os/src/pages/executive-meetings.tsx. Renders a Switch per
  (event type × channel) with batched save, dirty-state tracking, reset
  button, and useToast feedback.
- Translation keys for the card added to en.json and ar.json under
  executiveMeetings.notificationsPage.prefs.

Tests:
- 5 new tests in artifacts/api-server/tests/executive-meetings.test.mjs:
  GET defaults, PUT roundtrip + upsert, 400 on unknown type, in-app
  fan-out filtering (muted approver gets no row, control approver still
  does), and channel-independence (muting only the email channel leaves
  in-app delivery intact while persisting email=false in the DB row that
  sendExecutiveMeetingEmail's filter reads).
- All 36 executive-meetings tests pass. Full suite shows only one
  pre-existing flaky test elsewhere (groups-crud count assertion),
  unrelated to these changes.
- Added e2e UI test that logs in as admin, toggles a preference, saves,
  refreshes, and confirms persistence.
- After-hook cleans up new prefs rows for created users.

Follow-ups proposed: #236 (one-click reset to defaults), #237 (admin
view/override of any user's prefs).
2026-04-30 18:56:05 +00:00

1341 lines
66 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"nav": {
"home": "الرئيسية",
"services": "الخدمات",
"chat": "المحادثات",
"notifications": "الإشعارات",
"admin": "لوحة التحكم",
"logout": "تسجيل الخروج"
},
"auth": {
"login": "تسجيل الدخول",
"register": "إنشاء حساب",
"username": "اسم المستخدم",
"email": "البريد الإلكتروني",
"password": "كلمة المرور",
"loginButton": "دخول",
"registerButton": "تسجيل",
"welcomeBack": "مرحباً بعودتك",
"createAccount": "حساب جديد",
"registrationClosed": "إنشاء الحسابات العامة مغلق حالياً. تواصل مع مدير النظام.",
"displayNameAr": "الاسم (عربي)",
"displayNameEn": "الاسم (إنجليزي)",
"subtitle": "سجّل دخولك للمتابعة",
"signingIn": "جارٍ الدخول...",
"noAccount": "ليس لديك حساب؟",
"showPassword": "إظهار كلمة المرور",
"hidePassword": "إخفاء كلمة المرور",
"errRequired": "الرجاء إدخال اسم المستخدم وكلمة المرور.",
"errInvalid": "اسم مستخدم أو كلمة مرور غير صحيحة.",
"forgotPassword": "نسيت كلمة المرور؟",
"forgot": {
"title": "إعادة تعيين كلمة المرور",
"subtitle": "أدخل اسم المستخدم أو البريد الإلكتروني وسنرسل لك رابطاً لإعادة تعيين كلمة المرور.",
"identifier": "اسم المستخدم أو البريد الإلكتروني",
"identifierPlaceholder": "you@example.com",
"submit": "إرسال رابط الاستعادة",
"sending": "جارٍ الإرسال...",
"errRequired": "الرجاء إدخال اسم المستخدم أو البريد الإلكتروني.",
"errGeneric": "حدث خطأ ما. حاول مرة أخرى.",
"successMessage": "تم استلام طلبك. سيقوم المسؤول بمشاركة رابط إعادة التعيين معك قريباً.",
"adminNotice": "إرسال البريد الإلكتروني غير مفعّل بعد لهذه المساحة، لذا سيصدر المسؤول رابط إعادة تعيين لمرة واحدة يدوياً.",
"backToLogin": "العودة إلى تسجيل الدخول"
},
"reset": {
"title": "تعيين كلمة مرور جديدة",
"subtitle": "اختر كلمة مرور جديدة لحسابك.",
"newPassword": "كلمة المرور الجديدة",
"confirmPassword": "تأكيد كلمة المرور",
"submit": "تحديث كلمة المرور",
"saving": "جارٍ الحفظ...",
"errMinLength": "يجب أن تكون كلمة المرور ٦ أحرف على الأقل.",
"errMismatch": "كلمتا المرور غير متطابقتين.",
"errGeneric": "تعذّر إعادة تعيين كلمة المرور. قد يكون الرابط منتهي الصلاحية.",
"invalidToken": "رابط إعادة التعيين غير صالح أو منتهي الصلاحية.",
"requestNew": "طلب رابط جديد",
"successMessage": "تم تحديث كلمة المرور بنجاح. يمكنك تسجيل الدخول بكلمة المرور الجديدة.",
"goToLogin": "الذهاب لتسجيل الدخول"
},
"heroTitle": "مرحباً بك في منصتك الموحدة.",
"heroSubtitle": "سجّل دخولك لإدارة كل شيء من مكان واحد.",
"feat1": "كل أدواتك في لوحة تحكم واحدة",
"feat2": "تحديثات لحظية",
"feat3": "وصول آمن بالجلسات",
"rights": "جميع الحقوق محفوظة."
},
"home": {
"myApps": "تطبيقاتي",
"noApps": "لا توجد تطبيقات بعد",
"noAppsHint": "ستظهر هنا التطبيقات التي تملك صلاحية الوصول إليها.",
"greeting": {
"morning": "صباح الخير، {{name}}",
"afternoon": "مساء الخير، {{name}}",
"evening": "مساء الخير، {{name}}"
},
"stats": {
"apps": "التطبيقات",
"services": "الخدمات",
"messages": "الرسائل",
"alerts": "التنبيهات"
},
"clockStyle": {
"label": "نمط الساعة",
"showWidget": "إظهار ساعة الحائط في الشاشة الرئيسية",
"showTopbar": "إظهار الساعة في الشريط العلوي",
"hideWidget": "إخفاء الساعة",
"hourFormat": {
"label": "صيغة الساعة",
"h12": "12 ساعة (ص/م)",
"h24": "24 ساعة"
},
"options": {
"full": "كامل (الوقت واليوم والتقويمان الهجري والميلادي)",
"digital": "رقمي مع الثواني",
"digital-no-seconds": "رقمي بدون ثواني",
"analog": "ساعة عقاربية",
"minimal": "مبسّط (الوقت فقط)"
}
}
},
"services": {
"title": "الخدمات",
"available": "متاح",
"unavailable": "غير متاح",
"price": "السعر",
"noServices": "لا توجد خدمات متاحة",
"category": "التصنيف",
"free": "مجاني",
"order": "اطلب",
"orderModalTitle": "اطلب: {{name}}",
"orderNotes": "ملاحظات (اختياري)",
"orderNotesPlaceholder": "أي ملاحظات إضافية؟",
"orderNotesCounter": "{{count}}/500",
"placeOrder": "إرسال",
"placing": "جارٍ الإرسال...",
"orderPlaced": "تم إرسال طلبك",
"orderFailed": "تعذّر إرسال الطلب",
"myOrdersLink": "طلباتي"
},
"myOrders": {
"title": "طلباتي",
"loadError": "تعذّر تحميل الطلبات. حاول مرة أخرى.",
"retry": "إعادة المحاولة",
"back": "رجوع",
"empty": "لا توجد طلبات بعد",
"emptyHint": "ابدأ من كتالوج الخدمات.",
"browseServices": "تصفّح الخدمات",
"notesLabel": "ملاحظات:",
"cancel": "إلغاء الطلب",
"cancelConfirmTitle": "إلغاء هذا الطلب؟",
"cancelConfirmBody": "ستتاح لك ثوانٍ قليلة للتراجع.",
"cancelConfirm": "نعم، إلغاء",
"keep": "احتفظ به",
"cancelled": "تم إلغاء الطلب",
"cancelFailed": "تعذّر إلغاء الطلب",
"restoreFailed": "تعذّر استعادة الطلب",
"delete": "حذف",
"reorder": "اطلب مجددًا",
"deleteConfirmTitle": "حذف هذا الطلب؟",
"deleteConfirmBody": "سيتم حذف الطلب نهائياً من سجلّك.",
"deleteConfirm": "نعم، احذف",
"deleted": "تم حذف الطلب",
"deleteFailed": "تعذّر حذف الطلب",
"undo": "تراجع",
"undone": "تمت الاستعادة",
"clearFinished_one": "مسح طلب منتهٍ",
"clearFinished_other": "مسح {{count}} طلبات منتهية",
"clearConfirmTitle": "مسح الطلبات المنتهية؟",
"clearConfirmBody_one": "سيتم حذف طلب واحد منتهٍ نهائياً من سجلّك.",
"clearConfirmBody_other": "سيتم حذف {{count}} طلبات منتهية نهائياً من سجلّك.",
"clearConfirm": "نعم، امسح",
"clearedCount_one": "تم حذف طلب واحد",
"clearedCount_other": "تم حذف {{count}} طلبات",
"clearedPartial": "تم حذف {{ok}} وفشل {{fail}}"
},
"orderStatus": {
"pending": "بانتظار المستلِم",
"received": "تم الاستلام",
"preparing": "قيد التحضير",
"completed": "مكتمل",
"cancelled": "ملغى"
},
"incomingOrders": {
"title": "الطلبات الواردة",
"linkLabel": "الطلبات الواردة",
"subtitleUnclaimed": "طلبات بانتظار الاستلام",
"subtitleMine": "طلباتي الجارية",
"empty": "ما في طلبات حالياً",
"emptyHint": "ستظهر هنا الطلبات الجديدة فور وصولها.",
"loadError": "تعذّر تحميل الطلبات الواردة.",
"retry": "إعادة المحاولة",
"noAccess": "ليس لديك صلاحية لاستلام الطلبات.",
"back": "رجوع",
"ageJustNow": "الآن",
"ageMinutes": "منذ {{count}} د",
"ageHours": "منذ {{count}} س",
"ageDays": "منذ {{count}} يوم",
"from": "من",
"confirmReceipt": "استلام الطلب",
"confirming": "جارٍ التأكيد...",
"markPreparing": "بدء التحضير",
"markCompleted": "إنجاز",
"cancel": "إلغاء",
"alreadyClaimed": "استلمه شخص آخر قبلك",
"orderUnavailable": "هذا الطلب لم يعد متاحاً",
"actionFailed": "تعذّر تنفيذ الإجراء",
"claimed": "تم استلام الطلب",
"marked": "تم تحديث الحالة",
"cancelled": "تم إلغاء الطلب",
"undo": "تراجع",
"undone": "تمت الاستعادة",
"restoreFailed": "تعذّر استعادة الطلب"
},
"chat": {
"title": "المحادثات",
"newMessage": "رسالة جديدة",
"typeMessage": "اكتب رسالتك...",
"send": "إرسال",
"noConversations": "لا توجد محادثات",
"createConversation": "محادثة جديدة",
"groupChat": "مجموعة",
"directMessage": "محادثة خاصة",
"participants": "المشاركون",
"searchUsers": "البحث عن مستخدمين",
"modeDirect": "محادثة خاصة",
"modeGroup": "مجموعة",
"groupNameAr": "اسم المجموعة (عربي)",
"groupNameEn": "اسم المجموعة (إنجليزي)",
"groupNamePlaceholderAr": "مثلاً: فريق المبيعات",
"groupNamePlaceholderEn": "e.g. Sales team",
"searchUsersPlaceholder": "ابحث بالاسم أو اسم المستخدم",
"participantsCount_one": "{{count}} شخص مختار",
"participantsCount_other": "{{count}} أشخاص مختارين",
"participantsCount_zero": "لم يتم اختيار أحد",
"noUsersFound": "لا يوجد مستخدمون مطابقون",
"uploadAvatar": "رفع صورة",
"replaceAvatar": "استبدال الصورة",
"removeAvatar": "إزالة الصورة",
"changeAvatar": "تغيير صورة المجموعة",
"uploadingAvatar": "جارٍ الرفع… {{progress}}٪",
"avatarUploadFailed": "تعذّر رفع الصورة",
"validation": {
"needGroupName": "أدخل اسم المجموعة بالعربية أو الإنجليزية.",
"minTwoMembers": "اختر شخصين على الأقل لإنشاء مجموعة.",
"pickOnePerson": "اختر شخصاً واحداً للمحادثة."
},
"create": "إنشاء",
"settings": {
"title": "إعدادات المجموعة",
"openSettings": "فتح إعدادات المجموعة",
"groupName": "اسم المجموعة",
"saveName": "حفظ الاسم",
"nameSaved": "تم تحديث اسم المجموعة",
"saveFailed": "تعذّر حفظ التغييرات",
"needGroupName": "أدخل اسم المجموعة بالعربية أو الإنجليزية.",
"members_one": "عضو واحد",
"members_two": "عضوان",
"members_few": "{{count}} أعضاء",
"members_many": "{{count}} عضواً",
"members_other": "{{count}} عضو",
"addMembers": "إضافة أعضاء",
"addSelected": "إضافة",
"membersAdded": "تمت إضافة الأعضاء",
"addFailed": "تعذّرت إضافة الأعضاء",
"removeMember": "إزالة العضو",
"removeFailed": "تعذّرت إزالة العضو",
"admin": "مشرف",
"you": "(أنت)",
"viewOnly": "فقط مشرف المجموعة يستطيع تغيير الاسم أو الأعضاء."
},
"filterAll": "نشطة",
"filterArchived": "المؤرشفة",
"noArchived": "لا توجد محادثات مؤرشفة",
"actions": {
"title": "خيارات المحادثة",
"openActions": "فتح خيارات المحادثة",
"mute": "كتم الإشعارات",
"unmute": "إلغاء كتم الإشعارات",
"archive": "أرشفة المحادثة",
"unarchive": "إلغاء الأرشفة",
"leave": "مغادرة المجموعة",
"leaveConfirmTitle": "مغادرة هذه المجموعة؟",
"leaveConfirmBody": "ستتم إزالتك من \"{{name}}\" ولن تتلقى رسائلها بعد الآن.",
"successorTitle": "اختر المشرف التالي",
"successorHelp": "أنت المشرف الوحيد. اختر من يتولى الإدارة، أو دعنا نرقّي أقدم عضو في المجموعة.",
"successorAuto": "تلقائي (أقدم عضو)",
"muted": "تم كتم الإشعارات",
"unmuted": "الإشعارات مفعّلة",
"archived": "تمت أرشفة المحادثة",
"unarchived": "أعيدت المحادثة إلى النشطة",
"left": "غادرت المجموعة",
"actionFailed": "تعذّر تنفيذ الإجراء",
"mutedLabel": "مكتومة",
"youAreAdminTitle": "أنت الآن المشرف",
"youAreAdminDescription": "أصبحت مسؤولًا عن \"{{name}}\".",
"newAdminBadge": "مشرف جديد",
"newAdminLabel": "مشرف جديد: {{name}}"
},
"system": {
"someone": "شخص ما",
"listSeparator": "، ",
"groupRenamed": "غيّر {{actor}} اسم المجموعة إلى \"{{name}}\"",
"membersAdded_one": "أضاف {{actor}} {{names}}",
"membersAdded_other": "أضاف {{actor}} {{names}}",
"memberRemoved": "أزال {{actor}} {{target}}",
"memberLeft": "غادر {{actor}} المجموعة",
"adminPromoted": "{{target}} أصبح مشرفًا للمجموعة",
"adminPromotedAfterLeave": "تمت ترقية {{target}} إلى مشرف بعد مغادرة المشرف السابق"
}
},
"notifications": {
"title": "الإشعارات",
"markAllRead": "تحديد الكل كمقروء",
"noNotifications": "لا توجد إشعارات جديدة",
"unread": "غير مقروء"
},
"admin": {
"title": "لوحة التحكم",
"manageApps": "إدارة التطبيقات",
"manageServices": "إدارة الخدمات",
"manageUsers": "إدارة المستخدمين",
"appDisabled": "معطّل",
"addApp": "إضافة تطبيق",
"addService": "إضافة خدمة",
"addUser": "إضافة مستخدم",
"editApp": "تعديل التطبيق",
"editService": "تعديل الخدمة",
"editUser": "تعديل المستخدم",
"deleteConfirm": "هل أنت متأكد من الحذف؟",
"deleteApp": {
"title": "حذف التطبيق \"{{name}}\"؟",
"warning": "هذا التطبيق لا يزال قيد الاستخدام. حذفه سيؤثر على ما يلي:",
"forceHint": "سيؤدي ذلك إلى إلغاء وصول كل من يستخدمه وإزالة سجلّه. لا يمكن التراجع عن هذا الإجراء.",
"emptyBody": "هل أنت متأكد من حذف هذا التطبيق؟",
"groupCount": "{{count}} مجموعة تمنح هذا التطبيق حالياً",
"restrictionCount": "{{count}} قاعدة صلاحيات تقيّده",
"openCount": "{{count}} مرة فتح في السجل",
"confirm": "حذف",
"anyway": "حذف رغم ذلك"
},
"deleteService": {
"title": "حذف الخدمة \"{{name}}\"؟",
"warning": "هذه الخدمة لا تزال مرتبطة بطلبات. حذفها سيؤثر على ما يلي:",
"forceHint": "سيؤدي ذلك إلى حذف كل الطلبات المرتبطة نهائياً. لا يمكن التراجع عن هذا الإجراء.",
"emptyBody": "هل أنت متأكد من حذف هذه الخدمة؟",
"orderCount": "{{count}} طلب",
"confirm": "حذف",
"anyway": "حذف رغم ذلك"
},
"deleteUser": {
"title": "حذف المستخدم \"{{name}}\"؟",
"warning": "هذا المستخدم لديه بيانات. حذفه سيؤثر على ما يلي:",
"forceHint": "سيؤدي ذلك إلى حذف ملاحظاته وطلباته والمحادثات التي أنشأها والرسائل التي أرسلها بشكل نهائي. لا يمكن التراجع عن هذا الإجراء.",
"emptyBody": "هل أنت متأكد من حذف هذا المستخدم؟",
"noteCount": "{{count}} ملاحظة",
"orderCount": "{{count}} طلب",
"conversationCount": "{{count}} محادثة أنشأها",
"messageCount": "{{count}} رسالة أرسلها",
"confirm": "حذف",
"anyway": "حذف رغم ذلك"
},
"activate": "تفعيل",
"deactivate": "تعطيل",
"appName": "اسم التطبيق",
"appNameAr": "اسم التطبيق (عربي)",
"appNameEn": "اسم التطبيق (إنجليزي)",
"appSlug": "المعرف",
"appRoute": "المسار",
"appIcon": "الأيقونة",
"appColor": "اللون",
"appSortOrder": "الترتيب",
"appPermissions": {
"title": "الصلاحيات المطلوبة",
"help": "يجب أن يمتلك المستخدم على الأقل واحدة منها ليرى التطبيق. اتركها فارغة لإلغاء التقييد.",
"none": "لا توجد صلاحيات مطلوبة — التطبيق ظاهر للجميع.",
"selectPlaceholder": "اختر صلاحية…",
"add": "إضافة",
"removeAria": "إزالة الصلاحية {{name}}",
"impactTitle": "معاينة الأثر",
"impactLoading": "جارٍ حساب الأثر…",
"impactError": "تعذّر تحميل معاينة الأثر. حاول مرة أخرى.",
"impactNone": "لن يفقد أي مستخدم حق الوصول. {{visible}} مستخدمًا يرون هذا التطبيق حاليًا.",
"impactSummary": "{{affected}} من أصل {{visible}} مستخدمًا يرون هذا التطبيق حاليًا سيفقدون حق الوصول.",
"impactViaGroups": "أعضاء هذه المجموعات يحتفظون بحق الوصول بغض النظر عن التغيير: {{groups}}.",
"confirmTitle": "تأكيد تغيير الصلاحيات",
"confirmBody": "إضافة هذا الاشتراط ستخفي التطبيق عن {{affected}} من أصل {{visible}} مستخدمًا يرونه حاليًا. يمكن التراجع عن هذا التغيير.",
"confirmAction": "إضافة على أي حال"
},
"serviceName": "اسم الخدمة",
"serviceNameAr": "اسم الخدمة (عربي)",
"serviceNameEn": "اسم الخدمة (إنجليزي)",
"serviceDescriptionAr": "الوصف (عربي)",
"serviceDescriptionEn": "الوصف (إنجليزي)",
"servicePrice": "السعر",
"serviceAvailable": "متاح؟",
"serviceImageUrl": "رابط الصورة",
"serviceImage": "صورة الخدمة",
"uploadImage": "رفع صورة",
"replaceImage": "استبدال الصورة",
"uploading": "جاري الرفع...",
"uploadFailed": "فشل رفع الصورة",
"users": "المستخدمين",
"username": "اسم المستخدم",
"email": "البريد الإلكتروني",
"password": "كلمة المرور",
"roles": "الصلاحيات",
"active": "نشط",
"issueResetLink": "إصدار رابط إعادة تعيين كلمة المرور",
"orderReceiverRole": "مستلم الطلبات",
"resetLinkModal": {
"title": "رابط إعادة تعيين كلمة المرور للمستخدم {{username}}",
"description": "شارك هذا الرابط لمرة واحدة مع المستخدم. يمكن استخدامه مرة واحدة فقط.",
"expires": "تنتهي الصلاحية: {{time}}",
"copy": "نسخ الرابط",
"copied": "تم نسخ الرابط"
},
"siteSettings": "إعدادات الموقع",
"siteNameAr": "اسم الموقع (عربي)",
"siteNameEn": "اسم الموقع (إنجليزي)",
"registrationOpen": "السماح بإنشاء حسابات",
"registrationOpenHint": "عند الإيقاف، الأدمن فقط يقدر ينشئ مستخدمين جدد.",
"footerTextAr": "نص التذييل (عربي)",
"footerTextEn": "نص التذييل (إنجليزي)",
"nav": {
"dashboard": "الرئيسية",
"apps": "التطبيقات",
"services": "الخدمات",
"users": "المستخدمين",
"groups": "المجموعات",
"roles": "الأدوار",
"auditLog": "سجل التدقيق",
"userManagement": "إدارة المستخدمين",
"settings": "الإعدادات",
"menu": "القائمة"
},
"users": {
"searchPlaceholder": "ابحث باسم المستخدم أو البريد...",
"allGroups": "كل المجموعات",
"allStatuses": "كل الحالات",
"statusActive": "نشط",
"statusInactive": "موقوف",
"showing": "عرض {{count}} من أصل {{total}}",
"empty": "لا يوجد مستخدمون يطابقون الفلاتر.",
"editGroups": "تعديل المجموعات",
"editUserGroups": "تعديل مجموعات {{username}}",
"col": {
"username": "اسم المستخدم",
"email": "البريد",
"displayNameAr": "الاسم (عربي)",
"displayNameEn": "الاسم (إنجليزي)",
"language": "اللغة",
"createdAt": "تاريخ الإنشاء",
"groups": "المجموعات",
"actions": "إجراءات"
},
"review": {
"title": "مراجعة التغييرات",
"subtitle": "أكّد ما سيتم حفظه للمستخدم {{username}}.",
"noChanges": "لا توجد تغييرات للحفظ",
"groupsAdded": "مجموعات مُضافة",
"groupsRemoved": "مجموعات مُزالة",
"back": "رجوع للتعديل",
"confirm": "تأكيد وحفظ"
},
"counts": {
"notes": "{{count}} ملاحظة",
"orders": "{{count}} طلب",
"conversations": "{{count}} محادثة",
"messages": "{{count}} رسالة"
},
"historyTitle": "سجل الصلاحيات",
"historyHint": "الأدوار والمجموعات المسندة لهذا المستخدم. صفِّ بحسب من غيّر أو متى.",
"historyEmpty": "لم تُسجَّل تغييرات صلاحيات لهذا المستخدم بعد.",
"historyEmptyFiltered": "لا توجد تغييرات صلاحيات تطابق الفلاتر الحالية.",
"historyAdded_zero": "أُضيف ({{count}}):",
"historyAdded_one": "أُضيف ({{count}}):",
"historyAdded_two": "أُضيف ({{count}}):",
"historyAdded_few": "أُضيف ({{count}}):",
"historyAdded_many": "أُضيف ({{count}}):",
"historyAdded_other": "أُضيف ({{count}}):",
"historyRemoved_zero": "أُزيل ({{count}}):",
"historyRemoved_one": "أُزيل ({{count}}):",
"historyRemoved_two": "أُزيل ({{count}}):",
"historyRemoved_few": "أُزيل ({{count}}):",
"historyRemoved_many": "أُزيل ({{count}}):",
"historyRemoved_other": "أُزيل ({{count}}):",
"historyTotal_zero": "{{count}} عنصر بعد التغيير",
"historyTotal_one": "{{count}} عنصر بعد التغيير",
"historyTotal_two": "{{count}} عنصران بعد التغيير",
"historyTotal_few": "{{count}} عناصر بعد التغيير",
"historyTotal_many": "{{count}} عنصراً بعد التغيير",
"historyTotal_other": "{{count}} عنصر بعد التغيير",
"history": {
"kind": {
"roles": "الأدوار",
"groups": "المجموعات"
}
}
},
"apps": {
"counts": {
"groups": "{{count}} مجموعة",
"restrictions": "{{count}} قيد",
"opens": "{{count}} فتحة"
},
"historyTitle": "سجل الصلاحيات",
"historyHint": "الصلاحيات المطلوبة لاستخدام هذا التطبيق. صفِّ بحسب من غيّر أو متى.",
"historyEmpty": "لم تُسجَّل تغييرات صلاحيات لهذا التطبيق بعد.",
"historyEmptyFiltered": "لا توجد تغييرات صلاحيات تطابق الفلاتر الحالية.",
"historyAdded_zero": "أُضيف ({{count}}):",
"historyAdded_one": "أُضيف ({{count}}):",
"historyAdded_two": "أُضيف ({{count}}):",
"historyAdded_few": "أُضيف ({{count}}):",
"historyAdded_many": "أُضيف ({{count}}):",
"historyAdded_other": "أُضيف ({{count}}):",
"historyRemoved_zero": "أُزيل ({{count}}):",
"historyRemoved_one": "أُزيل ({{count}}):",
"historyRemoved_two": "أُزيل ({{count}}):",
"historyRemoved_few": "أُزيل ({{count}}):",
"historyRemoved_many": "أُزيل ({{count}}):",
"historyRemoved_other": "أُزيل ({{count}}):",
"historyTotal_zero": "{{count}} صلاحية بعد التغيير",
"historyTotal_one": "{{count}} صلاحية بعد التغيير",
"historyTotal_two": "{{count}} صلاحيتان بعد التغيير",
"historyTotal_few": "{{count}} صلاحيات بعد التغيير",
"historyTotal_many": "{{count}} صلاحية بعد التغيير",
"historyTotal_other": "{{count}} صلاحية بعد التغيير"
},
"services": {
"counts": {
"orders": "{{count}} طلب"
}
},
"roles": {
"searchPlaceholder": "ابحث في الأدوار...",
"addRole": "إضافة دور",
"editRole": "تعديل الدور",
"name": "الاسم",
"namePlaceholder": "مثال: content_editor",
"nameHint": "حروف وأرقام وشرطات سفلية فقط.",
"descriptionAr": "الوصف (عربي)",
"descriptionEn": "الوصف (إنجليزي)",
"system": "نظامي",
"empty": "لا توجد أدوار بعد.",
"edit": "تعديل الدور",
"delete": "حذف الدور",
"editSystemNameHint": "لا يمكن تغيير اسم الأدوار النظامية.",
"deleteTitle": "حذف الدور \"{{name}}\"؟",
"deleteEmptyBody": "هذا الدور غير مُعيَّن لأي مستخدم. هل تريد المتابعة؟",
"deleteConflict": "هذا الدور قيد الاستخدام ولا يمكن حذفه.",
"deleteConflictHint": "أزل هذا الدور من المستخدمين والمجموعات قبل حذفه.",
"deleteConfirm": "حذف",
"usersCount": "{{count}} مستخدم",
"groupsCount": "{{count}} مجموعة",
"errorNameTaken": "يوجد دور بنفس الاسم.",
"errorInvalidName": "يجب أن يبدأ اسم الدور بحرف ويحتوي على حروف وأرقام وشرطات سفلية فقط.",
"errorSystemRename": "لا يمكن تغيير اسم الأدوار النظامية.",
"renameWarningTitle": "إعادة تسمية \"{{from}}\" إلى \"{{to}}\"",
"renameWarningBody": "قد يُشار إلى اسم هذا الدور في الشيفرة أو التكاملات أو استعلامات سجل التدقيق. إعادة التسمية قد تُعطّل هذه التدفقات بصمت. حدّث جميع المراجع قبل الحفظ.",
"renameUsage": "مستخدم حالياً من قِبل {{users}} مستخدم و{{groups}} مجموعة.",
"permissions": "الصلاحيات",
"permissionsHint": "اختر الصلاحيات التي يمنحها هذا الدور.",
"permissionsSystemHint": "صلاحيات الأدوار النظامية للقراءة فقط.",
"permissionsEmpty": "لا توجد صلاحيات معرّفة.",
"errorSystemPermissions": "لا يمكن تغيير صلاحيات الأدوار النظامية.",
"errorPermissionsSave": "تعذّر حفظ صلاحيات الدور.",
"impactTitle_one": "إزالة {{count}} صلاحية",
"impactTitle_other": "إزالة {{count}} صلاحيات",
"impactLoading": "جارٍ احتساب الأثر...",
"impactNoUsers": "لا يحصل أي مستخدم حالياً على هذه الصلاحيات عبر هذا الدور.",
"impactError": "تعذّر حساب المستخدمين المتأثرين. يرجى تعديل اختيارك أو المحاولة مرة أخرى.",
"impactPerPermission": "{{users}} مستخدم سيفقد هذه الصلاحية ({{groups}} مجموعة تمنح الدور)",
"impactViaGroups": "عبر المجموعات: {{groups}}",
"impactTotal_one": "{{count}} مستخدم في المجموع سيفقد صلاحية واحدة على الأقل.",
"impactTotal_other": "{{count}} مستخدم في المجموع سيفقدون صلاحية واحدة على الأقل.",
"confirmRemovalTitle": "تأكيد إزالة الصلاحيات",
"confirmRemovalBody_one": "سيؤدي الحفظ إلى إزالة الصلاحيات من {{count}} مستخدم. قد يُلغى وصوله فوراً. هل تريد المتابعة؟",
"confirmRemovalBody_other": "سيؤدي الحفظ إلى إزالة الصلاحيات من {{count}} مستخدماً. قد يُلغى وصولهم فوراً. هل تريد المتابعة؟",
"confirmRemovalAction": "إزالة الصلاحيات",
"historyTitle": "السجل",
"historyHint": "تغييرات صلاحيات هذا الدور. استخدم عوامل التصفية لتحديد من قام بالتغيير أو متى.",
"historyEmpty": "لم تُسجَّل أي تغييرات على صلاحيات هذا الدور بعد.",
"historyEmptyFiltered": "لا توجد تغييرات تطابق عوامل التصفية الحالية.",
"historyActorUnknown": "مستخدم غير معروف",
"historyAdded_zero": "أُضيفت (0):",
"historyAdded_one": "أُضيفت (1):",
"historyAdded_two": "أُضيفت (2):",
"historyAdded_few": "أُضيفت ({{count}}):",
"historyAdded_many": "أُضيفت ({{count}}):",
"historyAdded_other": "أُضيفت ({{count}}):",
"historyRemoved_zero": "أُزيلت (0):",
"historyRemoved_one": "أُزيلت (1):",
"historyRemoved_two": "أُزيلت (2):",
"historyRemoved_few": "أُزيلت ({{count}}):",
"historyRemoved_many": "أُزيلت ({{count}}):",
"historyRemoved_other": "أُزيلت ({{count}}):",
"historyTotal_zero": "بدون صلاحيات بعد التغيير",
"historyTotal_one": "صلاحية واحدة بعد التغيير",
"historyTotal_two": "صلاحيتان بعد التغيير",
"historyTotal_few": "{{count}} صلاحيات بعد التغيير",
"historyTotal_many": "{{count}} صلاحية بعد التغيير",
"historyTotal_other": "{{count}} صلاحية بعد التغيير",
"historyShowing": "يظهر {{shown}} من أصل {{total}}",
"historyLoadMore": "عرض المزيد",
"historyFilters": {
"actor": "غُيّرت بواسطة",
"allActors": "أي شخص",
"from": "من",
"to": "إلى",
"apply": "تطبيق",
"reset": "إعادة تعيين"
},
"historyErrors": {
"invalidDate": "يجب أن تكون التواريخ بصيغة YYYY-MM-DD.",
"invertedDates": "يجب أن يكون \"من\" قبل \"إلى\" أو في نفس اليوم.",
"fixFiltersFirst": "صحّح عوامل التصفية أعلاه لتحميل السجل."
}
},
"groups": {
"searchPlaceholder": "ابحث في المجموعات...",
"addGroup": "إضافة مجموعة",
"editGroup": "تعديل المجموعة",
"name": "الاسم",
"descriptionAr": "الوصف (عربي)",
"descriptionEn": "الوصف (إنجليزي)",
"system": "نظامية",
"empty": "لا توجد مجموعات بعد.",
"members": "{{count}} عضو",
"appsCount": "{{count}} تطبيق",
"rolesCount": "{{count}} دور",
"appsHint": "أعضاء هذه المجموعة سيرون هذه التطبيقات.",
"usersHint": "أعضاء هذه المجموعة.",
"rolesHint": "يحصل أعضاء هذه المجموعة تلقائياً على هذه الأدوار.",
"rolesEmpty": "لا توجد أدوار متاحة.",
"deleteTitle": "حذف المجموعة \"{{name}}\"؟",
"deleteWarning": "هذه المجموعة لا تزال قيد الاستخدام. حذفها سيلغي الوصول لما يلي:",
"deleteForceHint": "سيؤدي الحذف إلى فصل الأعضاء وإلغاء التطبيقات والأدوار الممنوحة عبر المجموعة. لا يمكن التراجع عن هذا الإجراء.",
"deleteEmptyBody": "لا تحتوي هذه المجموعة على أعضاء أو تطبيقات أو أدوار. هل تريد المتابعة؟",
"deleteConfirm": "حذف",
"deleteAnyway": "حذف رغم ذلك",
"tab": {
"info": "المعلومات",
"apps": "التطبيقات",
"users": "المستخدمون",
"roles": "الأدوار",
"history": "السجل"
},
"historyTitle": "سجل الصلاحيات",
"historyHint": "الأعضاء والأدوار والتطبيقات المرتبطة بهذه المجموعة. صفِّ بحسب من غيّر أو متى.",
"historyEmpty": "لم تُسجَّل تغييرات صلاحيات لهذه المجموعة بعد.",
"historyEmptyFiltered": "لا توجد تغييرات صلاحيات تطابق الفلاتر الحالية.",
"historyAdded_zero": "أُضيف ({{count}}):",
"historyAdded_one": "أُضيف ({{count}}):",
"historyAdded_two": "أُضيف ({{count}}):",
"historyAdded_few": "أُضيف ({{count}}):",
"historyAdded_many": "أُضيف ({{count}}):",
"historyAdded_other": "أُضيف ({{count}}):",
"historyRemoved_zero": "أُزيل ({{count}}):",
"historyRemoved_one": "أُزيل ({{count}}):",
"historyRemoved_two": "أُزيل ({{count}}):",
"historyRemoved_few": "أُزيل ({{count}}):",
"historyRemoved_many": "أُزيل ({{count}}):",
"historyRemoved_other": "أُزيل ({{count}}):",
"historyTotal_zero": "{{count}} عنصر بعد التغيير",
"historyTotal_one": "{{count}} عنصر بعد التغيير",
"historyTotal_two": "{{count}} عنصران بعد التغيير",
"historyTotal_few": "{{count}} عناصر بعد التغيير",
"historyTotal_many": "{{count}} عنصراً بعد التغيير",
"historyTotal_other": "{{count}} عنصر بعد التغيير",
"history": {
"kind": {
"users": "المستخدمون",
"roles": "الأدوار",
"apps": "التطبيقات"
}
}
},
"audit": {
"filters": {
"action": "الإجراء",
"allActions": "كل الإجراءات",
"from": "من",
"to": "إلى",
"apply": "تطبيق",
"reset": "إعادة ضبط",
"forcedOnly": "عمليات الحذف القسري فقط",
"forcedOnlyHint": "عرض إدخالات الحذف القسري للمجموعات والمستخدمين والتطبيقات والخدمات فقط.",
"targetType": "نوع الهدف: {{type}}",
"targetWithId": "الهدف: {{type}} #{{id}}",
"clearTargetFilter": "مسح فلتر الهدف"
},
"target": "الهدف: {{type}} #{{id}}",
"targetWithName": "الهدف: {{type}} #{{id}} · {{name}}",
"showing": "عرض {{shown}} من أصل {{total}}",
"empty": "لا توجد إدخالات في سجل التدقيق تطابق الفلاتر.",
"loadMore": "عرض المزيد",
"export": {
"button": "تصدير CSV",
"failed": "تعذّر تصدير سجل التدقيق. يُرجى المحاولة مرة أخرى."
},
"errors": {
"invalidDate": "يجب أن تكون التواريخ بصيغة YYYY-MM-DD.",
"invertedDates": "تاريخ \"من\" يجب أن يكون قبل أو يساوي تاريخ \"إلى\".",
"fixFiltersFirst": "عدّل الفلاتر لتحميل الإدخالات."
},
"unit": {
"member_zero": "بدون أعضاء",
"member_one": "عضو واحد",
"member_two": "عضوان",
"member_few": "{{count}} أعضاء",
"member_many": "{{count}} عضواً",
"member_other": "{{count}} عضو",
"app_zero": "بدون تطبيقات",
"app_one": "تطبيق واحد",
"app_two": "تطبيقان",
"app_few": "{{count}} تطبيقات",
"app_many": "{{count}} تطبيقاً",
"app_other": "{{count}} تطبيق",
"role_zero": "بدون أدوار",
"role_one": "دور واحد",
"role_two": "دوران",
"role_few": "{{count}} أدوار",
"role_many": "{{count}} دوراً",
"role_other": "{{count}} دور",
"group_zero": "بدون مجموعات",
"group_one": "مجموعة واحدة",
"group_two": "مجموعتان",
"group_few": "{{count}} مجموعات",
"group_many": "{{count}} مجموعةً",
"group_other": "{{count}} مجموعة",
"order_zero": "بدون طلبات",
"order_one": "طلب واحد",
"order_two": "طلبان",
"order_few": "{{count}} طلبات",
"order_many": "{{count}} طلباً",
"order_other": "{{count}} طلب",
"change_zero": "بدون تغييرات",
"change_one": "تغيير واحد",
"change_two": "تغييران",
"change_few": "{{count}} تغييرات",
"change_many": "{{count}} تغييراً",
"change_other": "{{count}} تغيير",
"permission_zero": "بدون صلاحيات",
"permission_one": "صلاحية واحدة",
"permission_two": "صلاحيتان",
"permission_few": "{{count}} صلاحيات",
"permission_many": "{{count}} صلاحيةً",
"permission_other": "{{count}} صلاحية",
"restriction_zero": "بدون قيود",
"restriction_one": "قيد واحد",
"restriction_two": "قيدان",
"restriction_few": "{{count}} قيود",
"restriction_many": "{{count}} قيداً",
"restriction_other": "{{count}} قيد",
"note_zero": "بدون ملاحظات",
"note_one": "ملاحظة واحدة",
"note_two": "ملاحظتان",
"note_few": "{{count}} ملاحظات",
"note_many": "{{count}} ملاحظةً",
"note_other": "{{count}} ملاحظة",
"conversation_zero": "بدون محادثات",
"conversation_one": "محادثة واحدة",
"conversation_two": "محادثتان",
"conversation_few": "{{count}} محادثات",
"conversation_many": "{{count}} محادثةً",
"conversation_other": "{{count}} محادثة",
"message_zero": "بدون رسائل",
"message_one": "رسالة واحدة",
"message_two": "رسالتان",
"message_few": "{{count}} رسائل",
"message_many": "{{count}} رسالةً",
"message_other": "{{count}} رسالة",
"open_zero": "بدون فتحات",
"open_one": "فتحة واحدة",
"open_two": "فتحتان",
"open_few": "{{count}} فتحات",
"open_many": "{{count}} فتحةً",
"open_other": "{{count}} فتحة"
},
"dependencies": {
"label": "التبعيات المُزالة",
"chipAriaTargetType": "{{label}} — فتح سجل التدقيق مفلتراً حسب نوع الهدف \"{{type}}\"",
"chipAriaParent": "{{label}} — فتح سجل التدقيق لـ {{type}} #{{id}}"
},
"summary": {
"app": {
"create": "تم إنشاء التطبيق '{{name}}'",
"update": "تم تعديل التطبيق '{{name}}' ({{changes}})",
"rename": "تمت إعادة تسمية التطبيق من '{{previousName}}' إلى '{{name}}'",
"delete": "تم حذف التطبيق '{{name}}'",
"forceDelete": "تم حذف التطبيق '{{name}}' قسراً (تأثرت {{groups}})"
},
"auth": {
"issueResetLink": "تم إصدار رابط إعادة تعيين كلمة المرور للمستخدم @{{username}}"
},
"group": {
"create": "تم إنشاء المجموعة '{{name}}' ({{members}}، {{apps}})",
"update": "تم تعديل المجموعة '{{name}}' ({{changes}})",
"rename": "تمت إعادة تسمية المجموعة من '{{previousName}}' إلى '{{name}}'",
"delete": "تم حذف المجموعة '{{name}}'",
"forceDelete": "تم حذف المجموعة '{{name}}' قسراً ({{members}})",
"userAdd": "تمت إضافة المستخدم @{{username}} إلى المجموعة '{{name}}'",
"userAddById": "تمت إضافة المستخدم #{{userId}} إلى المجموعة '{{name}}'",
"userRemove": "تمت إزالة المستخدم @{{username}} من المجموعة '{{name}}'",
"userRemoveById": "تمت إزالة المستخدم #{{userId}} من المجموعة '{{name}}'",
"appAdd": "تمت إضافة التطبيق '{{appName}}' إلى المجموعة '{{name}}'",
"appAddById": "تمت إضافة التطبيق #{{appId}} إلى المجموعة '{{name}}'",
"appRemove": "تمت إزالة التطبيق '{{appName}}' من المجموعة '{{name}}'",
"appRemoveById": "تمت إزالة التطبيق #{{appId}} من المجموعة '{{name}}'",
"roleAdd": "تمت إضافة الدور '{{roleName}}' إلى المجموعة '{{name}}'",
"roleAddById": "تمت إضافة الدور #{{roleId}} إلى المجموعة '{{name}}'",
"roleRemove": "تمت إزالة الدور '{{roleName}}' من المجموعة '{{name}}'",
"roleRemoveById": "تمت إزالة الدور #{{roleId}} من المجموعة '{{name}}'"
},
"role": {
"create": "تم إنشاء الدور '{{name}}'",
"update": "تم تعديل الدور '{{name}}' ({{changes}})",
"rename": "تمت إعادة تسمية الدور من '{{previousName}}' إلى '{{name}}'",
"delete": "تم حذف الدور '{{name}}'",
"permissionsReplace": "تم تحديث صلاحيات الدور '{{name}}' (أُضيفت {{added}}، حُذفت {{removed}})",
"permissionAdd": "تمت إضافة الصلاحية '{{permission}}' إلى الدور '{{name}}'",
"permissionRemove": "تمت إزالة الصلاحية '{{permission}}' من الدور '{{name}}'"
},
"service": {
"forceDelete": "تم حذف الخدمة '{{name}}' قسراً (تأثرت {{orders}})"
},
"settings": {
"update": "تم تحديث إعدادات النظام ({{changes}})",
"registrationOpened": "تم فتح التسجيل العام",
"registrationClosed": "تم إغلاق التسجيل العام",
"registrationOpenedWith": "تم فتح التسجيل العام و{{others}}",
"registrationClosedWith": "تم إغلاق التسجيل العام و{{others}}"
},
"user": {
"delete": "تم حذف المستخدم @{{username}}",
"forceDelete": "تم حذف المستخدم @{{username}} قسراً"
}
}
},
"dashboardSoon": "إحصائيات اللوحة قريباً.",
"dashboard": {
"totalApps": "إجمالي التطبيقات",
"totalServices": "إجمالي الخدمات",
"totalUsers": "إجمالي المستخدمين",
"registration": "التسجيل",
"open": "مفتوح",
"closed": "مغلق",
"recentActivity": "آخر النشاطات",
"latestUser": "آخر مستخدم",
"latestApp": "آخر تطبيق",
"none": "—",
"newUsers7d": "مستخدمون جدد (٧ أيام)",
"vsPrev7d": "الأسبوع السابق: {{count}}",
"newUsersInRange": "مستخدمون جدد · {{range}}",
"vsPrevRange": "{{range}}: {{count}}",
"activeServices": "الخدمات النشطة",
"inactiveServices": "غير نشطة: {{count}}",
"signupsTrend": "التسجيلات",
"last7Days": "آخر ٧ أيام",
"appOpensTrend": "فتح التطبيقات",
"appOpensSummary": "{{count}} إجمالاً · {{delta}}",
"appOpensSummaryRanged": "{{count}} في {{range}} · {{delta}}",
"servicesCreatedTrend": "خدمات جديدة",
"servicesCreatedSummary": "{{count}} مضافة",
"servicesCreatedSummaryRanged": "{{count}} في {{range}}",
"trends": "الاتجاهات",
"rangeSelector": "المدى الزمني",
"range": {
"7d": "آخر ٧ أيام",
"30d": "آخر ٣٠ يومًا",
"90d": "آخر ٩٠ يومًا",
"custom": "مدى مخصص",
"customLabel": "{{from}} {{to}}"
},
"prevRange": {
"7d": "الأيام ٧ السابقة",
"30d": "الأيام ٣٠ السابقة",
"90d": "الأيام ٩٠ السابقة",
"custom": "الـ {{count}} أيام السابقة"
},
"customRange": {
"from": "من",
"to": "إلى",
"apply": "تطبيق",
"invalid": "اختر نطاقًا صحيحًا",
"loadError": "تعذّر تحميل الإحصائيات للنطاق المحدّد. يرجى التحقق من التواريخ والمحاولة مرة أخرى."
},
"topApps": "أكثر التطبيقات استخدامًا",
"topAppsSubtitle": "حسب الفتح في {{range}}",
"mostActiveUsers": "أكثر المستخدمين نشاطًا",
"mostActiveUsersSubtitle": "حسب فتح التطبيقات في {{range}}",
"leaderboardEmpty": "لا يوجد نشاط بعد",
"openCount": "{{count}} فتحة",
"viewAppDetails": "عرض تفاصيل {{name}}",
"viewUserDetails": "عرض تفاصيل {{name}}",
"drillIn": {
"loading": "جارٍ التحميل…",
"appTitle": "آخر الفتحات · {{name}}",
"userTitle": "آخر الفتحات · {{name}}",
"subtitle": "{{count}} فتحة في {{range}}",
"empty": "لا توجد فتحات في هذا النطاق",
"loadError": "تعذّر تحميل آخر الفتحات.",
"editApp": "تعديل التطبيق",
"viewUser": "عرض المستخدم",
"loadMore": "تحميل المزيد",
"loadMoreError": "تعذّر تحميل المزيد من الفتحات.",
"shownOf": "عرض {{shown}} من {{total}}"
}
}
},
"notFound": {
"title": "404 — الصفحة غير موجودة",
"description": "الصفحة التي تبحث عنها غير موجودة."
},
"common": {
"save": "حفظ",
"cancel": "إلغاء",
"delete": "حذف",
"edit": "تعديل",
"add": "إضافة",
"close": "إغلاق",
"loading": "جاري التحميل...",
"error": "حدث خطأ",
"success": "تمت العملية بنجاح",
"language": "English",
"appName": "نظام Tx",
"previous": "السابق",
"next": "التالي",
"empty": "(فارغ)"
},
"notes": {
"title": "الملاحظات",
"searchPlaceholder": "ابحث في الملاحظات",
"labels": "التصنيفات",
"manageLabels": "إدارة التصنيفات",
"newLabel": "تصنيف جديد",
"noLabelsYet": "لا توجد تصنيفات بعد",
"allLabels": "الكل",
"tabs": { "active": "ملاحظات", "archived": "الأرشيف" },
"pinned": "مثبّتة",
"others": "أخرى",
"empty": "ستظهر ملاحظاتك هنا",
"emptyArchived": "لا توجد ملاحظات في الأرشيف",
"takeNote": "اكتب ملاحظة...",
"titlePlaceholder": "العنوان",
"contentPlaceholder": "اكتب ملاحظة...",
"save": "حفظ",
"pin": "تثبيت",
"archive": "أرشفة",
"unarchive": "إلغاء الأرشفة",
"delete": "حذف",
"deleteConfirm": "حذف هذه الملاحظة؟",
"deleteLabelConfirm": "حذف هذا التصنيف؟",
"editTitle": "تعديل ملاحظة"
},
"executiveMeetings": {
"titleAr": "إدارة الاجتماعات التنفيذية",
"titleEn": "Executive Meetings Management",
"scheduleHeading": "قائمة بأسماء حضور الاجتماعات",
"date": "التاريخ:",
"exportPdf": "تصدير PDF",
"fontSettings": "إعدادات الخط",
"noMeetings": "لا توجد اجتماعات في هذا اليوم",
"virtual": "اتصال مرئي",
"virtualAttendance": "الحضور عبر الاتصال المرئي",
"internalAttendance": "الحضور الداخلي",
"externalAttendance": "حضور خارجي",
"placeholderBody": "هذا القسم قيد التطوير في المراحل القادمة. ستتوفر إدارته الكاملة قريباً.",
"col": {
"number": "#",
"meeting": "الاجتماع",
"attendees": "الحضور",
"time": "الوقت"
},
"customize": {
"title": "تخصيص الجدول",
"hint": "أظهر أو أخفِ الأعمدة. اسحب رؤوس الأعمدة لإعادة الترتيب.",
"reset": "إعادة التعيين",
"dragHint": "اسحب حد العمود لتغيير عرضه"
},
"highlight": {
"title": "تمييز الاجتماع الحالي",
"hint": "تظليل الاجتماع الذي يقع وقته الآن.",
"reset": "إعادة إلى الافتراضي"
},
"dragRow": "اسحب لإعادة الترتيب",
"editMeetingTitle": "تعديل عنوان الاجتماع",
"schedule": {
"addRow": "أضف اجتماع",
"newMeetingDefaultAr": "اجتماع جديد",
"newMeetingDefaultEn": "New meeting",
"timeStart": "وقت البداية",
"timeEnd": "وقت النهاية",
"timeOrderError": "وقت النهاية قبل وقت البداية",
"addAttendee": "أضف حاضر",
"addSubheading": "+ عنوان فرعي",
"addVirtualAttendee": "+ حاضر عبر الاتصال المرئي",
"addInternalAttendee": "+ حاضر داخلي",
"addExternalAttendee": "+ حاضر خارجي",
"newAttendeeAria": "اسم الحاضر الجديد",
"editAttendeeAria": "تعديل اسم الحاضر",
"newSubheadingAria": "نص العنوان الفرعي الجديد",
"editSubheadingAria": "تعديل نص العنوان الفرعي",
"deleteRow": "حذف الاجتماع",
"deleteRowConfirm": "حذف هذا الاجتماع؟\n\n\"{{title}}\"\n\nلا يمكن التراجع عن هذا الإجراء.",
"deleted": "تم حذف الاجتماع",
"editToggle": "تعديل",
"editToggleAria": "تبديل وضع التعديل",
"editToggleOn": "وضع التعديل مفعّل",
"editToggleOff": "وضع التعديل معطّل",
"saveToggle": "حفظ",
"saveToggleAria": "إنهاء التعديل وحفظ التغييرات",
"saveToggleOn": "وضع التعديل مفعّل — انقر للحفظ والخروج",
"saveToggleOff": "وضع التعديل معطّل — انقر للبدء بالتعديل",
"bulkSelectRow": "تحديد الاجتماع",
"bulkSelectAll": "تحديد الكل",
"bulkSelectionCount": "محدد: {{n}} من {{total}}",
"bulkClearSelection": "إلغاء التحديد",
"bulkDeleteSelected": "حذف المحدد",
"bulkDeleteConfirm": "حذف {{n}} اجتماعاً؟\n\nلا يمكن التراجع عن هذا الإجراء.",
"bulkDeleteResultAll": "تم حذف {{n}} اجتماعاً",
"bulkDeletePartial": "تم حذف {{ok}} من {{total}} اجتماعاً، فشل {{failed}}",
"bulkDeleteResultNone": "فشل حذف الاجتماعات المحددة"
},
"rowColor": {
"label": "لون الصف"
},
"rowActions": {
"label": "إجراءات الصف",
"back": "رجوع"
},
"merge": {
"label": "دمج الخلايا",
"editLabel": "تعديل الخلية المدموجة",
"placeholder": "اضغط لإضافة نص",
"meetingAttendees": "دمج الاجتماع + الحضور",
"meetingTime": "دمج الاجتماع + الحضور + الوقت",
"all": "دمج الصف بالكامل",
"unmerge": "إلغاء الدمج"
},
"nav": {
"schedule": "جدول الاجتماعات اليومي",
"manage": "إدارة الاجتماعات",
"requests": "طلبات التعديل",
"approvals": "موافقات مدير المكتب",
"tasks": "مهام فريق التنسيق",
"notifications": "التنبيهات",
"audit": "سجل التعديلات",
"pdf": "تصدير PDF",
"fontSettings": "إعدادات الخط"
},
"common": {
"save": "حفظ",
"cancel": "إلغاء",
"delete": "حذف",
"edit": "تعديل",
"add": "إضافة",
"submit": "إرسال",
"close": "إغلاق",
"loading": "جارٍ التحميل...",
"saved": "تم الحفظ",
"saveFailed": "تعذر الحفظ",
"actions": "إجراءات",
"noPermission": "ليست لديك صلاحية لتنفيذ هذا الإجراء",
"yes": "نعم",
"no": "لا",
"all": "الكل",
"filter": "تصفية"
},
"manage": {
"heading": "إدارة الاجتماعات",
"addMeeting": "إضافة اجتماع",
"editMeeting": "تعديل الاجتماع",
"deleteMeeting": "حذف الاجتماع",
"deleteConfirm": "حذف هذا الاجتماع نهائياً؟",
"noMeetings": "لا توجد اجتماعات لهذا اليوم. اضغط \"إضافة اجتماع\" لإنشاء واحد.",
"field": {
"titleAr": "العنوان (عربي)",
"titleEn": "العنوان (إنجليزي)",
"meetingDate": "التاريخ",
"dailyNumber": "الرقم اليومي",
"dailyNumberHint": "اتركه فارغاً ليتم الترقيم تلقائياً",
"startTime": "وقت البدء",
"endTime": "وقت الانتهاء",
"location": "المكان",
"meetingUrl": "رابط الاجتماع",
"platform": "المنصة",
"status": "الحالة",
"isHighlighted": "تمييز (لون أحمر)",
"notes": "ملاحظات"
},
"attendees": {
"label": "قائمة الحضور",
"name": "الاسم",
"title": "المسمى",
"id": "رقم الحاضر",
"type": "نوع الحضور",
"add": "إضافة حاضر",
"addSubheading": "إضافة عنوان فرعي",
"subheadingName": "نص العنوان الفرعي",
"subheadingBadge": "عنوان فرعي",
"remove": "إزالة",
"moveUp": "تحريك للأعلى",
"moveDown": "تحريك للأسفل",
"dragHandle": "اسحب لإعادة الترتيب",
"removeAll": "حذف جميع الحضور",
"removeAllConfirm": "حذف جميع الحضور ({{count}})؟\n\nسيتم تطبيق التغيير عند حفظ الاجتماع."
},
"duplicate": "تكرار",
"duplicateToDate": "تكرار إلى تاريخ",
"duplicated": "تم تكرار الاجتماع",
"duplicateFailed": "تعذر تكرار الاجتماع",
"platform": {
"none": "بدون",
"webex": "Webex",
"teams": "Teams",
"zoom": "Zoom",
"other": "أخرى"
},
"attendanceType": {
"internal": "داخلي",
"virtual": "افتراضي",
"external": "خارجي"
},
"status": {
"scheduled": "مجدول",
"cancelled": "ملغى",
"completed": "منتهٍ",
"postponed": "مؤجل"
},
"errors": {
"titleRequired": "العنوان بالعربية مطلوب",
"dateRequired": "التاريخ مطلوب",
"duplicateNumber": "هذا الرقم اليومي مستخدم بالفعل في هذا التاريخ",
"saveFailed": "تعذر حفظ الاجتماع"
}
},
"requests": {
"heading": "طلبات التعديل",
"newRequest": "طلب جديد",
"myRequests": "طلباتي",
"allRequests": "جميع الطلبات",
"empty": "لا توجد طلبات.",
"filterStatus": "تصفية حسب الحالة",
"submitFor": "اقتراح تعديل على:",
"noTargetMeeting": "اقتراح اجتماع جديد (بدون ربط)",
"details": "التفاصيل",
"detailsPlaceholder": "اشرح ما تقترح بالتفصيل...",
"submitted": "تم إرسال الطلب",
"submitFailed": "تعذر إرسال الطلب",
"requestedBy": "مقدم الطلب",
"requestedAt": "وقت الطلب",
"type": {
"create": "إنشاء اجتماع",
"edit": "تعديل بيانات",
"delete": "حذف",
"reschedule": "إعادة جدولة",
"add_attendee": "إضافة حاضر",
"remove_attendee": "إزالة حاضر",
"change_location": "تغيير المكان",
"cancel_meeting": "إلغاء الاجتماع",
"note": "ملاحظة",
"highlight": "تمييز",
"unhighlight": "إزالة التمييز",
"other": "آخر"
},
"status": {
"new": "جديد",
"approved": "تمت الموافقة",
"rejected": "مرفوض",
"needs_edit": "يحتاج تعديل",
"withdrawn": "مسحوب",
"done": "تم"
}
},
"approvals": {
"heading": "موافقات مدير المكتب",
"empty": "لا توجد طلبات بانتظار المراجعة.",
"approve": "اعتماد",
"reject": "رفض",
"needsEdit": "إعادة للتعديل",
"needsEditDone": "تم إرجاع الطلب لمقدّمه",
"reviewNotes": "ملاحظات المراجعة",
"reviewNotesPlaceholder": "اكتب ملاحظاتك هنا (اختياري)",
"approved": "تم الاعتماد",
"rejected": "تم الرفض",
"actionFailed": "تعذر تنفيذ المراجعة"
},
"tasks": {
"heading": "مهام فريق التنسيق",
"addTask": "إضافة مهمة",
"empty": "لا توجد مهام.",
"field": {
"taskType": "نوع المهمة",
"assignee": "المُكلَّف",
"assigneeIdPlaceholder": "معرّف المستخدم",
"dueDate": "تاريخ الاستحقاق",
"notes": "ملاحظات",
"meeting": "الاجتماع",
"status": "الحالة"
},
"status": {
"pending": "بالانتظار",
"in_progress": "قيد التنفيذ",
"completed": "منجزة",
"cancelled": "ملغاة"
},
"markCompleted": "إنهاء المهمة",
"markInProgress": "بدء التنفيذ",
"deleteConfirm": "حذف هذه المهمة؟",
"saved": "تم حفظ المهمة",
"deleted": "تم حذف المهمة",
"reassign": "إعادة إسناد / تعديل",
"reassigned": "تم تحديث المهمة",
"myTasksOnly": "مهامي فقط",
"myTasksOnlyHelp": "ينظر المنسقون إلى المهام المسندة إليهم فقط، بينما يرى قائد التنسيق ومدير المكتب والمسؤول جميع المهام."
},
"audit": {
"heading": "سجل التعديلات",
"empty": "لا توجد قيود في السجل.",
"filterDate": "تصفية بالتاريخ",
"filterEntity": "النوع",
"filter": {
"from": "من",
"to": "إلى",
"actorId": "معرّف المنفّذ"
},
"pageInfo": "عرض",
"all": "الكل",
"col": {
"when": "الوقت",
"actor": "المنفّذ",
"action": "الإجراء",
"entity": "النوع",
"entityId": "المعرف",
"diff": "التفاصيل",
"changes": "التغييرات"
},
"created": "تم إنشاء",
"removed": "تم حذف",
"moreChanges": "تغييرات أخرى",
"entity": {
"meeting": "اجتماع",
"attendee": "حاضر",
"request": "طلب",
"task": "مهمة",
"font_settings": "إعدادات الخط",
"pdf_archive": "أرشيف PDF"
},
"action": {
"create": "إنشاء",
"update": "تعديل",
"delete": "حذف",
"approve": "اعتماد",
"approved": "تم الاعتماد",
"reject": "رفض",
"rejected": "تم الرفض",
"needs_edit": "إعادة للتعديل",
"withdraw": "سحب",
"submit": "إرسال",
"apply": "تطبيق",
"duplicate": "تكرار",
"replace_attendees": "تحديث الحضور",
"done": "تم"
}
},
"print": {
"title": "جدول الاجتماعات التنفيذية",
"no": "#",
"meeting": "الاجتماع",
"attendees": "الحضور",
"time": "الوقت",
"location": "المكان",
"none": "لا توجد اجتماعات لهذا اليوم.",
"print": "طباعة",
"back": "إغلاق",
"loading": "جارٍ التحميل…"
},
"pdf": {
"heading": "تصدير PDF",
"intro": "يتم توليد ملف PDF حقيقي لجدول اليوم على الخادم باستخدام إعدادات الخط المحفوظة. كل عملية تنزيل تتم أرشفتها.",
"downloadPdf": "تنزيل PDF",
"downloadHint": "يُولَّد ملف PDF حسب تفضيلات الخط (النوع، الحجم، الوزن، المحاذاة) مع تشكيل عربي صحيح من اليمين لليسار.",
"downloaded": "بدأ تنزيل ملف PDF",
"selectDate": "تاريخ الجدول",
"archivesHeading": "ملفات PDF المؤرشفة",
"noArchives": "لا توجد ملفات PDF مؤرشفة لهذا التاريخ بعد.",
"downloadArchive": "تنزيل",
"legacyArchive": "نسخة قديمة"
},
"fontSettingsPage": {
"heading": "إعدادات الخط",
"intro": "تطبق هذه الإعدادات على جدول الاجتماعات. يمكنك حفظ تفضيلك الشخصي، ويمكن للمسؤول حفظ الإعدادات العامة لجميع المستخدمين.",
"scope": "النطاق",
"scopeUser": "تفضيلي الشخصي",
"scopeGlobal": "عام (جميع المستخدمين)",
"fontFamily": "نوع الخط",
"fontSize": "حجم الخط",
"fontWeight": "السماكة",
"alignment": "المحاذاة",
"weight": {
"regular": "عادي",
"medium": "متوسط",
"semibold": "نصف عريض",
"bold": "عريض"
},
"align": {
"start": "بداية",
"center": "وسط",
"end": "نهاية"
},
"preview": "معاينة",
"previewText": "نص تجريبي ١٢٣ Sample 123",
"save": "حفظ الإعدادات",
"saved": "تم الحفظ",
"reset": "إعادة الافتراضي"
},
"notificationsPage": {
"heading": "التنبيهات",
"intro": "تنبيهات فورية لاجتماعات المكتب — تُسلَّم إلى لوحة التنبيهات داخل النظام عند وقوع الأحداث، ويُرسل بريد للمعتمدين عند وجود طلب بانتظار المراجعة.",
"empty": "لا توجد تنبيهات بعد.",
"col": {
"meeting": "الاجتماع",
"user": "المستخدم",
"type": "النوع",
"scheduledAt": "الموعد",
"status": "الحالة"
},
"type": {
"reminder": "تذكير",
"change": "تنبيه تعديل",
"cancel": "تنبيه إلغاء",
"meeting_created": "اجتماع جديد",
"request_submitted": "طلب بانتظار المراجعة",
"request_approved": "تم اعتماد الطلب",
"request_rejected": "تم رفض الطلب",
"request_needs_edit": "الطلب يحتاج تعديلاً",
"task_assigned": "إسناد مهمة",
"task_completed": "اكتمال مهمة"
},
"status": {
"pending": "بالانتظار",
"sent": "أُرسل",
"skipped": "متخطى",
"failed": "فشل"
},
"prefs": {
"heading": "تفضيلات التنبيهات الخاصة بي",
"intro": "اختر الأحداث التي تريد تنبيهات داخل النظام لها وأيها يصلك عبر البريد. إيقاف المفتاح يكتم تلك القناة لذلك النوع من الأحداث فقط.",
"col": {
"event": "الحدث",
"inApp": "داخل النظام",
"email": "بريد إلكتروني"
},
"save": "حفظ التفضيلات",
"reset": "إعادة",
"saved": "تم حفظ التفضيلات"
}
}
}
}