Dashboard fix, expense system, currency settings, visual upgrade
- Fix Dashboard stat card: show "Budget Remaining" instead of "Budget Spent" with correct remaining value accounting for campaign allocations - Add expense system: budget entries now have income/expense type with server-side split, per-campaign and per-project expense tracking, colored amounts, type filters, and summary bar in Budgets page - Add configurable currency in Settings (SAR default, supports 10 currencies) replacing all hardcoded SAR references across the app - Replace PiggyBank icon with Landmark (culturally appropriate for KSA) - Visual upgrade: mesh background, gradient text, premium stat cards with accent bars, section-card containers, sidebar active glow - UX polish: consistent text-2xl headers, skeleton loaders for Finance and Budgets pages - Finance page: expenses column in campaign/project breakdown tables, ROI accounts for expenses, expense stat card Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,19 @@ import ar from './ar.json'
|
||||
|
||||
const translations = { en, ar }
|
||||
|
||||
export const CURRENCIES = [
|
||||
{ code: 'SAR', symbol: '', labelEn: 'Saudi Riyal (SAR)', labelAr: 'ريال سعودي' },
|
||||
{ code: 'AED', symbol: 'د.إ', labelEn: 'UAE Dirham (AED)', labelAr: 'درهم إماراتي' },
|
||||
{ code: 'USD', symbol: '$', labelEn: 'US Dollar (USD)', labelAr: 'دولار أمريكي' },
|
||||
{ code: 'EUR', symbol: '€', labelEn: 'Euro (EUR)', labelAr: 'يورو' },
|
||||
{ code: 'GBP', symbol: '£', labelEn: 'British Pound (GBP)', labelAr: 'جنيه إسترليني' },
|
||||
{ code: 'KWD', symbol: 'د.ك', labelEn: 'Kuwaiti Dinar (KWD)', labelAr: 'دينار كويتي' },
|
||||
{ code: 'QAR', symbol: 'ر.ق', labelEn: 'Qatari Riyal (QAR)', labelAr: 'ريال قطري' },
|
||||
{ code: 'BHD', symbol: 'د.ب', labelEn: 'Bahraini Dinar (BHD)', labelAr: 'دينار بحريني' },
|
||||
{ code: 'OMR', symbol: 'ر.ع', labelEn: 'Omani Rial (OMR)', labelAr: 'ريال عماني' },
|
||||
{ code: 'EGP', symbol: 'ج.م', labelEn: 'Egyptian Pound (EGP)', labelAr: 'جنيه مصري' },
|
||||
]
|
||||
|
||||
const LanguageContext = createContext()
|
||||
|
||||
export function LanguageProvider({ children }) {
|
||||
@@ -12,12 +25,26 @@ export function LanguageProvider({ children }) {
|
||||
return localStorage.getItem('digitalhub-lang') || 'en'
|
||||
})
|
||||
|
||||
const [currency, setCurrencyState] = useState(() => {
|
||||
return localStorage.getItem('digitalhub-currency') || 'SAR'
|
||||
})
|
||||
|
||||
const setLang = (newLang) => {
|
||||
if (newLang !== 'en' && newLang !== 'ar') return
|
||||
setLangState(newLang)
|
||||
localStorage.setItem('digitalhub-lang', newLang)
|
||||
}
|
||||
|
||||
const setCurrency = (code) => {
|
||||
const valid = CURRENCIES.find(c => c.code === code)
|
||||
if (!valid) return
|
||||
setCurrencyState(code)
|
||||
localStorage.setItem('digitalhub-currency', code)
|
||||
}
|
||||
|
||||
const currencyObj = CURRENCIES.find(c => c.code === currency) || CURRENCIES[0]
|
||||
const currencySymbol = currencyObj.symbol
|
||||
|
||||
const dir = lang === 'ar' ? 'rtl' : 'ltr'
|
||||
|
||||
// Update HTML dir attribute whenever language changes
|
||||
@@ -32,7 +59,7 @@ export function LanguageProvider({ children }) {
|
||||
}
|
||||
|
||||
return (
|
||||
<LanguageContext.Provider value={{ lang, setLang, t, dir }}>
|
||||
<LanguageContext.Provider value={{ lang, setLang, t, dir, currency, setCurrency, currencySymbol }}>
|
||||
{children}
|
||||
</LanguageContext.Provider>
|
||||
)
|
||||
|
||||
+189
-3
@@ -4,11 +4,13 @@
|
||||
"nav.dashboard": "لوحة التحكم",
|
||||
"nav.campaigns": "الحملات",
|
||||
"nav.finance": "المالية والعائد",
|
||||
"nav.financeDashboard": "لوحة التحكم",
|
||||
"nav.budgets": "الميزانيات",
|
||||
"nav.posts": "إنتاج المحتوى",
|
||||
"nav.assets": "الأصول",
|
||||
"nav.projects": "المشاريع",
|
||||
"nav.tasks": "المهام",
|
||||
"nav.team": "الفريق",
|
||||
"nav.team": "الفرق",
|
||||
"nav.settings": "الإعدادات",
|
||||
"nav.users": "المستخدمين",
|
||||
"nav.logout": "تسجيل الخروج",
|
||||
@@ -46,6 +48,7 @@
|
||||
"dashboard.activeCampaigns": "الحملات النشطة",
|
||||
"dashboard.total": "إجمالي",
|
||||
"dashboard.budgetSpent": "الميزانية المنفقة",
|
||||
"dashboard.budgetRemaining": "الميزانية المتبقية",
|
||||
"dashboard.of": "من",
|
||||
"dashboard.noBudget": "لا توجد ميزانية بعد",
|
||||
"dashboard.overdueTasks": "مهام متأخرة",
|
||||
@@ -170,7 +173,45 @@
|
||||
"tasks.deleted": "تم حذف المهمة بنجاح!",
|
||||
"tasks.statusUpdated": "تم تحديث حالة المهمة!",
|
||||
"tasks.canOnlyEditOwn": "يمكنك فقط تعديل مهامك الخاصة.",
|
||||
|
||||
"tasks.search": "بحث في المهام...",
|
||||
"tasks.board": "لوحة",
|
||||
"tasks.list": "قائمة",
|
||||
"tasks.calendar": "تقويم",
|
||||
"tasks.filters": "الفلاتر",
|
||||
"tasks.allProjects": "جميع المشاريع",
|
||||
"tasks.allBrands": "جميع العلامات",
|
||||
"tasks.allPriorities": "جميع الأولويات",
|
||||
"tasks.allStatuses": "جميع الحالات",
|
||||
"tasks.allAssignees": "جميع المُسندين",
|
||||
"tasks.allCreators": "جميع المنشئين",
|
||||
"tasks.overdue": "متأخر",
|
||||
"tasks.clearFilters": "مسح الفلاتر",
|
||||
"tasks.details": "التفاصيل",
|
||||
"tasks.discussion": "النقاش",
|
||||
"tasks.unscheduled": "غير مجدول",
|
||||
"tasks.today": "اليوم",
|
||||
"tasks.project": "المشروع",
|
||||
"tasks.brand": "العلامة التجارية",
|
||||
"tasks.status": "الحالة",
|
||||
"tasks.creator": "المنشئ",
|
||||
"tasks.assignee": "المُسند إليه",
|
||||
"tasks.commentCount": "{n} تعليقات",
|
||||
"tasks.dueDateRange": "تاريخ الاستحقاق",
|
||||
"tasks.noProject": "بدون مشروع",
|
||||
"tasks.createdBy": "أنشأها",
|
||||
"tasks.startDate": "تاريخ البدء",
|
||||
"tasks.attachments": "المرفقات",
|
||||
"tasks.uploadFile": "رفع ملف",
|
||||
"tasks.setAsThumbnail": "تعيين كصورة مصغرة",
|
||||
"tasks.removeThumbnail": "إزالة الصورة المصغرة",
|
||||
"tasks.thumbnail": "الصورة المصغرة",
|
||||
"tasks.dropOrClick": "اسحب ملفاً أو انقر للرفع",
|
||||
|
||||
"projects.thumbnail": "الصورة المصغرة",
|
||||
"projects.uploadThumbnail": "رفع صورة مصغرة",
|
||||
"projects.changeThumbnail": "تغيير الصورة المصغرة",
|
||||
"projects.removeThumbnail": "إزالة الصورة المصغرة",
|
||||
|
||||
"team.title": "الفريق",
|
||||
"team.members": "أعضاء الفريق",
|
||||
"team.addMember": "إضافة عضو",
|
||||
@@ -250,6 +291,8 @@
|
||||
"settings.noBrands": "لا توجد علامات بعد. أضف أول علامة تجارية.",
|
||||
"settings.moreComingSoon": "المزيد من الإعدادات قريباً",
|
||||
"settings.additionalSettings": "سيتم إضافة إعدادات إضافية للإشعارات وتفضيلات العرض والمزيد هنا.",
|
||||
"settings.currency": "العملة",
|
||||
"settings.currencyHint": "ستُستخدم هذه العملة في جميع الصفحات المالية.",
|
||||
"settings.preferences": "إدارة تفضيلاتك وإعدادات التطبيق",
|
||||
|
||||
"tutorial.skip": "تخطي",
|
||||
@@ -303,5 +346,148 @@
|
||||
"timeline.noItems": "لا توجد عناصر للعرض",
|
||||
"timeline.addItems": "أضف عناصر بتواريخ لعرض الجدول الزمني",
|
||||
"timeline.tracks": "المسارات",
|
||||
"timeline.timeline": "الجدول الزمني"
|
||||
"timeline.timeline": "الجدول الزمني",
|
||||
|
||||
"posts.details": "التفاصيل",
|
||||
"posts.platformsLinks": "المنصات والروابط",
|
||||
"posts.discussion": "النقاش",
|
||||
|
||||
"campaigns.details": "التفاصيل",
|
||||
"campaigns.performance": "الأداء",
|
||||
"campaigns.discussion": "النقاش",
|
||||
"campaigns.name": "الاسم",
|
||||
"campaigns.description": "الوصف",
|
||||
"campaigns.brand": "العلامة التجارية",
|
||||
"campaigns.status": "الحالة",
|
||||
"campaigns.platforms": "المنصات",
|
||||
"campaigns.startDate": "تاريخ البدء",
|
||||
"campaigns.endDate": "تاريخ الانتهاء",
|
||||
"campaigns.budget": "الميزانية",
|
||||
"campaigns.goals": "الأهداف",
|
||||
"campaigns.notes": "ملاحظات",
|
||||
"campaigns.budgetSpent": "المنفق من الميزانية",
|
||||
"campaigns.revenue": "الإيرادات",
|
||||
"campaigns.impressions": "مرات الظهور",
|
||||
"campaigns.clicks": "النقرات",
|
||||
"campaigns.conversions": "التحويلات",
|
||||
"campaigns.createCampaign": "إنشاء حملة",
|
||||
"campaigns.editCampaign": "تعديل الحملة",
|
||||
"campaigns.deleteCampaign": "حذف الحملة؟",
|
||||
"campaigns.deleteConfirm": "هل أنت متأكد من حذف هذه الحملة؟ سيتم حذف جميع البيانات المرتبطة. لا يمكن التراجع.",
|
||||
|
||||
"tracks.details": "التفاصيل",
|
||||
"tracks.metrics": "المقاييس",
|
||||
"tracks.trackName": "اسم المسار",
|
||||
"tracks.type": "النوع",
|
||||
"tracks.platform": "المنصة",
|
||||
"tracks.budgetAllocated": "الميزانية المخصصة",
|
||||
"tracks.status": "الحالة",
|
||||
"tracks.notes": "ملاحظات",
|
||||
"tracks.budgetSpent": "المنفق من الميزانية",
|
||||
"tracks.revenue": "الإيرادات",
|
||||
"tracks.addTrack": "إضافة مسار",
|
||||
"tracks.editTrack": "تعديل المسار",
|
||||
"tracks.deleteTrack": "حذف المسار؟",
|
||||
"tracks.deleteConfirm": "هل أنت متأكد من حذف هذا المسار؟ لا يمكن التراجع.",
|
||||
|
||||
"projects.details": "التفاصيل",
|
||||
"projects.discussion": "النقاش",
|
||||
"projects.name": "الاسم",
|
||||
"projects.description": "الوصف",
|
||||
"projects.brand": "العلامة التجارية",
|
||||
"projects.owner": "المالك",
|
||||
"projects.status": "الحالة",
|
||||
"projects.startDate": "تاريخ البدء",
|
||||
"projects.dueDate": "تاريخ الاستحقاق",
|
||||
"projects.editProject": "تعديل المشروع",
|
||||
"projects.deleteProject": "حذف المشروع؟",
|
||||
"projects.deleteConfirm": "هل أنت متأكد من حذف هذا المشروع؟ لا يمكن التراجع.",
|
||||
|
||||
"team.details": "التفاصيل",
|
||||
"team.workload": "عبء العمل",
|
||||
"team.recentTasks": "المهام الأخيرة",
|
||||
"team.recentPosts": "المنشورات الأخيرة",
|
||||
"team.modules": "الوحدات",
|
||||
"team.selectBrands": "اختر العلامات التجارية...",
|
||||
"team.gridView": "عرض الشبكة",
|
||||
"team.teamsView": "عرض الفرق",
|
||||
"team.unassigned": "غير مُعيّن",
|
||||
|
||||
"modules.marketing": "التسويق",
|
||||
"modules.projects": "المشاريع",
|
||||
"modules.finance": "المالية",
|
||||
|
||||
"teams.title": "الفرق",
|
||||
"teams.teams": "الفرق",
|
||||
"teams.createTeam": "إنشاء فريق",
|
||||
"teams.editTeam": "تعديل الفريق",
|
||||
"teams.deleteTeam": "حذف الفريق؟",
|
||||
"teams.deleteConfirm": "هل أنت متأكد من حذف هذا الفريق؟ لا يمكن التراجع.",
|
||||
"teams.name": "اسم الفريق",
|
||||
"teams.description": "الوصف",
|
||||
"teams.members": "أعضاء",
|
||||
"teams.details": "التفاصيل",
|
||||
"teams.noTeams": "لا توجد فرق بعد",
|
||||
"teams.selectMembers": "بحث عن أعضاء...",
|
||||
|
||||
"dates.today": "اليوم",
|
||||
"dates.yesterday": "أمس",
|
||||
"dates.thisWeek": "هذا الأسبوع",
|
||||
"dates.lastWeek": "الأسبوع الماضي",
|
||||
"dates.thisMonth": "هذا الشهر",
|
||||
"dates.lastMonth": "الشهر الماضي",
|
||||
"dates.thisQuarter": "هذا الربع",
|
||||
"dates.thisYear": "هذا العام",
|
||||
"dates.customRange": "نطاق مخصص",
|
||||
"dates.clearDates": "مسح التواريخ",
|
||||
|
||||
"dashboard.myTasks": "مهامي",
|
||||
"dashboard.projectProgress": "تقدم المشاريع",
|
||||
"dashboard.noProjectsYet": "لا توجد مشاريع بعد",
|
||||
|
||||
"finance.project": "المشروع",
|
||||
"finance.projectBudget": "ميزانية المشروع",
|
||||
"finance.projectBreakdown": "توزيع المشاريع",
|
||||
"finance.budgetFor": "ميزانية لـ",
|
||||
|
||||
"budgets.title": "الميزانيات",
|
||||
"budgets.subtitle": "إضافة وإدارة سجلات الميزانية — تتبع المصدر والوجهة والتخصيص",
|
||||
"budgets.addEntry": "إضافة سجل",
|
||||
"budgets.editEntry": "تعديل السجل",
|
||||
"budgets.deleteEntry": "حذف السجل؟",
|
||||
"budgets.deleteConfirm": "هل أنت متأكد من حذف هذا السجل؟ لا يمكن التراجع.",
|
||||
"budgets.searchEntries": "بحث في السجلات...",
|
||||
"budgets.allCategories": "جميع الفئات",
|
||||
"budgets.allDestinations": "جميع الوجهات",
|
||||
"budgets.noEntries": "لا توجد سجلات ميزانية بعد. أضف أول سجل.",
|
||||
"budgets.noMatch": "لا توجد سجلات تطابق الفلاتر.",
|
||||
"budgets.label": "الوصف",
|
||||
"budgets.labelPlaceholder": "مثال: ميزانية التسويق الربع الأول، شراء معدات...",
|
||||
"budgets.amount": "المبلغ",
|
||||
"budgets.dateReceived": "تاريخ الاستلام",
|
||||
"budgets.source": "المصدر",
|
||||
"budgets.sourcePlaceholder": "مثال: موافقة المدير، الميزانية السنوية...",
|
||||
"budgets.destination": "الوجهة",
|
||||
"budgets.selectDestination": "اختر الوجهة...",
|
||||
"budgets.companyCard": "بطاقة الشركة",
|
||||
"budgets.personalAccount": "حساب شخصي",
|
||||
"budgets.corporateAccount": "حساب الشركة",
|
||||
"budgets.otherDest": "أخرى",
|
||||
"budgets.category": "الفئة",
|
||||
"budgets.linkedTo": "مرتبط بـ",
|
||||
"budgets.noCampaign": "بدون حملة",
|
||||
"budgets.noProject": "بدون مشروع",
|
||||
"budgets.general": "عام",
|
||||
"budgets.notes": "ملاحظات",
|
||||
"budgets.notesPlaceholder": "أي تفاصيل حول هذا السجل...",
|
||||
"budgets.date": "التاريخ",
|
||||
"budgets.type": "النوع",
|
||||
"budgets.income": "دخل",
|
||||
"budgets.expense": "مصروف",
|
||||
"budgets.allTypes": "الكل",
|
||||
"budgets.net": "صافي",
|
||||
"budgets.dateExpensed": "التاريخ",
|
||||
|
||||
"dashboard.expenses": "المصروفات",
|
||||
"finance.expenses": "إجمالي المصروفات"
|
||||
}
|
||||
|
||||
+189
-3
@@ -4,11 +4,13 @@
|
||||
"nav.dashboard": "Dashboard",
|
||||
"nav.campaigns": "Campaigns",
|
||||
"nav.finance": "Finance & ROI",
|
||||
"nav.financeDashboard": "Dashboard",
|
||||
"nav.budgets": "Budgets",
|
||||
"nav.posts": "Post Production",
|
||||
"nav.assets": "Assets",
|
||||
"nav.projects": "Projects",
|
||||
"nav.tasks": "Tasks",
|
||||
"nav.team": "Team",
|
||||
"nav.team": "Teams",
|
||||
"nav.settings": "Settings",
|
||||
"nav.users": "Users",
|
||||
"nav.logout": "Logout",
|
||||
@@ -46,6 +48,7 @@
|
||||
"dashboard.activeCampaigns": "Active Campaigns",
|
||||
"dashboard.total": "total",
|
||||
"dashboard.budgetSpent": "Budget Spent",
|
||||
"dashboard.budgetRemaining": "Budget Remaining",
|
||||
"dashboard.of": "of",
|
||||
"dashboard.noBudget": "No budget yet",
|
||||
"dashboard.overdueTasks": "Overdue Tasks",
|
||||
@@ -170,7 +173,45 @@
|
||||
"tasks.deleted": "Task deleted successfully!",
|
||||
"tasks.statusUpdated": "Task status updated!",
|
||||
"tasks.canOnlyEditOwn": "You can only edit your own tasks.",
|
||||
|
||||
"tasks.search": "Search tasks...",
|
||||
"tasks.board": "Board",
|
||||
"tasks.list": "List",
|
||||
"tasks.calendar": "Calendar",
|
||||
"tasks.filters": "Filters",
|
||||
"tasks.allProjects": "All Projects",
|
||||
"tasks.allBrands": "All Brands",
|
||||
"tasks.allPriorities": "All Priorities",
|
||||
"tasks.allStatuses": "All Statuses",
|
||||
"tasks.allAssignees": "All Assignees",
|
||||
"tasks.allCreators": "All Creators",
|
||||
"tasks.overdue": "Overdue",
|
||||
"tasks.clearFilters": "Clear Filters",
|
||||
"tasks.details": "Details",
|
||||
"tasks.discussion": "Discussion",
|
||||
"tasks.unscheduled": "Unscheduled",
|
||||
"tasks.today": "Today",
|
||||
"tasks.project": "Project",
|
||||
"tasks.brand": "Brand",
|
||||
"tasks.status": "Status",
|
||||
"tasks.creator": "Creator",
|
||||
"tasks.assignee": "Assignee",
|
||||
"tasks.commentCount": "{n} comments",
|
||||
"tasks.dueDateRange": "Due Date",
|
||||
"tasks.noProject": "No project",
|
||||
"tasks.createdBy": "Created by",
|
||||
"tasks.startDate": "Start Date",
|
||||
"tasks.attachments": "Attachments",
|
||||
"tasks.uploadFile": "Upload file",
|
||||
"tasks.setAsThumbnail": "Set as thumbnail",
|
||||
"tasks.removeThumbnail": "Remove thumbnail",
|
||||
"tasks.thumbnail": "Thumbnail",
|
||||
"tasks.dropOrClick": "Drop file or click to upload",
|
||||
|
||||
"projects.thumbnail": "Thumbnail",
|
||||
"projects.uploadThumbnail": "Upload Thumbnail",
|
||||
"projects.changeThumbnail": "Change Thumbnail",
|
||||
"projects.removeThumbnail": "Remove Thumbnail",
|
||||
|
||||
"team.title": "Team",
|
||||
"team.members": "Team Members",
|
||||
"team.addMember": "Add Member",
|
||||
@@ -250,6 +291,8 @@
|
||||
"settings.noBrands": "No brands yet. Add your first brand.",
|
||||
"settings.moreComingSoon": "More Settings Coming Soon",
|
||||
"settings.additionalSettings": "Additional settings for notifications, display preferences, and more will be added here.",
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "This currency will be used across all financial pages.",
|
||||
"settings.preferences": "Manage your preferences and app settings",
|
||||
|
||||
"tutorial.skip": "Skip Tutorial",
|
||||
@@ -303,5 +346,148 @@
|
||||
"timeline.noItems": "No items to display",
|
||||
"timeline.addItems": "Add items with dates to see the timeline",
|
||||
"timeline.tracks": "Tracks",
|
||||
"timeline.timeline": "Timeline"
|
||||
"timeline.timeline": "Timeline",
|
||||
|
||||
"posts.details": "Details",
|
||||
"posts.platformsLinks": "Platforms & Links",
|
||||
"posts.discussion": "Discussion",
|
||||
|
||||
"campaigns.details": "Details",
|
||||
"campaigns.performance": "Performance",
|
||||
"campaigns.discussion": "Discussion",
|
||||
"campaigns.name": "Name",
|
||||
"campaigns.description": "Description",
|
||||
"campaigns.brand": "Brand",
|
||||
"campaigns.status": "Status",
|
||||
"campaigns.platforms": "Platforms",
|
||||
"campaigns.startDate": "Start Date",
|
||||
"campaigns.endDate": "End Date",
|
||||
"campaigns.budget": "Budget",
|
||||
"campaigns.goals": "Goals",
|
||||
"campaigns.notes": "Notes",
|
||||
"campaigns.budgetSpent": "Budget Spent",
|
||||
"campaigns.revenue": "Revenue",
|
||||
"campaigns.impressions": "Impressions",
|
||||
"campaigns.clicks": "Clicks",
|
||||
"campaigns.conversions": "Conversions",
|
||||
"campaigns.createCampaign": "Create Campaign",
|
||||
"campaigns.editCampaign": "Edit Campaign",
|
||||
"campaigns.deleteCampaign": "Delete Campaign?",
|
||||
"campaigns.deleteConfirm": "Are you sure you want to delete this campaign? All associated data will be removed. This action cannot be undone.",
|
||||
|
||||
"tracks.details": "Details",
|
||||
"tracks.metrics": "Metrics",
|
||||
"tracks.trackName": "Track Name",
|
||||
"tracks.type": "Type",
|
||||
"tracks.platform": "Platform",
|
||||
"tracks.budgetAllocated": "Budget Allocated",
|
||||
"tracks.status": "Status",
|
||||
"tracks.notes": "Notes",
|
||||
"tracks.budgetSpent": "Budget Spent",
|
||||
"tracks.revenue": "Revenue",
|
||||
"tracks.addTrack": "Add Track",
|
||||
"tracks.editTrack": "Edit Track",
|
||||
"tracks.deleteTrack": "Delete Track?",
|
||||
"tracks.deleteConfirm": "Are you sure you want to delete this track? This action cannot be undone.",
|
||||
|
||||
"projects.details": "Details",
|
||||
"projects.discussion": "Discussion",
|
||||
"projects.name": "Name",
|
||||
"projects.description": "Description",
|
||||
"projects.brand": "Brand",
|
||||
"projects.owner": "Owner",
|
||||
"projects.status": "Status",
|
||||
"projects.startDate": "Start Date",
|
||||
"projects.dueDate": "Due Date",
|
||||
"projects.editProject": "Edit Project",
|
||||
"projects.deleteProject": "Delete Project?",
|
||||
"projects.deleteConfirm": "Are you sure you want to delete this project? This action cannot be undone.",
|
||||
|
||||
"team.details": "Details",
|
||||
"team.workload": "Workload",
|
||||
"team.recentTasks": "Recent Tasks",
|
||||
"team.recentPosts": "Recent Posts",
|
||||
"team.modules": "Modules",
|
||||
"team.selectBrands": "Select brands...",
|
||||
"team.gridView": "Grid View",
|
||||
"team.teamsView": "Teams View",
|
||||
"team.unassigned": "Unassigned",
|
||||
|
||||
"modules.marketing": "Marketing",
|
||||
"modules.projects": "Projects",
|
||||
"modules.finance": "Finance",
|
||||
|
||||
"teams.title": "Teams",
|
||||
"teams.teams": "Teams",
|
||||
"teams.createTeam": "Create Team",
|
||||
"teams.editTeam": "Edit Team",
|
||||
"teams.deleteTeam": "Delete Team?",
|
||||
"teams.deleteConfirm": "Are you sure you want to delete this team? This action cannot be undone.",
|
||||
"teams.name": "Team Name",
|
||||
"teams.description": "Description",
|
||||
"teams.members": "members",
|
||||
"teams.details": "Details",
|
||||
"teams.noTeams": "No teams yet",
|
||||
"teams.selectMembers": "Search members...",
|
||||
|
||||
"dates.today": "Today",
|
||||
"dates.yesterday": "Yesterday",
|
||||
"dates.thisWeek": "This Week",
|
||||
"dates.lastWeek": "Last Week",
|
||||
"dates.thisMonth": "This Month",
|
||||
"dates.lastMonth": "Last Month",
|
||||
"dates.thisQuarter": "This Quarter",
|
||||
"dates.thisYear": "This Year",
|
||||
"dates.customRange": "Custom Range",
|
||||
"dates.clearDates": "Clear Dates",
|
||||
|
||||
"dashboard.myTasks": "My Tasks",
|
||||
"dashboard.projectProgress": "Project Progress",
|
||||
"dashboard.noProjectsYet": "No projects yet",
|
||||
|
||||
"finance.project": "Project",
|
||||
"finance.projectBudget": "Project Budget",
|
||||
"finance.projectBreakdown": "Project Breakdown",
|
||||
"finance.budgetFor": "Budget for",
|
||||
|
||||
"budgets.title": "Budgets",
|
||||
"budgets.subtitle": "Add and manage budget entries — track source, destination, and allocation",
|
||||
"budgets.addEntry": "Add Entry",
|
||||
"budgets.editEntry": "Edit Entry",
|
||||
"budgets.deleteEntry": "Delete Entry?",
|
||||
"budgets.deleteConfirm": "Are you sure you want to delete this budget entry? This action cannot be undone.",
|
||||
"budgets.searchEntries": "Search entries...",
|
||||
"budgets.allCategories": "All Categories",
|
||||
"budgets.allDestinations": "All Destinations",
|
||||
"budgets.noEntries": "No budget entries yet. Add your first entry.",
|
||||
"budgets.noMatch": "No entries match your filters.",
|
||||
"budgets.label": "Label",
|
||||
"budgets.labelPlaceholder": "e.g., Q1 Marketing Budget, Equipment Purchase...",
|
||||
"budgets.amount": "Amount",
|
||||
"budgets.dateReceived": "Date Received",
|
||||
"budgets.source": "Source",
|
||||
"budgets.sourcePlaceholder": "e.g., CEO Approval, Annual Budget...",
|
||||
"budgets.destination": "Destination",
|
||||
"budgets.selectDestination": "Select destination...",
|
||||
"budgets.companyCard": "Company Card",
|
||||
"budgets.personalAccount": "Personal Account",
|
||||
"budgets.corporateAccount": "Corporate Account",
|
||||
"budgets.otherDest": "Other",
|
||||
"budgets.category": "Category",
|
||||
"budgets.linkedTo": "Linked To",
|
||||
"budgets.noCampaign": "No campaign",
|
||||
"budgets.noProject": "No project",
|
||||
"budgets.general": "General",
|
||||
"budgets.notes": "Notes",
|
||||
"budgets.notesPlaceholder": "Any details about this budget entry...",
|
||||
"budgets.date": "Date",
|
||||
"budgets.type": "Type",
|
||||
"budgets.income": "Income",
|
||||
"budgets.expense": "Expense",
|
||||
"budgets.allTypes": "All Types",
|
||||
"budgets.net": "Net",
|
||||
"budgets.dateExpensed": "Date",
|
||||
|
||||
"dashboard.expenses": "Expenses",
|
||||
"finance.expenses": "Total Expenses"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user