1ca5d5ae4b
Original task: Show admins a history of sensitive actions. Forced group deletions already write to the new `audit_logs` table; admins now have a UI to browse and filter those entries. API - New OpenAPI endpoint GET /admin/audit-logs (admin-only) with optional filters: action (exact), from / to (YYYY-MM-DD, inclusive), limit (1-200, default 50), offset (default 0). - New schemas: AuditLogActor, AuditLogEntry, AuditLogList. List response includes paginated `entries`, `totalCount`, `nextOffset`, and a distinct `actions` list to power the filter dropdown. - New `audit` tag added to the spec; ran orval codegen so api-client-react / api-zod expose useListAuditLogs et al. - Implemented `artifacts/api-server/src/routes/audit.ts` and registered it in routes/index.ts. Validates date format / order, joins users for actor info, and orders newest-first. UI (artifacts/tx-os/src/pages/admin.tsx) - New "Audit log" entry under the User Management nav group (icon: ScrollText). Section deep-link works via #section=audit-log. - New AuditLogPanel + AuditLogRow components: action chip + target, formatted timestamp, actor avatar/name, expandable JSON metadata. - Filters bar: action dropdown (populated from API's distinct actions), from/to date inputs, Apply / Reset, plus a "Load more" control that increases the page size (caps at 200, the API limit). Read-only by design. - Added en/ar locale strings for nav.auditLog and the audit subtree. Verification - Typecheck: pnpm -w run typecheck (clean). - API smoke tested via curl: 401 unauthenticated, validation errors for bad / inverted dates, returns the seeded `group.force_delete` entry once produced. - End-to-end browser test (testing skill): logged in as admin, navigated to /admin#section=audit-log, verified the row, expanded metadata, exercised filters (empty state + reset). No deviations from the task description. Replit-Task-Id: 5b5bf9b1-6937-43c3-85c9-81f0c19a5e49
572 lines
27 KiB
JSON
572 lines
27 KiB
JSON
{
|
||
"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": "حذف",
|
||
"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": "هل أنت متأكد من الحذف؟",
|
||
"activate": "تفعيل",
|
||
"deactivate": "تعطيل",
|
||
"appName": "اسم التطبيق",
|
||
"appNameAr": "اسم التطبيق (عربي)",
|
||
"appNameEn": "اسم التطبيق (إنجليزي)",
|
||
"appSlug": "المعرف",
|
||
"appRoute": "المسار",
|
||
"appIcon": "الأيقونة",
|
||
"appColor": "اللون",
|
||
"appSortOrder": "الترتيب",
|
||
"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": "إجراءات"
|
||
}
|
||
},
|
||
"roles": {
|
||
"searchPlaceholder": "ابحث في الأدوار...",
|
||
"addRole": "إضافة دور",
|
||
"editRole": "تعديل الدور",
|
||
"name": "الاسم",
|
||
"namePlaceholder": "مثال: content_editor",
|
||
"nameHint": "حروف وأرقام وشرطات سفلية فقط. لا يمكن تغييره لاحقاً.",
|
||
"descriptionAr": "الوصف (عربي)",
|
||
"descriptionEn": "الوصف (إنجليزي)",
|
||
"system": "نظامي",
|
||
"empty": "لا توجد أدوار بعد.",
|
||
"edit": "تعديل الدور",
|
||
"delete": "حذف الدور",
|
||
"editHint": "لا يمكن تغيير اسم الدور. يمكنك تحديث الأوصاف بالعربية والإنجليزية.",
|
||
"deleteTitle": "حذف الدور \"{{name}}\"؟",
|
||
"deleteEmptyBody": "هذا الدور غير مُعيَّن لأي مستخدم. هل تريد المتابعة؟",
|
||
"deleteConflict": "هذا الدور قيد الاستخدام ولا يمكن حذفه.",
|
||
"deleteConflictHint": "أزل هذا الدور من المستخدمين والمجموعات قبل حذفه.",
|
||
"deleteConfirm": "حذف",
|
||
"usersCount": "{{count}} مستخدم",
|
||
"groupsCount": "{{count}} مجموعة",
|
||
"errorNameTaken": "يوجد دور بنفس الاسم.",
|
||
"errorInvalidName": "يجب أن يبدأ اسم الدور بحرف ويحتوي على حروف وأرقام وشرطات سفلية فقط."
|
||
},
|
||
"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": "الأدوار"
|
||
}
|
||
},
|
||
"audit": {
|
||
"filters": {
|
||
"action": "الإجراء",
|
||
"allActions": "كل الإجراءات",
|
||
"from": "من",
|
||
"to": "إلى",
|
||
"apply": "تطبيق",
|
||
"reset": "إعادة ضبط"
|
||
},
|
||
"target": "الهدف: {{type}} #{{id}}",
|
||
"showing": "عرض {{shown}} من أصل {{total}}",
|
||
"empty": "لا توجد إدخالات في سجل التدقيق تطابق الفلاتر.",
|
||
"loadMore": "عرض المزيد",
|
||
"errors": {
|
||
"invalidDate": "يجب أن تكون التواريخ بصيغة YYYY-MM-DD.",
|
||
"invertedDates": "تاريخ \"من\" يجب أن يكون قبل أو يساوي تاريخ \"إلى\".",
|
||
"fixFiltersFirst": "عدّل الفلاتر لتحميل الإدخالات."
|
||
}
|
||
},
|
||
"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"
|
||
},
|
||
"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": "تعديل ملاحظة"
|
||
}
|
||
}
|