Marketing Hub: RBAC, i18n (AR/EN), tasks overhaul, team/user merge, tutorial
Features: - Full RBAC with 3 roles (superadmin/manager/contributor) - Ownership tracking on posts, tasks, campaigns, projects - Task system: assign to anyone, filter combobox, visibility scoping - Team members merged into users table (single source of truth) - Post thumbnails on kanban cards from attachments - Publication link validation before publishing - Interactive onboarding tutorial with Settings restart - Full Arabic/English i18n with RTL layout support - Language toggle in sidebar, IBM Plex Sans Arabic font - Brand-based visibility filtering for non-superadmins - Manager can only create contributors - Profile completion flow for new users - Cookie-based sessions (express-session + SQLite)
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import { createContext, useContext, useState, useEffect } from 'react'
|
||||
import en from './en.json'
|
||||
import ar from './ar.json'
|
||||
|
||||
const translations = { en, ar }
|
||||
|
||||
const LanguageContext = createContext()
|
||||
|
||||
export function LanguageProvider({ children }) {
|
||||
const [lang, setLangState] = useState(() => {
|
||||
// Load from localStorage or default to 'en'
|
||||
return localStorage.getItem('samaya-lang') || 'en'
|
||||
})
|
||||
|
||||
const setLang = (newLang) => {
|
||||
if (newLang !== 'en' && newLang !== 'ar') return
|
||||
setLangState(newLang)
|
||||
localStorage.setItem('samaya-lang', newLang)
|
||||
}
|
||||
|
||||
const dir = lang === 'ar' ? 'rtl' : 'ltr'
|
||||
|
||||
// Update HTML dir attribute whenever language changes
|
||||
useEffect(() => {
|
||||
document.documentElement.dir = dir
|
||||
document.documentElement.lang = lang
|
||||
}, [dir, lang])
|
||||
|
||||
// Translation function
|
||||
const t = (key) => {
|
||||
const keys = key.split('.')
|
||||
let value = translations[lang]
|
||||
|
||||
for (const k of keys) {
|
||||
value = value?.[k]
|
||||
if (value === undefined) break
|
||||
}
|
||||
|
||||
// Fallback to English if translation not found
|
||||
if (value === undefined) {
|
||||
value = translations.en
|
||||
for (const k of keys) {
|
||||
value = value?.[k]
|
||||
if (value === undefined) break
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to key itself if still not found
|
||||
return value !== undefined ? value : key
|
||||
}
|
||||
|
||||
return (
|
||||
<LanguageContext.Provider value={{ lang, setLang, t, dir }}>
|
||||
{children}
|
||||
</LanguageContext.Provider>
|
||||
)
|
||||
}
|
||||
|
||||
export function useLanguage() {
|
||||
const context = useContext(LanguageContext)
|
||||
if (!context) {
|
||||
throw new Error('useLanguage must be used within a LanguageProvider')
|
||||
}
|
||||
return context
|
||||
}
|
||||
@@ -0,0 +1,239 @@
|
||||
{
|
||||
"app.name": "سمايا",
|
||||
"app.subtitle": "مركز التسويق",
|
||||
"nav.dashboard": "لوحة التحكم",
|
||||
"nav.campaigns": "الحملات",
|
||||
"nav.finance": "المالية والعائد",
|
||||
"nav.posts": "إنتاج المحتوى",
|
||||
"nav.assets": "الأصول",
|
||||
"nav.projects": "المشاريع",
|
||||
"nav.tasks": "المهام",
|
||||
"nav.team": "الفريق",
|
||||
"nav.settings": "الإعدادات",
|
||||
"nav.users": "المستخدمين",
|
||||
"nav.logout": "تسجيل الخروج",
|
||||
"nav.collapse": "طي",
|
||||
|
||||
"common.save": "حفظ",
|
||||
"common.cancel": "إلغاء",
|
||||
"common.delete": "حذف",
|
||||
"common.edit": "تعديل",
|
||||
"common.create": "إنشاء",
|
||||
"common.search": "بحث...",
|
||||
"common.filter": "تصفية",
|
||||
"common.all": "الكل",
|
||||
"common.noResults": "لا توجد نتائج",
|
||||
"common.loading": "جاري التحميل...",
|
||||
"common.unassigned": "غير مُسند",
|
||||
"common.required": "مطلوب",
|
||||
|
||||
"auth.login": "تسجيل الدخول",
|
||||
"auth.email": "البريد الإلكتروني",
|
||||
"auth.password": "كلمة المرور",
|
||||
"auth.loginBtn": "دخول",
|
||||
"auth.signingIn": "جاري تسجيل الدخول...",
|
||||
|
||||
"dashboard.title": "لوحة التحكم",
|
||||
"dashboard.welcomeBack": "مرحباً بعودتك",
|
||||
"dashboard.happeningToday": "إليك ما يحدث مع تسويقك اليوم.",
|
||||
"dashboard.totalPosts": "إجمالي المنشورات",
|
||||
"dashboard.published": "منشور",
|
||||
"dashboard.activeCampaigns": "الحملات النشطة",
|
||||
"dashboard.total": "إجمالي",
|
||||
"dashboard.budgetSpent": "الميزانية المنفقة",
|
||||
"dashboard.of": "من",
|
||||
"dashboard.noBudget": "لا توجد ميزانية بعد",
|
||||
"dashboard.overdueTasks": "مهام متأخرة",
|
||||
"dashboard.needsAttention": "يحتاج اهتماماً",
|
||||
"dashboard.allOnTrack": "كل شيء على المسار الصحيح",
|
||||
"dashboard.budgetOverview": "نظرة عامة على الميزانية",
|
||||
"dashboard.details": "التفاصيل",
|
||||
"dashboard.noBudgetRecorded": "لم يتم تسجيل ميزانية بعد.",
|
||||
"dashboard.addBudget": "إضافة ميزانية",
|
||||
"dashboard.spent": "مُنفق",
|
||||
"dashboard.received": "مُستلم",
|
||||
"dashboard.remaining": "المتبقي",
|
||||
"dashboard.revenue": "الإيرادات",
|
||||
"dashboard.roi": "العائد على الاستثمار",
|
||||
"dashboard.recentPosts": "المنشورات الأخيرة",
|
||||
"dashboard.viewAll": "عرض الكل",
|
||||
"dashboard.sar": "ريال",
|
||||
"dashboard.noPostsYet": "لا توجد منشورات بعد. أنشئ منشورك الأول!",
|
||||
"dashboard.upcomingDeadlines": "المواعيد النهائية القادمة",
|
||||
"dashboard.noUpcomingDeadlines": "لا توجد مواعيد نهائية هذا الأسبوع. 🎉",
|
||||
"dashboard.loadingHub": "جاري تحميل مركز سمايا للتسويق...",
|
||||
|
||||
"posts.title": "إنتاج المحتوى",
|
||||
"posts.newPost": "منشور جديد",
|
||||
"posts.editPost": "تعديل المنشور",
|
||||
"posts.createPost": "إنشاء منشور",
|
||||
"posts.saveChanges": "حفظ التغييرات",
|
||||
"posts.postTitle": "العنوان",
|
||||
"posts.description": "الوصف",
|
||||
"posts.brand": "العلامة التجارية",
|
||||
"posts.platforms": "المنصات",
|
||||
"posts.status": "الحالة",
|
||||
"posts.assignTo": "إسناد إلى",
|
||||
"posts.scheduledDate": "تاريخ النشر المجدول",
|
||||
"posts.notes": "ملاحظات",
|
||||
"posts.campaign": "الحملة",
|
||||
"posts.noCampaign": "بدون حملة",
|
||||
"posts.publicationLinks": "روابط النشر",
|
||||
"posts.attachments": "المرفقات",
|
||||
"posts.uploadFiles": "انقر أو اسحب الملفات للرفع",
|
||||
"posts.dropFiles": "أسقط الملفات هنا",
|
||||
"posts.maxSize": "الحد الأقصى 50 ميجابايت للملف",
|
||||
"posts.allBrands": "جميع العلامات",
|
||||
"posts.allPlatforms": "جميع المنصات",
|
||||
"posts.allPeople": "جميع الأشخاص",
|
||||
"posts.searchPosts": "بحث في المنشورات...",
|
||||
"posts.deletePost": "حذف المنشور؟",
|
||||
"posts.deleteConfirm": "هل أنت متأكد من حذف هذا المنشور؟ لا يمكن التراجع.",
|
||||
"posts.publishMissing": "لا يمكن النشر: روابط النشر مفقودة لـ:",
|
||||
"posts.publishRequired": "جميع روابط النشر مطلوبة للنشر",
|
||||
"posts.noPostsFound": "لم يتم العثور على منشورات",
|
||||
"posts.selectBrand": "اختر العلامة التجارية",
|
||||
"posts.additionalNotes": "ملاحظات إضافية",
|
||||
"posts.uploading": "جاري الرفع...",
|
||||
"posts.deleteAttachment": "حذف المرفق",
|
||||
"posts.whatNeedsDone": "ما الذي يجب القيام به؟",
|
||||
"posts.optionalDetails": "تفاصيل اختيارية...",
|
||||
"posts.postTitlePlaceholder": "عنوان المنشور",
|
||||
"posts.postDescPlaceholder": "وصف المنشور...",
|
||||
"posts.dropHere": "أسقط هنا",
|
||||
"posts.noPosts": "لا توجد منشورات",
|
||||
"posts.sendToReview": "إرسال للمراجعة",
|
||||
"posts.approve": "اعتماد",
|
||||
"posts.schedule": "جدولة",
|
||||
"posts.publish": "نشر",
|
||||
|
||||
"posts.status.draft": "مسودة",
|
||||
"posts.status.in_review": "قيد المراجعة",
|
||||
"posts.status.approved": "مُعتمد",
|
||||
"posts.status.scheduled": "مجدول",
|
||||
"posts.status.published": "منشور",
|
||||
|
||||
"tasks.title": "المهام",
|
||||
"tasks.newTask": "مهمة جديدة",
|
||||
"tasks.editTask": "تعديل المهمة",
|
||||
"tasks.createTask": "إنشاء مهمة",
|
||||
"tasks.saveChanges": "حفظ التغييرات",
|
||||
"tasks.taskTitle": "العنوان",
|
||||
"tasks.description": "الوصف",
|
||||
"tasks.priority": "الأولوية",
|
||||
"tasks.dueDate": "تاريخ الاستحقاق",
|
||||
"tasks.assignTo": "إسناد إلى",
|
||||
"tasks.allTasks": "جميع المهام",
|
||||
"tasks.assignedToMe": "المُسندة إليّ",
|
||||
"tasks.createdByMe": "أنشأتها",
|
||||
"tasks.byTeamMember": "حسب عضو الفريق",
|
||||
"tasks.noTasks": "لا توجد مهام بعد",
|
||||
"tasks.noMatch": "لا توجد مهام تطابق هذا الفلتر",
|
||||
"tasks.createFirst": "أنشئ مهمة للبدء",
|
||||
"tasks.tryFilter": "جرب فلتر مختلف",
|
||||
"tasks.deleteTask": "حذف المهمة؟",
|
||||
"tasks.deleteConfirm": "هل أنت متأكد من حذف هذه المهمة؟ لا يمكن التراجع.",
|
||||
"tasks.todo": "للتنفيذ",
|
||||
"tasks.in_progress": "قيد التنفيذ",
|
||||
"tasks.done": "مكتمل",
|
||||
"tasks.start": "ابدأ",
|
||||
"tasks.complete": "أكمل",
|
||||
"tasks.from": "من:",
|
||||
"tasks.assignedTo": "مُسند إلى:",
|
||||
"tasks.task": "مهمة",
|
||||
"tasks.tasks": "مهام",
|
||||
"tasks.of": "من",
|
||||
|
||||
"tasks.priority.low": "منخفض",
|
||||
"tasks.priority.medium": "متوسط",
|
||||
"tasks.priority.high": "عالي",
|
||||
"tasks.priority.urgent": "عاجل",
|
||||
|
||||
"team.title": "الفريق",
|
||||
"team.members": "أعضاء الفريق",
|
||||
"team.addMember": "إضافة عضو",
|
||||
"team.newMember": "عضو جديد",
|
||||
"team.editMember": "تعديل العضو",
|
||||
"team.myProfile": "ملفي الشخصي",
|
||||
"team.editProfile": "تعديل ملفي",
|
||||
"team.name": "الاسم",
|
||||
"team.email": "البريد الإلكتروني",
|
||||
"team.password": "كلمة المرور",
|
||||
"team.teamRole": "الدور في الفريق",
|
||||
"team.phone": "الهاتف",
|
||||
"team.brands": "العلامات التجارية",
|
||||
"team.brandsHelp": "أسماء العلامات مفصولة بفاصلة",
|
||||
"team.removeMember": "إزالة عضو الفريق؟",
|
||||
"team.removeConfirm": "هل أنت متأكد من إزالة {name}؟ لا يمكن التراجع.",
|
||||
"team.noMembers": "لا يوجد أعضاء",
|
||||
"team.backToTeam": "العودة للفريق",
|
||||
"team.totalTasks": "إجمالي المهام",
|
||||
"team.saveProfile": "حفظ الملف",
|
||||
"team.saveChanges": "حفظ التغييرات",
|
||||
"team.member": "عضو فريق",
|
||||
"team.membersPlural": "أعضاء فريق",
|
||||
"team.fullName": "الاسم الكامل",
|
||||
"team.defaultPassword": "افتراضياً: changeme123",
|
||||
"team.optional": "(اختياري)",
|
||||
"team.fixedRole": "دور ثابت للمديرين",
|
||||
"team.remove": "إزالة",
|
||||
"team.noTasks": "لا توجد مهام",
|
||||
"team.toDo": "للتنفيذ",
|
||||
"team.inProgress": "قيد التنفيذ",
|
||||
|
||||
"campaigns.title": "الحملات",
|
||||
"campaigns.newCampaign": "حملة جديدة",
|
||||
"campaigns.noCampaigns": "لا توجد حملات",
|
||||
|
||||
"assets.title": "الأصول",
|
||||
"assets.upload": "رفع",
|
||||
"assets.noAssets": "لا توجد أصول",
|
||||
|
||||
"settings.title": "الإعدادات",
|
||||
"settings.language": "اللغة",
|
||||
"settings.english": "English",
|
||||
"settings.arabic": "عربي",
|
||||
"settings.restartTutorial": "إعادة تشغيل الدليل التعليمي",
|
||||
"settings.tutorialDesc": "هل تحتاج إلى تذكير؟ أعد تشغيل الدليل التفاعلي للتعرف على جميع ميزات مركز سمايا للتسويق.",
|
||||
"settings.general": "عام",
|
||||
"settings.onboardingTutorial": "الدليل التعليمي",
|
||||
"settings.tutorialRestarted": "تم إعادة تشغيل الدليل!",
|
||||
"settings.restarting": "جاري إعادة التشغيل...",
|
||||
"settings.reloadingPage": "جاري إعادة تحميل الصفحة لبدء الدليل...",
|
||||
"settings.moreComingSoon": "المزيد من الإعدادات قريباً",
|
||||
"settings.additionalSettings": "سيتم إضافة إعدادات إضافية للإشعارات وتفضيلات العرض والمزيد هنا.",
|
||||
"settings.preferences": "إدارة تفضيلاتك وإعدادات التطبيق",
|
||||
|
||||
"tutorial.skip": "تخطي",
|
||||
"tutorial.next": "التالي",
|
||||
"tutorial.prev": "السابق",
|
||||
"tutorial.finish": "إنهاء",
|
||||
"tutorial.of": "من",
|
||||
"tutorial.step": "الخطوة",
|
||||
"tutorial.dashboard.title": "لوحة التحكم",
|
||||
"tutorial.dashboard.desc": "مركز القيادة الخاص بك. شاهد أداء الحملات وتقدم المهام ونشاط الفريق في لمحة.",
|
||||
"tutorial.campaigns.title": "الحملات",
|
||||
"tutorial.campaigns.desc": "خطط وأدر الحملات التسويقية عبر جميع العلامات والمنصات.",
|
||||
"tutorial.posts.title": "إنتاج المحتوى",
|
||||
"tutorial.posts.desc": "أنشئ وراجع وانشر المحتوى. اسحب المنشورات عبر خط سير العمل.",
|
||||
"tutorial.tasks.title": "المهام",
|
||||
"tutorial.tasks.desc": "أسند وتتبع المهام. صفّ حسب من أسندها أو من أُسندت إليه.",
|
||||
"tutorial.team.title": "الفريق",
|
||||
"tutorial.team.desc": "دليل فريقك. أكمل ملفك الشخصي وشاهد من تعمل معه.",
|
||||
"tutorial.assets.title": "الأصول",
|
||||
"tutorial.assets.desc": "ارفع وأدر الأصول الإبداعية — الصور والفيديوهات والمستندات.",
|
||||
"tutorial.newPost.title": "إنشاء محتوى",
|
||||
"tutorial.newPost.desc": "ابدأ إنشاء المحتوى من هنا. اختر علامتك التجارية والمنصات وأسنده لعضو فريق.",
|
||||
"tutorial.filters.title": "التصفية والتركيز",
|
||||
"tutorial.filters.desc": "استخدم الفلاتر للتركيز على علامات أو منصات أو أعضاء فريق محددين.",
|
||||
|
||||
"login.title": "سمايا للتسويق",
|
||||
"login.subtitle": "سجل دخولك للمتابعة",
|
||||
"login.forgotPassword": "نسيت كلمة المرور؟",
|
||||
"login.defaultCreds": "بيانات الدخول الافتراضية:",
|
||||
|
||||
"profile.completeYourProfile": "أكمل ملفك الشخصي",
|
||||
"profile.completeDesc": "يرجى إكمال ملفك الشخصي للوصول إلى جميع الميزات ومساعدة فريقك في العثور عليك.",
|
||||
"profile.completeProfileBtn": "إكمال الملف",
|
||||
"profile.later": "لاحقاً"
|
||||
}
|
||||
@@ -0,0 +1,239 @@
|
||||
{
|
||||
"app.name": "Samaya",
|
||||
"app.subtitle": "Marketing Hub",
|
||||
"nav.dashboard": "Dashboard",
|
||||
"nav.campaigns": "Campaigns",
|
||||
"nav.finance": "Finance & ROI",
|
||||
"nav.posts": "Post Production",
|
||||
"nav.assets": "Assets",
|
||||
"nav.projects": "Projects",
|
||||
"nav.tasks": "Tasks",
|
||||
"nav.team": "Team",
|
||||
"nav.settings": "Settings",
|
||||
"nav.users": "Users",
|
||||
"nav.logout": "Logout",
|
||||
"nav.collapse": "Collapse",
|
||||
|
||||
"common.save": "Save",
|
||||
"common.cancel": "Cancel",
|
||||
"common.delete": "Delete",
|
||||
"common.edit": "Edit",
|
||||
"common.create": "Create",
|
||||
"common.search": "Search...",
|
||||
"common.filter": "Filter",
|
||||
"common.all": "All",
|
||||
"common.noResults": "No results",
|
||||
"common.loading": "Loading...",
|
||||
"common.unassigned": "Unassigned",
|
||||
"common.required": "Required",
|
||||
|
||||
"auth.login": "Sign In",
|
||||
"auth.email": "Email",
|
||||
"auth.password": "Password",
|
||||
"auth.loginBtn": "Sign In",
|
||||
"auth.signingIn": "Signing in...",
|
||||
|
||||
"dashboard.title": "Dashboard",
|
||||
"dashboard.welcomeBack": "Welcome back",
|
||||
"dashboard.happeningToday": "Here's what's happening with your marketing today.",
|
||||
"dashboard.totalPosts": "Total Posts",
|
||||
"dashboard.published": "published",
|
||||
"dashboard.activeCampaigns": "Active Campaigns",
|
||||
"dashboard.total": "total",
|
||||
"dashboard.budgetSpent": "Budget Spent",
|
||||
"dashboard.of": "of",
|
||||
"dashboard.noBudget": "No budget yet",
|
||||
"dashboard.overdueTasks": "Overdue Tasks",
|
||||
"dashboard.needsAttention": "Needs attention",
|
||||
"dashboard.allOnTrack": "All on track",
|
||||
"dashboard.budgetOverview": "Budget Overview",
|
||||
"dashboard.details": "Details",
|
||||
"dashboard.noBudgetRecorded": "No budget recorded yet.",
|
||||
"dashboard.addBudget": "Add budget",
|
||||
"dashboard.spent": "spent",
|
||||
"dashboard.received": "received",
|
||||
"dashboard.remaining": "Remaining",
|
||||
"dashboard.revenue": "Revenue",
|
||||
"dashboard.roi": "ROI",
|
||||
"dashboard.recentPosts": "Recent Posts",
|
||||
"dashboard.viewAll": "View all",
|
||||
"dashboard.sar": "SAR",
|
||||
"dashboard.noPostsYet": "No posts yet. Create your first post!",
|
||||
"dashboard.upcomingDeadlines": "Upcoming Deadlines",
|
||||
"dashboard.noUpcomingDeadlines": "No upcoming deadlines this week. 🎉",
|
||||
"dashboard.loadingHub": "Loading Samaya Marketing Hub...",
|
||||
|
||||
"posts.title": "Post Production",
|
||||
"posts.newPost": "New Post",
|
||||
"posts.editPost": "Edit Post",
|
||||
"posts.createPost": "Create Post",
|
||||
"posts.saveChanges": "Save Changes",
|
||||
"posts.postTitle": "Title",
|
||||
"posts.description": "Description",
|
||||
"posts.brand": "Brand",
|
||||
"posts.platforms": "Platforms",
|
||||
"posts.status": "Status",
|
||||
"posts.assignTo": "Assign To",
|
||||
"posts.scheduledDate": "Scheduled Date",
|
||||
"posts.notes": "Notes",
|
||||
"posts.campaign": "Campaign",
|
||||
"posts.noCampaign": "No campaign",
|
||||
"posts.publicationLinks": "Publication Links",
|
||||
"posts.attachments": "Attachments",
|
||||
"posts.uploadFiles": "Click or drag files to upload",
|
||||
"posts.dropFiles": "Drop files here",
|
||||
"posts.maxSize": "Max 50MB per file",
|
||||
"posts.allBrands": "All Brands",
|
||||
"posts.allPlatforms": "All Platforms",
|
||||
"posts.allPeople": "All People",
|
||||
"posts.searchPosts": "Search posts...",
|
||||
"posts.deletePost": "Delete Post?",
|
||||
"posts.deleteConfirm": "Are you sure you want to delete this post? This action cannot be undone.",
|
||||
"posts.publishMissing": "Cannot publish: missing publication links for:",
|
||||
"posts.publishRequired": "All publication links are required to publish",
|
||||
"posts.noPostsFound": "No posts found",
|
||||
"posts.selectBrand": "Select brand",
|
||||
"posts.additionalNotes": "Additional notes",
|
||||
"posts.uploading": "Uploading...",
|
||||
"posts.deleteAttachment": "Delete attachment",
|
||||
"posts.whatNeedsDone": "What needs to be done?",
|
||||
"posts.optionalDetails": "Optional details...",
|
||||
"posts.postTitlePlaceholder": "Post title",
|
||||
"posts.postDescPlaceholder": "Post description...",
|
||||
"posts.dropHere": "Drop here",
|
||||
"posts.noPosts": "No posts",
|
||||
"posts.sendToReview": "Send to Review",
|
||||
"posts.approve": "Approve",
|
||||
"posts.schedule": "Schedule",
|
||||
"posts.publish": "Publish",
|
||||
|
||||
"posts.status.draft": "Draft",
|
||||
"posts.status.in_review": "In Review",
|
||||
"posts.status.approved": "Approved",
|
||||
"posts.status.scheduled": "Scheduled",
|
||||
"posts.status.published": "Published",
|
||||
|
||||
"tasks.title": "Tasks",
|
||||
"tasks.newTask": "New Task",
|
||||
"tasks.editTask": "Edit Task",
|
||||
"tasks.createTask": "Create Task",
|
||||
"tasks.saveChanges": "Save Changes",
|
||||
"tasks.taskTitle": "Title",
|
||||
"tasks.description": "Description",
|
||||
"tasks.priority": "Priority",
|
||||
"tasks.dueDate": "Due Date",
|
||||
"tasks.assignTo": "Assign to",
|
||||
"tasks.allTasks": "All Tasks",
|
||||
"tasks.assignedToMe": "Assigned to Me",
|
||||
"tasks.createdByMe": "Created by Me",
|
||||
"tasks.byTeamMember": "By Team Member",
|
||||
"tasks.noTasks": "No tasks yet",
|
||||
"tasks.noMatch": "No tasks match this filter",
|
||||
"tasks.createFirst": "Create a task to get started",
|
||||
"tasks.tryFilter": "Try a different filter",
|
||||
"tasks.deleteTask": "Delete Task?",
|
||||
"tasks.deleteConfirm": "Are you sure you want to delete this task? This action cannot be undone.",
|
||||
"tasks.todo": "To Do",
|
||||
"tasks.in_progress": "In Progress",
|
||||
"tasks.done": "Done",
|
||||
"tasks.start": "Start",
|
||||
"tasks.complete": "Complete",
|
||||
"tasks.from": "From:",
|
||||
"tasks.assignedTo": "Assigned to:",
|
||||
"tasks.task": "task",
|
||||
"tasks.tasks": "tasks",
|
||||
"tasks.of": "of",
|
||||
|
||||
"tasks.priority.low": "Low",
|
||||
"tasks.priority.medium": "Medium",
|
||||
"tasks.priority.high": "High",
|
||||
"tasks.priority.urgent": "Urgent",
|
||||
|
||||
"team.title": "Team",
|
||||
"team.members": "Team Members",
|
||||
"team.addMember": "Add Member",
|
||||
"team.newMember": "New Team Member",
|
||||
"team.editMember": "Edit Team Member",
|
||||
"team.myProfile": "My Profile",
|
||||
"team.editProfile": "Edit My Profile",
|
||||
"team.name": "Name",
|
||||
"team.email": "Email",
|
||||
"team.password": "Password",
|
||||
"team.teamRole": "Team Role",
|
||||
"team.phone": "Phone",
|
||||
"team.brands": "Brands",
|
||||
"team.brandsHelp": "Comma-separated brand names",
|
||||
"team.removeMember": "Remove Team Member?",
|
||||
"team.removeConfirm": "Are you sure you want to remove {name}? This action cannot be undone.",
|
||||
"team.noMembers": "No team members",
|
||||
"team.backToTeam": "Back to Team",
|
||||
"team.totalTasks": "Total Tasks",
|
||||
"team.saveProfile": "Save Profile",
|
||||
"team.saveChanges": "Save Changes",
|
||||
"team.member": "team member",
|
||||
"team.membersPlural": "team members",
|
||||
"team.fullName": "Full name",
|
||||
"team.defaultPassword": "Default: changeme123",
|
||||
"team.optional": "(optional)",
|
||||
"team.fixedRole": "Fixed role for managers",
|
||||
"team.remove": "Remove",
|
||||
"team.noTasks": "No tasks",
|
||||
"team.toDo": "To Do",
|
||||
"team.inProgress": "In Progress",
|
||||
|
||||
"campaigns.title": "Campaigns",
|
||||
"campaigns.newCampaign": "New Campaign",
|
||||
"campaigns.noCampaigns": "No campaigns",
|
||||
|
||||
"assets.title": "Assets",
|
||||
"assets.upload": "Upload",
|
||||
"assets.noAssets": "No assets",
|
||||
|
||||
"settings.title": "Settings",
|
||||
"settings.language": "Language",
|
||||
"settings.english": "English",
|
||||
"settings.arabic": "Arabic",
|
||||
"settings.restartTutorial": "Restart Tutorial",
|
||||
"settings.tutorialDesc": "Need a refresher? Restart the interactive tutorial to learn about all the features of the Samaya Marketing Hub.",
|
||||
"settings.general": "General",
|
||||
"settings.onboardingTutorial": "Onboarding Tutorial",
|
||||
"settings.tutorialRestarted": "Tutorial Restarted!",
|
||||
"settings.restarting": "Restarting...",
|
||||
"settings.reloadingPage": "Reloading page to start tutorial...",
|
||||
"settings.moreComingSoon": "More Settings Coming Soon",
|
||||
"settings.additionalSettings": "Additional settings for notifications, display preferences, and more will be added here.",
|
||||
"settings.preferences": "Manage your preferences and app settings",
|
||||
|
||||
"tutorial.skip": "Skip Tutorial",
|
||||
"tutorial.next": "Next",
|
||||
"tutorial.prev": "Back",
|
||||
"tutorial.finish": "Finish",
|
||||
"tutorial.of": "of",
|
||||
"tutorial.step": "Step",
|
||||
"tutorial.dashboard.title": "Dashboard",
|
||||
"tutorial.dashboard.desc": "Your command center. See campaign performance, task progress, and team activity at a glance.",
|
||||
"tutorial.campaigns.title": "Campaigns",
|
||||
"tutorial.campaigns.desc": "Plan and manage marketing campaigns across all brands and platforms.",
|
||||
"tutorial.posts.title": "Post Production",
|
||||
"tutorial.posts.desc": "Create, review, and publish content. Drag posts through your workflow pipeline.",
|
||||
"tutorial.tasks.title": "Tasks",
|
||||
"tutorial.tasks.desc": "Assign and track tasks. Filter by who assigned them or who they're assigned to.",
|
||||
"tutorial.team.title": "Team",
|
||||
"tutorial.team.desc": "Your team directory. Complete your profile and see who you're working with.",
|
||||
"tutorial.assets.title": "Assets",
|
||||
"tutorial.assets.desc": "Upload and manage creative assets — images, videos, and documents.",
|
||||
"tutorial.newPost.title": "Create Content",
|
||||
"tutorial.newPost.desc": "Start creating content here. Pick your brand, platforms, and assign it to a team member.",
|
||||
"tutorial.filters.title": "Filter & Focus",
|
||||
"tutorial.filters.desc": "Use filters to focus on specific brands, platforms, or team members.",
|
||||
|
||||
"login.title": "Samaya Marketing",
|
||||
"login.subtitle": "Sign in to continue",
|
||||
"login.forgotPassword": "Forgot password?",
|
||||
"login.defaultCreds": "Default credentials:",
|
||||
|
||||
"profile.completeYourProfile": "Complete Your Profile",
|
||||
"profile.completeDesc": "Please complete your profile to access all features and help your team find you.",
|
||||
"profile.completeProfileBtn": "Complete Profile",
|
||||
"profile.later": "Later"
|
||||
}
|
||||
Reference in New Issue
Block a user