1210 lines
58 KiB
JavaScript
1210 lines
58 KiB
JavaScript
|
|
// Multi-language support
|
||
|
|
|
||
|
|
const translations = {
|
||
|
|
en: {
|
||
|
|
// Navigation
|
||
|
|
'nav.dashboard': 'Dashboard',
|
||
|
|
'nav.transactions': 'Transactions',
|
||
|
|
'nav.recurring': 'Recurring',
|
||
|
|
'nav.import': 'Import CSV',
|
||
|
|
'nav.reports': 'Reports',
|
||
|
|
'nav.admin': 'Admin',
|
||
|
|
'nav.settings': 'Settings',
|
||
|
|
'nav.logout': 'Log out',
|
||
|
|
|
||
|
|
// Dashboard
|
||
|
|
'dashboard.total_spent': 'Total Spent This Month',
|
||
|
|
'dashboard.active_categories': 'Active Categories',
|
||
|
|
'dashboard.total_transactions': 'Total Transactions',
|
||
|
|
'dashboard.vs_last_month': 'vs last month',
|
||
|
|
'dashboard.categories_in_use': 'categories in use',
|
||
|
|
'dashboard.this_month': 'current month',
|
||
|
|
'dashboard.spending_by_category': 'Spending by Category',
|
||
|
|
'dashboard.monthly_trend': 'Monthly Trend',
|
||
|
|
'dashboard.recent_transactions': 'Recent Transactions',
|
||
|
|
'dashboard.view_all': 'View All',
|
||
|
|
'dashboard.search': 'Search expenses...',
|
||
|
|
'dashboard.selectCategory': 'Select category...',
|
||
|
|
'dashboard.noTransactions': 'No transactions yet',
|
||
|
|
'dashboard.noData': 'No data available',
|
||
|
|
'dashboard.total': 'Total',
|
||
|
|
'dashboard.totalThisYear': 'Total This Year',
|
||
|
|
'dashboard.spending': 'Spending',
|
||
|
|
'dashboard.categoryBreakdownDesc': 'Breakdown by category',
|
||
|
|
'dashboard.lightMode': 'Light Mode',
|
||
|
|
'dashboard.darkMode': 'Dark Mode',
|
||
|
|
'dashboard.expenseAdded': 'Expense added successfully!',
|
||
|
|
|
||
|
|
// Login
|
||
|
|
'login.title': 'Welcome Back',
|
||
|
|
'login.tagline': 'Track your expenses, manage your finances',
|
||
|
|
'login.remember_me': 'Remember me',
|
||
|
|
'login.sign_in': 'Sign In',
|
||
|
|
'login.no_account': "Don't have an account?",
|
||
|
|
'login.register': 'Register',
|
||
|
|
|
||
|
|
// Register
|
||
|
|
'register.title': 'Create Account',
|
||
|
|
'register.tagline': 'Start managing your finances today',
|
||
|
|
'register.create_account': 'Create Account',
|
||
|
|
'register.have_account': 'Already have an account?',
|
||
|
|
'register.login': 'Login',
|
||
|
|
|
||
|
|
// Forms
|
||
|
|
'form.email': 'Email',
|
||
|
|
'form.password': 'Password',
|
||
|
|
'form.username': 'Username',
|
||
|
|
'form.language': 'Language',
|
||
|
|
'form.currency': 'Currency',
|
||
|
|
'form.monthlyBudget': 'Monthly Budget',
|
||
|
|
'form.amount': 'Amount',
|
||
|
|
'form.description': 'Description',
|
||
|
|
'form.category': 'Category',
|
||
|
|
'form.date': 'Date',
|
||
|
|
'form.tags': 'Tags (comma separated)',
|
||
|
|
'form.receipt': 'Receipt (optional)',
|
||
|
|
'form.2fa_code': '2FA Code',
|
||
|
|
'form.chooseFile': 'Choose File',
|
||
|
|
'form.noFileChosen': 'No file chosen',
|
||
|
|
|
||
|
|
// Transactions
|
||
|
|
'transactions.title': 'Transactions',
|
||
|
|
'transactions.export': 'Export CSV',
|
||
|
|
'transactions.import': 'Import CSV',
|
||
|
|
'transactions.addExpense': 'Add Expense',
|
||
|
|
'transactions.search': 'Search transactions...',
|
||
|
|
'transactions.date': 'Date',
|
||
|
|
'transactions.filters': 'Filters',
|
||
|
|
'transactions.category': 'Category',
|
||
|
|
'transactions.allCategories': 'Category',
|
||
|
|
'transactions.startDate': 'Start Date',
|
||
|
|
'transactions.endDate': 'End Date',
|
||
|
|
'transactions.tableTransaction': 'Transaction',
|
||
|
|
'transactions.tableCategory': 'Category',
|
||
|
|
'transactions.tableDate': 'Date',
|
||
|
|
'transactions.tablePayment': 'Payment',
|
||
|
|
'transactions.tableAmount': 'Amount',
|
||
|
|
'transactions.tableStatus': 'Status',
|
||
|
|
'transactions.tableActions': 'Actions',
|
||
|
|
'transactions.showing': 'Showing',
|
||
|
|
'transactions.to': 'to',
|
||
|
|
'transactions.of': 'of',
|
||
|
|
'transactions.results': 'results',
|
||
|
|
'transactions.previous': 'Previous',
|
||
|
|
'transactions.next': 'Next',
|
||
|
|
'transactions.noTransactions': 'No transactions found',
|
||
|
|
'transactions.expense': 'Expense',
|
||
|
|
'transactions.completed': 'Completed',
|
||
|
|
'transactions.pending': 'Pending',
|
||
|
|
'transactions.edit': 'Edit',
|
||
|
|
'transactions.delete': 'Delete',
|
||
|
|
'transactions.updated': 'Transaction updated successfully!',
|
||
|
|
'transactions.notFound': 'Transaction not found',
|
||
|
|
'modal.edit_expense': 'Edit Expense',
|
||
|
|
'actions.update': 'Update Expense',
|
||
|
|
'form.currentReceipt': 'Current receipt attached',
|
||
|
|
'form.receiptHelp': 'Upload a new file to replace existing receipt',
|
||
|
|
'transactions.viewReceipt': 'View Receipt',
|
||
|
|
'transactions.downloadReceipt': 'Download Receipt',
|
||
|
|
'transactions.transaction': 'transaction',
|
||
|
|
'transactions.transactions': 'transactions',
|
||
|
|
'transactions.deleteConfirm': 'Are you sure you want to delete this transaction?',
|
||
|
|
'transactions.deleted': 'Transaction deleted',
|
||
|
|
'transactions.imported': 'Imported',
|
||
|
|
'transactions.importSuccess': 'transactions',
|
||
|
|
|
||
|
|
// Actions
|
||
|
|
'actions.add_expense': 'Add Expense',
|
||
|
|
'actions.save': 'Save Expense',
|
||
|
|
'actions.update': 'Update',
|
||
|
|
|
||
|
|
// Modal
|
||
|
|
'modal.add_expense': 'Add Expense',
|
||
|
|
|
||
|
|
// Recurring Expenses
|
||
|
|
'recurring.title': 'Recurring Expenses',
|
||
|
|
'recurring.subtitle': 'Manage subscriptions and recurring bills',
|
||
|
|
'recurring.detect': 'Detect Patterns',
|
||
|
|
'recurring.addNew': 'Add Recurring',
|
||
|
|
'recurring.noRecurring': 'No recurring expenses yet',
|
||
|
|
'recurring.addFirst': 'Add your first recurring expense or detect patterns from existing expenses',
|
||
|
|
'recurring.active': 'Active Recurring Expenses',
|
||
|
|
'recurring.inactive': 'Inactive',
|
||
|
|
'recurring.overdue': 'Overdue',
|
||
|
|
'recurring.dueToday': 'Due today',
|
||
|
|
'recurring.dueIn': 'Due in',
|
||
|
|
'recurring.day': 'day',
|
||
|
|
'recurring.days': 'days',
|
||
|
|
'recurring.autoCreate': 'Auto-create',
|
||
|
|
'recurring.detected': 'Auto-detected',
|
||
|
|
'recurring.createExpense': 'Create expense now',
|
||
|
|
'recurring.deactivate': 'Deactivate',
|
||
|
|
'recurring.activate': 'Activate',
|
||
|
|
'recurring.add': 'Add Recurring Expense',
|
||
|
|
'recurring.edit': 'Edit Recurring Expense',
|
||
|
|
'recurring.name': 'Name',
|
||
|
|
'recurring.frequency': 'Frequency',
|
||
|
|
'recurring.frequency.daily': 'Daily',
|
||
|
|
'recurring.frequency.weekly': 'Weekly',
|
||
|
|
'recurring.frequency.monthly': 'Monthly',
|
||
|
|
'recurring.frequency.yearly': 'Yearly',
|
||
|
|
'recurring.dayOfWeek': 'Day of week',
|
||
|
|
'recurring.dayOfMonth': 'Day of month',
|
||
|
|
'recurring.nextDue': 'Next Due Date',
|
||
|
|
'recurring.notes': 'Notes',
|
||
|
|
'recurring.autoCreateDesc': 'Automatically create an expense when due date arrives',
|
||
|
|
'recurring.errorLoading': 'Failed to load recurring expenses',
|
||
|
|
'recurring.expenseCreated': 'Expense created successfully!',
|
||
|
|
'recurring.errorCreating': 'Failed to create expense',
|
||
|
|
'recurring.activated': 'Recurring expense activated',
|
||
|
|
'recurring.deactivated': 'Recurring expense deactivated',
|
||
|
|
'recurring.deleteConfirm': 'Are you sure you want to delete this recurring expense?',
|
||
|
|
'recurring.deleted': 'Recurring expense deleted',
|
||
|
|
'recurring.created': 'Recurring expense created',
|
||
|
|
'recurring.updated': 'Recurring expense updated',
|
||
|
|
'recurring.detecting': 'Detecting...',
|
||
|
|
'recurring.noPatterns': 'No recurring patterns detected',
|
||
|
|
'recurring.patternsFound': 'Found recurring patterns',
|
||
|
|
'recurring.suggestionsTitle': 'Detected Recurring Patterns',
|
||
|
|
'recurring.suggestionsDesc': 'We found these potential recurring expenses based on your transaction history',
|
||
|
|
'recurring.occurrences': 'occurrences',
|
||
|
|
'recurring.confidence': 'confidence',
|
||
|
|
'recurring.accept': 'Accept',
|
||
|
|
'recurring.dismiss': 'Dismiss',
|
||
|
|
'recurring.suggestionAccepted': 'Recurring expense added',
|
||
|
|
'recurring.errorDetecting': 'Failed to detect patterns',
|
||
|
|
'recurring.lastCreated': 'Last created',
|
||
|
|
'recurring.never': 'Never',
|
||
|
|
'recurring.autoCreatedTag': 'Auto-created from recurring',
|
||
|
|
|
||
|
|
// Days of week
|
||
|
|
'days.monday': 'Monday',
|
||
|
|
'days.tuesday': 'Tuesday',
|
||
|
|
'days.wednesday': 'Wednesday',
|
||
|
|
'days.thursday': 'Thursday',
|
||
|
|
'days.friday': 'Friday',
|
||
|
|
'days.saturday': 'Saturday',
|
||
|
|
'days.sunday': 'Sunday',
|
||
|
|
|
||
|
|
// Search
|
||
|
|
'search.inputPlaceholder': 'Search everything...',
|
||
|
|
'search.placeholder': 'Search for transactions, documents, categories, or features',
|
||
|
|
'search.hint': 'Press Ctrl+K to open search',
|
||
|
|
'search.pressEnter': 'Press Enter to search',
|
||
|
|
'search.pressEsc': 'ESC to close',
|
||
|
|
'search.minChars': 'Type at least 2 characters to search',
|
||
|
|
'search.noResults': 'No results found',
|
||
|
|
'search.error': 'Search failed. Please try again.',
|
||
|
|
'search.features': 'Features',
|
||
|
|
'search.expenses': 'Expenses',
|
||
|
|
'search.documents': 'Documents',
|
||
|
|
'search.categories': 'Categories',
|
||
|
|
'search.recurring': 'Recurring',
|
||
|
|
'search.tags': 'Tags',
|
||
|
|
'search.ocrMatch': 'OCR Match',
|
||
|
|
|
||
|
|
// Budget Alerts
|
||
|
|
'budget.alert': 'Budget Alert',
|
||
|
|
'budget.categoryAlert': 'Category Budget Alert',
|
||
|
|
'budget.overallAlert': 'Monthly Budget Alert',
|
||
|
|
'budget.exceededAlert': 'Budget Exceeded',
|
||
|
|
'budget.categoryAlertMessage': '⚠️ {category} has used {percentage}% of its budget',
|
||
|
|
'budget.overallAlertMessage': '⚠️ You have used {percentage}% of your monthly budget',
|
||
|
|
'budget.exceededAlertMessage': '🚨 {category} has exceeded its budget limit',
|
||
|
|
'budget.categoryWarning': '{category} is at {percentage}% ({spent} of {budget})',
|
||
|
|
'budget.overallWarning': 'Monthly budget is at {percentage}% ({spent} of {budget})',
|
||
|
|
'budget.viewAllAlerts': 'View all alerts',
|
||
|
|
'budget.activeAlerts': 'Active Budget Alerts',
|
||
|
|
'budget.monthlyBudget': 'Monthly Budget',
|
||
|
|
'budget.weeklySummary': 'Weekly Spending Summary',
|
||
|
|
'budget.weeklySummaryMessage': 'You spent {spent} this week ({change} vs last week). Top category: {category}',
|
||
|
|
'budget.noBudgetSet': 'No budget set',
|
||
|
|
'budget.setBudget': 'Set Budget',
|
||
|
|
'budget.editBudget': 'Edit Budget',
|
||
|
|
'budget.budgetAmount': 'Budget Amount',
|
||
|
|
'budget.alertThreshold': 'Alert Threshold',
|
||
|
|
'budget.alertThresholdHelp': 'Get notified when spending reaches this percentage (50-200%)',
|
||
|
|
'budget.save': 'Save Budget',
|
||
|
|
'budget.cancel': 'Cancel',
|
||
|
|
'budget.budgetUpdated': 'Budget updated successfully',
|
||
|
|
'budget.budgetError': 'Failed to update budget',
|
||
|
|
|
||
|
|
// CSV Import
|
||
|
|
'import.title': 'Import CSV',
|
||
|
|
'import.subtitle': 'Import your bank statements or expense CSV files',
|
||
|
|
'import.stepUpload': 'Upload',
|
||
|
|
'import.stepReview': 'Review',
|
||
|
|
'import.stepMap': 'Map Categories',
|
||
|
|
'import.stepImport': 'Import',
|
||
|
|
'import.uploadTitle': 'Upload CSV File',
|
||
|
|
'import.uploadDesc': 'Upload your bank statement or expense CSV file',
|
||
|
|
'import.dragDrop': 'Drag and drop your CSV file here',
|
||
|
|
'import.orClick': 'or click to browse',
|
||
|
|
'import.supportedFormats': 'Supported Formats',
|
||
|
|
'import.formatRequirement1': 'CSV files with Date, Description, and Amount columns',
|
||
|
|
'import.formatRequirement2': 'Supports comma, semicolon, or tab delimiters',
|
||
|
|
'import.formatRequirement3': 'Date formats: DD/MM/YYYY, YYYY-MM-DD, etc.',
|
||
|
|
'import.formatRequirement4': 'Maximum file size: 10MB',
|
||
|
|
'import.parsing': 'Parsing CSV file...',
|
||
|
|
'import.errorInvalidFile': 'Please select a CSV file',
|
||
|
|
'import.errorFileTooLarge': 'File too large. Maximum 10MB',
|
||
|
|
'import.errorParsing': 'Failed to parse CSV file',
|
||
|
|
'import.errorLoadingCategories': 'Failed to load categories',
|
||
|
|
'import.reviewTitle': 'Review Transactions',
|
||
|
|
'import.totalFound': 'Total Found',
|
||
|
|
'import.newTransactions': 'New',
|
||
|
|
'import.duplicates': 'Duplicates',
|
||
|
|
'import.duplicate': 'Duplicate',
|
||
|
|
'import.nextMapCategories': 'Next: Map Categories',
|
||
|
|
'import.mapCategories': 'Map Categories',
|
||
|
|
'import.mapCategoriesDesc': 'Assign categories to your transactions',
|
||
|
|
'import.bankCategoryMapping': 'Bank Category Mapping',
|
||
|
|
'import.bankCategory': 'Bank Category',
|
||
|
|
'import.defaultCategory': 'Default Category',
|
||
|
|
'import.defaultCategoryDesc': 'Used for transactions without bank category',
|
||
|
|
'import.startImport': 'Import Transactions',
|
||
|
|
'import.importing': 'Importing transactions...',
|
||
|
|
'import.noTransactionsSelected': 'No transactions selected',
|
||
|
|
'import.errorImporting': 'Failed to import transactions',
|
||
|
|
'import.importComplete': 'Import Complete!',
|
||
|
|
'import.imported': 'Imported',
|
||
|
|
'import.skipped': 'Skipped',
|
||
|
|
'import.errors': 'Errors',
|
||
|
|
'import.viewTransactions': 'View Transactions',
|
||
|
|
'import.importAnother': 'Import Another File',
|
||
|
|
|
||
|
|
// Reports
|
||
|
|
'reports.title': 'Financial Reports',
|
||
|
|
'reports.export': 'Export CSV',
|
||
|
|
'reports.analysisPeriod': 'Analysis Period:',
|
||
|
|
'reports.last30Days': 'Last 30 Days',
|
||
|
|
'reports.quarter': 'Quarter',
|
||
|
|
'reports.ytd': 'YTD',
|
||
|
|
'reports.allCategories': 'All Categories',
|
||
|
|
'reports.generate': 'Generate Report',
|
||
|
|
'reports.totalSpent': 'Total Spent',
|
||
|
|
'reports.topCategory': 'Top Category',
|
||
|
|
'reports.avgDaily': 'Avg. Daily',
|
||
|
|
'reports.savingsRate': 'Savings Rate',
|
||
|
|
'reports.vsLastMonth': 'vs last period',
|
||
|
|
'reports.spentThisPeriod': 'spent this period',
|
||
|
|
'reports.placeholder': 'Placeholder',
|
||
|
|
'reports.spendingTrend': 'Spending Trend',
|
||
|
|
'reports.categoryBreakdown': 'Category Breakdown',
|
||
|
|
'reports.monthlySpending': 'Monthly Spending',
|
||
|
|
'reports.smartRecommendations': 'Smart Recommendations',
|
||
|
|
'reports.noRecommendations': 'No recommendations at this time',
|
||
|
|
|
||
|
|
// User
|
||
|
|
'user.admin': 'Admin',
|
||
|
|
'user.user': 'User',
|
||
|
|
|
||
|
|
// Documents
|
||
|
|
'nav.documents': 'Documents',
|
||
|
|
'documents.title': 'Documents',
|
||
|
|
'documents.uploadTitle': 'Upload Documents',
|
||
|
|
'documents.dragDrop': 'Drag & drop files here or click to browse',
|
||
|
|
'documents.uploadDesc': 'Upload bank statements, invoices, or receipts.',
|
||
|
|
'documents.supportedFormats': 'Supported formats: CSV, PDF, XLS, XLSX, PNG, JPG (Max 10MB)',
|
||
|
|
'documents.yourFiles': 'Your Files',
|
||
|
|
'documents.searchPlaceholder': 'Search by name...',
|
||
|
|
'documents.tableDocName': 'Document Name',
|
||
|
|
'documents.tableUploadDate': 'Upload Date',
|
||
|
|
'documents.tableType': 'Type',
|
||
|
|
'documents.tableStatus': 'Status',
|
||
|
|
'documents.tableActions': 'Actions',
|
||
|
|
'documents.statusUploaded': 'Uploaded',
|
||
|
|
'documents.statusProcessing': 'Processing',
|
||
|
|
'documents.statusAnalyzed': 'Analyzed',
|
||
|
|
'documents.statusError': 'Error',
|
||
|
|
'documents.showing': 'Showing',
|
||
|
|
'documents.of': 'of',
|
||
|
|
'documents.documents': 'documents',
|
||
|
|
'documents.noDocuments': 'No documents found. Upload your first document!',
|
||
|
|
'documents.errorLoading': 'Failed to load documents. Please try again.',
|
||
|
|
|
||
|
|
// Settings
|
||
|
|
'settings.title': 'Settings',
|
||
|
|
'settings.avatar': 'Profile Avatar',
|
||
|
|
'settings.uploadAvatar': 'Upload Custom',
|
||
|
|
'settings.avatarDesc': 'PNG, JPG, GIF, WEBP. Max 20MB',
|
||
|
|
'settings.defaultAvatars': 'Or choose a default avatar:',
|
||
|
|
'settings.profile': 'Profile Information',
|
||
|
|
'settings.saveProfile': 'Save Profile',
|
||
|
|
'settings.changePassword': 'Change Password',
|
||
|
|
'settings.currentPassword': 'Current Password',
|
||
|
|
'settings.newPassword': 'New Password',
|
||
|
|
'settings.confirmPassword': 'Confirm New Password',
|
||
|
|
'settings.updatePassword': 'Update Password',
|
||
|
|
'settings.twoFactor': 'Two-Factor Authentication',
|
||
|
|
'settings.twoFactorEnabled': '2FA is currently enabled for your account',
|
||
|
|
'settings.twoFactorDisabled': 'Add an extra layer of security to your account',
|
||
|
|
'settings.enabled': 'Enabled',
|
||
|
|
'settings.disabled': 'Disabled',
|
||
|
|
'settings.regenerateCodes': 'Regenerate Backup Codes',
|
||
|
|
'settings.enable2FA': 'Enable 2FA',
|
||
|
|
'settings.disable2FA': 'Disable 2FA',
|
||
|
|
|
||
|
|
// Two-Factor Authentication
|
||
|
|
'twofa.setupTitle': 'Setup Two-Factor Authentication',
|
||
|
|
'twofa.setupDesc': 'Scan the QR code with your authenticator app',
|
||
|
|
'twofa.step1': 'Step 1: Scan QR Code',
|
||
|
|
'twofa.step1Desc': 'Open your authenticator app (Google Authenticator, Authy, etc.) and scan this QR code:',
|
||
|
|
'twofa.manualEntry': "Can't scan? Enter code manually",
|
||
|
|
'twofa.enterManually': 'Enter this code in your authenticator app:',
|
||
|
|
'twofa.step2': 'Step 2: Verify Code',
|
||
|
|
'twofa.step2Desc': 'Enter the 6-digit code from your authenticator app:',
|
||
|
|
'twofa.enable': 'Enable 2FA',
|
||
|
|
'twofa.infoText': "After enabling 2FA, you'll receive backup codes that you can use if you lose access to your authenticator app. Keep them in a safe place!",
|
||
|
|
'twofa.setupSuccess': 'Two-Factor Authentication Enabled!',
|
||
|
|
'twofa.backupCodesDesc': 'Save these backup codes in a secure location',
|
||
|
|
'twofa.important': 'Important!',
|
||
|
|
'twofa.backupCodesWarning': "Each backup code can only be used once. Store them securely - you'll need them if you lose access to your authenticator app.",
|
||
|
|
'twofa.yourBackupCodes': 'Your Backup Codes',
|
||
|
|
'twofa.downloadPDF': 'Download as PDF',
|
||
|
|
'twofa.print': 'Print Codes',
|
||
|
|
'twofa.continueToSettings': 'Continue to Settings',
|
||
|
|
'twofa.howToUse': 'How to use backup codes:',
|
||
|
|
'twofa.useWhen': "Use a backup code when you can't access your authenticator app",
|
||
|
|
'twofa.enterCode': 'Enter the code in the 2FA field when logging in',
|
||
|
|
'twofa.oneTimeUse': 'Each code works only once - it will be deleted after use',
|
||
|
|
'twofa.regenerate': 'You can regenerate codes anytime from Settings',
|
||
|
|
|
||
|
|
// Admin
|
||
|
|
'admin.title': 'Admin Panel',
|
||
|
|
'admin.subtitle': 'Manage users and system settings',
|
||
|
|
'admin.totalUsers': 'Total Users',
|
||
|
|
'admin.adminUsers': 'Admin Users',
|
||
|
|
'admin.twoFAEnabled': '2FA Enabled',
|
||
|
|
'admin.users': 'Users',
|
||
|
|
'admin.createUser': 'Create User',
|
||
|
|
'admin.username': 'Username',
|
||
|
|
'admin.email': 'Email',
|
||
|
|
'admin.role': 'Role',
|
||
|
|
'admin.twoFA': '2FA',
|
||
|
|
'admin.language': 'Language',
|
||
|
|
'admin.currency': 'Currency',
|
||
|
|
'admin.joined': 'Joined',
|
||
|
|
'admin.actions': 'Actions',
|
||
|
|
'admin.admin': 'Admin',
|
||
|
|
'admin.user': 'User',
|
||
|
|
'admin.createNewUser': 'Create New User',
|
||
|
|
'admin.makeAdmin': 'Make admin',
|
||
|
|
'admin.create': 'Create',
|
||
|
|
'admin.noUsers': 'No users found',
|
||
|
|
'admin.errorLoading': 'Error loading users',
|
||
|
|
'admin.userCreated': 'User created successfully',
|
||
|
|
'admin.errorCreating': 'Error creating user',
|
||
|
|
'admin.confirmDelete': 'Are you sure you want to delete user',
|
||
|
|
'admin.userDeleted': 'User deleted successfully',
|
||
|
|
'admin.errorDeleting': 'Error deleting user',
|
||
|
|
'admin.editNotImplemented': 'Edit functionality coming soon',
|
||
|
|
|
||
|
|
// Categories
|
||
|
|
'categories.foodDining': 'Food & Dining',
|
||
|
|
'categories.transportation': 'Transportation',
|
||
|
|
'categories.shopping': 'Shopping',
|
||
|
|
'categories.entertainment': 'Entertainment',
|
||
|
|
'categories.billsUtilities': 'Bills & Utilities',
|
||
|
|
'categories.healthcare': 'Healthcare',
|
||
|
|
'categories.education': 'Education',
|
||
|
|
'categories.other': 'Other',
|
||
|
|
'categories.manageTitle': 'Manage Categories',
|
||
|
|
'categories.addNew': 'Add New Category',
|
||
|
|
'categories.add': 'Add',
|
||
|
|
'categories.yourCategories': 'Your Categories',
|
||
|
|
'categories.dragToReorder': 'Drag to reorder',
|
||
|
|
'categories.created': 'Category created successfully',
|
||
|
|
'categories.updated': 'Category updated successfully',
|
||
|
|
'categories.deleted': 'Category deleted successfully',
|
||
|
|
'categories.hasExpenses': 'Cannot delete category with expenses',
|
||
|
|
'categories.reordered': 'Categories reordered successfully',
|
||
|
|
'categories.selectIcon': 'Select Icon',
|
||
|
|
'categories.searchIcons': 'Search icons...',
|
||
|
|
'categories.noExpenses': 'No expenses in this category',
|
||
|
|
'categories.viewExpenses': 'Click to view expenses',
|
||
|
|
|
||
|
|
// Dashboard
|
||
|
|
'dashboard.expenseCategories': 'Expense Categories',
|
||
|
|
'dashboard.manageCategories': 'Manage',
|
||
|
|
|
||
|
|
// Date formatting
|
||
|
|
'date.today': 'Today',
|
||
|
|
'date.yesterday': 'Yesterday',
|
||
|
|
'date.daysAgo': 'days ago',
|
||
|
|
|
||
|
|
// Form
|
||
|
|
'form.name': 'Name',
|
||
|
|
'form.color': 'Color',
|
||
|
|
'form.icon': 'Icon',
|
||
|
|
|
||
|
|
// Common
|
||
|
|
'common.cancel': 'Cancel',
|
||
|
|
'common.edit': 'Edit',
|
||
|
|
'common.delete': 'Delete',
|
||
|
|
'common.error': 'An error occurred. Please try again.',
|
||
|
|
'common.success': 'Operation completed successfully!',
|
||
|
|
'common.missingFields': 'Missing required fields',
|
||
|
|
'common.invalidCategory': 'Invalid category',
|
||
|
|
|
||
|
|
// Tags
|
||
|
|
'tags.title': 'Smart Tags',
|
||
|
|
'tags.subtitle': 'Manage tags for your expenses',
|
||
|
|
'tags.add': 'Add Tag',
|
||
|
|
'tags.edit': 'Edit Tag',
|
||
|
|
'tags.delete': 'Delete Tag',
|
||
|
|
'tags.name': 'Tag Name',
|
||
|
|
'tags.color': 'Color',
|
||
|
|
'tags.icon': 'Icon',
|
||
|
|
'tags.useCount': 'Used',
|
||
|
|
'tags.times': 'times',
|
||
|
|
'tags.autoGenerated': 'Auto-generated',
|
||
|
|
'tags.manual': 'Manual',
|
||
|
|
'tags.popular': 'Popular Tags',
|
||
|
|
'tags.all': 'All Tags',
|
||
|
|
'tags.filter': 'Filter by Tag',
|
||
|
|
'tags.filterByTags': 'Filter by Tags',
|
||
|
|
'tags.selectTags': 'Select tags...',
|
||
|
|
'tags.noTags': 'No tags yet',
|
||
|
|
'tags.createFirst': 'Create your first tag or let the system auto-generate tags',
|
||
|
|
'tags.created': 'Tag created successfully',
|
||
|
|
'tags.updated': 'Tag updated successfully',
|
||
|
|
'tags.deleted': 'Tag deleted successfully',
|
||
|
|
'tags.errorCreating': 'Error creating tag',
|
||
|
|
'tags.errorUpdating': 'Error updating tag',
|
||
|
|
'tags.errorDeleting': 'Error deleting tag',
|
||
|
|
'tags.deleteConfirm': 'Are you sure you want to delete this tag?',
|
||
|
|
'tags.autoTagging': 'Auto-Tagging',
|
||
|
|
'tags.autoTaggingDesc': 'Automatically suggest tags based on OCR text and description',
|
||
|
|
'tags.enableAutoTagging': 'Enable auto-tagging',
|
||
|
|
'tags.suggestedTags': 'Suggested Tags',
|
||
|
|
'tags.manageTags': 'Manage Tags',
|
||
|
|
'tags.viewAll': 'View All Tags',
|
||
|
|
'tags.stats': 'Tag Statistics',
|
||
|
|
'tags.totalTags': 'Total Tags',
|
||
|
|
'tags.autoTags': 'Auto Tags',
|
||
|
|
'tags.manualTags': 'Manual Tags',
|
||
|
|
'tags.totalUses': 'Total Uses',
|
||
|
|
'tags.mostUsed': 'Most Used Tag',
|
||
|
|
|
||
|
|
// Tags
|
||
|
|
'tags.title': 'Smart Tags',
|
||
|
|
'tags.subtitle': 'Manage tags for your expenses',
|
||
|
|
'tags.add': 'Add Tag',
|
||
|
|
'tags.edit': 'Edit Tag',
|
||
|
|
'tags.delete': 'Delete Tag',
|
||
|
|
'tags.name': 'Tag Name',
|
||
|
|
'tags.color': 'Color',
|
||
|
|
'tags.icon': 'Icon',
|
||
|
|
'tags.useCount': 'Used',
|
||
|
|
'tags.times': 'times',
|
||
|
|
'tags.autoGenerated': 'Auto-generated',
|
||
|
|
'tags.manual': 'Manual',
|
||
|
|
'tags.popular': 'Popular Tags',
|
||
|
|
'tags.all': 'All Tags',
|
||
|
|
'tags.filter': 'Filter by Tag',
|
||
|
|
'tags.filterByTags': 'Filter by Tags',
|
||
|
|
'tags.selectTags': 'Select tags...',
|
||
|
|
'tags.noTags': 'No tags yet',
|
||
|
|
'tags.createFirst': 'Create your first tag or let the system auto-generate tags',
|
||
|
|
'tags.created': 'Tag created successfully',
|
||
|
|
'tags.updated': 'Tag updated successfully',
|
||
|
|
'tags.deleted': 'Tag deleted successfully',
|
||
|
|
'tags.errorCreating': 'Error creating tag',
|
||
|
|
'tags.errorUpdating': 'Error updating tag',
|
||
|
|
'tags.errorDeleting': 'Error deleting tag',
|
||
|
|
'tags.deleteConfirm': 'Are you sure you want to delete this tag?',
|
||
|
|
'tags.autoTagging': 'Auto-Tagging',
|
||
|
|
'tags.autoTaggingDesc': 'Automatically suggest tags based on OCR text and description',
|
||
|
|
'tags.enableAutoTagging': 'Enable auto-tagging',
|
||
|
|
'tags.suggestedTags': 'Suggested Tags',
|
||
|
|
'tags.manageTags': 'Manage Tags',
|
||
|
|
'tags.viewAll': 'View All Tags',
|
||
|
|
'tags.stats': 'Tag Statistics',
|
||
|
|
'tags.totalTags': 'Total Tags',
|
||
|
|
'tags.autoTags': 'Auto Tags',
|
||
|
|
'tags.manualTags': 'Manual Tags',
|
||
|
|
'tags.totalUses': 'Total Uses',
|
||
|
|
'tags.mostUsed': 'Most Used Tag',
|
||
|
|
|
||
|
|
// Actions
|
||
|
|
'actions.cancel': 'Cancel',
|
||
|
|
|
||
|
|
// Income
|
||
|
|
'nav.income': 'Income',
|
||
|
|
'income.title': 'Income',
|
||
|
|
'income.subtitle': 'Track your income sources',
|
||
|
|
'income.addNew': 'Add Income',
|
||
|
|
'income.add': 'Add Income',
|
||
|
|
'income.edit': 'Edit Income',
|
||
|
|
'income.save': 'Save Income',
|
||
|
|
'income.source': 'Source',
|
||
|
|
'income.tableDescription': 'Description',
|
||
|
|
'income.tableDate': 'Date',
|
||
|
|
'income.tableSource': 'Source',
|
||
|
|
'income.tableAmount': 'Amount',
|
||
|
|
'income.tableActions': 'Actions',
|
||
|
|
'income.noIncome': 'No income entries yet',
|
||
|
|
'income.addFirst': 'Add your first income entry',
|
||
|
|
'income.created': 'Income added successfully',
|
||
|
|
'income.updated': 'Income updated successfully',
|
||
|
|
'income.deleted': 'Income deleted successfully',
|
||
|
|
'income.deleteConfirm': 'Are you sure you want to delete this income entry?',
|
||
|
|
'income.frequency': 'Payment Frequency',
|
||
|
|
'income.once': 'One-time',
|
||
|
|
'income.weekly': 'Weekly',
|
||
|
|
'income.biweekly': 'Every 2 Weeks',
|
||
|
|
'income.every4weeks': 'Every 4 Weeks',
|
||
|
|
'income.monthly': 'Monthly',
|
||
|
|
'income.custom': 'Custom (Freelance)',
|
||
|
|
'income.customDays': 'Custom Days Interval',
|
||
|
|
'income.customHelp': 'Enter the number of days between payments',
|
||
|
|
'income.customDaysRequired': 'Please enter a valid number of days for custom frequency',
|
||
|
|
'income.autoCreate': 'Automatically create income entries',
|
||
|
|
'income.autoCreateHelp': 'When enabled, income entries will be created automatically based on the frequency. You can edit or cancel at any time.',
|
||
|
|
'income.createNowConfirm': 'Create an income entry now from this recurring income?',
|
||
|
|
'form.selectSource': 'Select source...',
|
||
|
|
'dashboard.total_income': 'Total Income',
|
||
|
|
'dashboard.profit_loss': 'Profit/Loss',
|
||
|
|
'dashboard.income_vs_expenses': 'Income vs Expenses',
|
||
|
|
'dashboard.net_income': 'Net Income',
|
||
|
|
|
||
|
|
// Reports
|
||
|
|
'reports.title': 'Financial Reports',
|
||
|
|
'reports.export': 'Export CSV',
|
||
|
|
'reports.analysisPeriod': 'Analysis Period',
|
||
|
|
'reports.last30Days': 'Last 30 Days',
|
||
|
|
'reports.quarter': 'Quarter',
|
||
|
|
'reports.ytd': 'YTD',
|
||
|
|
'reports.allCategories': 'All Categories',
|
||
|
|
'reports.generate': 'Generate Report',
|
||
|
|
'reports.totalIncome': 'Total Income',
|
||
|
|
'reports.totalSpent': 'Total Spent',
|
||
|
|
'reports.profitLoss': 'Profit/Loss',
|
||
|
|
'reports.topCategory': 'Top Category',
|
||
|
|
'reports.avgDaily': 'Avg. Daily',
|
||
|
|
'reports.savingsRate': 'Savings Rate',
|
||
|
|
'reports.vsLastMonth': 'vs last period',
|
||
|
|
'reports.spentThisPeriod': 'spent this period',
|
||
|
|
'reports.incomeVsExpenses': 'Income vs Expenses',
|
||
|
|
'reports.incomeSources': 'Income Sources',
|
||
|
|
'reports.categoryBreakdown': 'Expense Categories',
|
||
|
|
'reports.monthlyComparison': 'Monthly Comparison',
|
||
|
|
'reports.monthlySpending': 'Monthly Spending',
|
||
|
|
'reports.smartRecommendations': 'Smart Recommendations',
|
||
|
|
'reports.spendingTrend': 'Spending Trend'
|
||
|
|
},
|
||
|
|
ro: {
|
||
|
|
// Navigation
|
||
|
|
'nav.dashboard': 'Tablou de bord',
|
||
|
|
'nav.transactions': 'Tranzacții',
|
||
|
|
'nav.recurring': 'Recurente', 'nav.import': 'Import CSV', 'nav.reports': 'Rapoarte',
|
||
|
|
'nav.admin': 'Admin',
|
||
|
|
'nav.settings': 'Setări',
|
||
|
|
'nav.logout': 'Deconectare',
|
||
|
|
|
||
|
|
// Dashboard
|
||
|
|
'dashboard.total_spent': 'Total Cheltuit Luna Aceasta',
|
||
|
|
'dashboard.active_categories': 'Categorii Active',
|
||
|
|
'dashboard.total_transactions': 'Total Tranzacții',
|
||
|
|
'dashboard.vs_last_month': 'față de luna trecută',
|
||
|
|
'dashboard.categories_in_use': 'categorii în uz',
|
||
|
|
'dashboard.this_month': 'luna curentă',
|
||
|
|
'dashboard.spending_by_category': 'Cheltuieli pe Categorii',
|
||
|
|
'dashboard.monthly_trend': 'Tendință Lunară',
|
||
|
|
'dashboard.recent_transactions': 'Tranzacții Recente',
|
||
|
|
'dashboard.view_all': 'Vezi Toate',
|
||
|
|
'dashboard.search': 'Caută cheltuieli...',
|
||
|
|
'dashboard.selectCategory': 'Selectează categoria...',
|
||
|
|
'dashboard.noTransactions': 'Nicio tranzacție încă',
|
||
|
|
'dashboard.noData': 'Nu există date disponibile',
|
||
|
|
'dashboard.total': 'Total',
|
||
|
|
'dashboard.totalThisYear': 'Total Anul Acesta',
|
||
|
|
'dashboard.spending': 'Cheltuieli',
|
||
|
|
'dashboard.categoryBreakdownDesc': 'Defalcare pe categorii',
|
||
|
|
'dashboard.lightMode': 'Mod Luminos',
|
||
|
|
'dashboard.darkMode': 'Mod Întunecat',
|
||
|
|
'dashboard.expenseAdded': 'Cheltuială adăugată cu succes!',
|
||
|
|
|
||
|
|
// Login
|
||
|
|
'login.title': 'Bine ai revenit',
|
||
|
|
'login.tagline': 'Urmărește-ți cheltuielile, gestionează-ți finanțele',
|
||
|
|
'login.remember_me': 'Ține-mă minte',
|
||
|
|
'login.sign_in': 'Conectare',
|
||
|
|
'login.no_account': 'Nu ai un cont?',
|
||
|
|
'login.register': 'Înregistrare',
|
||
|
|
|
||
|
|
// Register
|
||
|
|
'register.title': 'Creare Cont',
|
||
|
|
'register.tagline': 'Începe să îți gestionezi finanțele astăzi',
|
||
|
|
'register.create_account': 'Creează Cont',
|
||
|
|
'register.have_account': 'Ai deja un cont?',
|
||
|
|
'register.login': 'Conectare',
|
||
|
|
|
||
|
|
// Forms
|
||
|
|
'form.email': 'Email',
|
||
|
|
'form.password': 'Parolă',
|
||
|
|
'form.username': 'Nume utilizator',
|
||
|
|
'form.language': 'Limbă',
|
||
|
|
'form.currency': 'Monedă',
|
||
|
|
'form.monthlyBudget': 'Buget Lunar',
|
||
|
|
'form.amount': 'Sumă',
|
||
|
|
'form.description': 'Descriere',
|
||
|
|
'form.category': 'Categorie',
|
||
|
|
'form.date': 'Dată',
|
||
|
|
'form.tags': 'Etichete (separate prin virgulă)',
|
||
|
|
'form.receipt': 'Chitanță (opțional)',
|
||
|
|
'form.2fa_code': 'Cod 2FA',
|
||
|
|
'form.chooseFile': 'Alege Fișier',
|
||
|
|
'form.noFileChosen': 'Niciun fișier ales',
|
||
|
|
|
||
|
|
// Transactions
|
||
|
|
'transactions.title': 'Tranzacții',
|
||
|
|
'transactions.export': 'Exportă CSV',
|
||
|
|
'transactions.import': 'Importă CSV',
|
||
|
|
'transactions.addExpense': 'Adaugă Cheltuială',
|
||
|
|
'transactions.search': 'Caută tranzacții...',
|
||
|
|
'transactions.date': 'Dată',
|
||
|
|
'transactions.filters': 'Filtre',
|
||
|
|
'transactions.category': 'Categorie',
|
||
|
|
'transactions.allCategories': 'Categorie',
|
||
|
|
'transactions.startDate': 'Data Început',
|
||
|
|
'transactions.endDate': 'Data Sfârșit',
|
||
|
|
'transactions.tableTransaction': 'Tranzacție',
|
||
|
|
'transactions.tableCategory': 'Categorie',
|
||
|
|
'transactions.tableDate': 'Dată',
|
||
|
|
'transactions.tablePayment': 'Plată',
|
||
|
|
'transactions.tableAmount': 'Sumă',
|
||
|
|
'transactions.tableStatus': 'Stare',
|
||
|
|
'transactions.tableActions': 'Acțiuni',
|
||
|
|
'transactions.showing': 'Afișare',
|
||
|
|
'transactions.to': 'până la',
|
||
|
|
'transactions.of': 'din',
|
||
|
|
'transactions.results': 'rezultate',
|
||
|
|
'transactions.previous': 'Anterior',
|
||
|
|
'transactions.next': 'Următorul',
|
||
|
|
'transactions.noTransactions': 'Nu s-au găsit tranzacții',
|
||
|
|
'transactions.expense': 'Cheltuială',
|
||
|
|
'transactions.completed': 'Finalizat',
|
||
|
|
'transactions.pending': 'În așteptare',
|
||
|
|
'transactions.edit': 'Editează',
|
||
|
|
'transactions.delete': 'Șterge',
|
||
|
|
'transactions.updated': 'Tranzacție actualizată cu succes!',
|
||
|
|
'transactions.notFound': 'Tranzacție negăsită',
|
||
|
|
'modal.edit_expense': 'Editează Cheltuială',
|
||
|
|
'actions.update': 'Actualizează Cheltuială',
|
||
|
|
'form.currentReceipt': 'Chitanță curentă atașată',
|
||
|
|
'form.receiptHelp': 'Încarcă un fișier nou pentru a înlocui chitanța existentă',
|
||
|
|
'transactions.viewReceipt': 'Vezi Chitanța',
|
||
|
|
'transactions.downloadReceipt': 'Descarcă Chitanța',
|
||
|
|
'transactions.transaction': 'tranzacție',
|
||
|
|
'transactions.transactions': 'tranzacții',
|
||
|
|
'transactions.deleteConfirm': 'Ești sigur că vrei să ștergi această tranzacție?',
|
||
|
|
'transactions.deleted': 'Tranzacție ștearsă',
|
||
|
|
'transactions.imported': 'Importate',
|
||
|
|
'transactions.importSuccess': 'tranzacții',
|
||
|
|
|
||
|
|
// Actions
|
||
|
|
'actions.add_expense': 'Adaugă Cheltuială',
|
||
|
|
'actions.save': 'Salvează Cheltuiala',
|
||
|
|
'actions.update': 'Actualizează',
|
||
|
|
|
||
|
|
// Modal
|
||
|
|
'modal.add_expense': 'Adaugă Cheltuială',
|
||
|
|
|
||
|
|
// Cheltuieli Recurente
|
||
|
|
'recurring.title': 'Cheltuieli Recurente',
|
||
|
|
'recurring.subtitle': 'Gestionează abonamente și facturi recurente',
|
||
|
|
'recurring.detect': 'Detectează Tipare',
|
||
|
|
'recurring.addNew': 'Adaugă Recurent',
|
||
|
|
'recurring.noRecurring': 'Nicio cheltuială recurentă încă',
|
||
|
|
'recurring.addFirst': 'Adaugă prima ta cheltuială recurentă sau detectează tipare din cheltuielile existente',
|
||
|
|
'recurring.active': 'Cheltuieli Recurente Active',
|
||
|
|
'recurring.inactive': 'Inactive',
|
||
|
|
'recurring.overdue': 'Întârziat',
|
||
|
|
'recurring.dueToday': 'Scadent astăzi',
|
||
|
|
'recurring.dueIn': 'Scadent în',
|
||
|
|
'recurring.day': 'zi',
|
||
|
|
'recurring.days': 'zile',
|
||
|
|
'recurring.autoCreate': 'Creare automată',
|
||
|
|
'recurring.detected': 'Auto-detectat',
|
||
|
|
'recurring.createExpense': 'Creează cheltuială acum',
|
||
|
|
'recurring.deactivate': 'Dezactivează',
|
||
|
|
'recurring.activate': 'Activează',
|
||
|
|
'recurring.add': 'Adaugă Cheltuială Recurentă',
|
||
|
|
'recurring.edit': 'Editează Cheltuială Recurentă',
|
||
|
|
'recurring.name': 'Nume',
|
||
|
|
'recurring.frequency': 'Frecvență',
|
||
|
|
'recurring.frequency.daily': 'Zilnic',
|
||
|
|
'recurring.frequency.weekly': 'Săptămânal',
|
||
|
|
'recurring.frequency.monthly': 'Lunar',
|
||
|
|
'recurring.frequency.yearly': 'Anual',
|
||
|
|
'recurring.dayOfWeek': 'Ziua săptămânii',
|
||
|
|
'recurring.dayOfMonth': 'Ziua lunii',
|
||
|
|
'recurring.nextDue': 'Următoarea Scadență',
|
||
|
|
'recurring.notes': 'Notițe',
|
||
|
|
'recurring.autoCreateDesc': 'Creează automat o cheltuială când vine data scadenței',
|
||
|
|
'recurring.errorLoading': 'Eroare la încărcarea cheltuielilor recurente',
|
||
|
|
'recurring.expenseCreated': 'Cheltuială creată cu succes!',
|
||
|
|
'recurring.errorCreating': 'Eroare la crearea cheltuielii',
|
||
|
|
'recurring.activated': 'Cheltuială recurentă activată',
|
||
|
|
'recurring.deactivated': 'Cheltuială recurentă dezactivată',
|
||
|
|
'recurring.deleteConfirm': 'Ești sigur că vrei să ștergi această cheltuială recurentă?',
|
||
|
|
'recurring.deleted': 'Cheltuială recurentă ștearsă',
|
||
|
|
'recurring.created': 'Cheltuială recurentă creată',
|
||
|
|
'recurring.updated': 'Cheltuială recurentă actualizată',
|
||
|
|
'recurring.detecting': 'Se detectează...',
|
||
|
|
'recurring.noPatterns': 'Nu s-au detectat tipare recurente',
|
||
|
|
'recurring.patternsFound': 'Tipare recurente găsite',
|
||
|
|
'recurring.suggestionsTitle': 'Tipare Recurente Detectate',
|
||
|
|
'recurring.suggestionsDesc': 'Am găsit aceste cheltuieli recurente potențiale bazate pe istoricul tău de tranzacții',
|
||
|
|
'recurring.occurrences': 'apariții',
|
||
|
|
'recurring.confidence': 'încredere',
|
||
|
|
'recurring.accept': 'Acceptă',
|
||
|
|
'recurring.dismiss': 'Respinge',
|
||
|
|
'recurring.suggestionAccepted': 'Cheltuială recurentă adăugată',
|
||
|
|
'recurring.errorDetecting': 'Eroare la detectarea tiparelor',
|
||
|
|
'recurring.lastCreated': 'Ultima creare',
|
||
|
|
'recurring.never': 'Niciodată',
|
||
|
|
'recurring.autoCreatedTag': 'Creat automat din recurent',
|
||
|
|
|
||
|
|
// Zilele săptămânii
|
||
|
|
'days.monday': 'Luni',
|
||
|
|
'days.tuesday': 'Marți',
|
||
|
|
'days.wednesday': 'Miercuri',
|
||
|
|
'days.thursday': 'Joi',
|
||
|
|
'days.friday': 'Vineri',
|
||
|
|
'days.saturday': 'Sâmbătă',
|
||
|
|
'days.sunday': 'Duminică',
|
||
|
|
// Search
|
||
|
|
'search.inputPlaceholder': 'Caută orice...',
|
||
|
|
'search.placeholder': 'Caută tranzacții, documente, categorii sau funcționalități',
|
||
|
|
'search.tags': 'Etichete',
|
||
|
|
'search.hint': 'Apasă Ctrl+K pentru căutare',
|
||
|
|
'search.pressEnter': 'Apasă Enter pentru căutare',
|
||
|
|
'search.pressEsc': 'ESC pentru închidere',
|
||
|
|
'search.minChars': 'Scrie cel puțin 2 caractere pentru căutare',
|
||
|
|
'search.noResults': 'Nu s-au găsit rezultate',
|
||
|
|
'search.error': 'Căutare eșuată. Te rog încearcă din nou.',
|
||
|
|
'search.features': 'Funcționalități',
|
||
|
|
'search.expenses': 'Cheltuieli',
|
||
|
|
'search.documents': 'Documente',
|
||
|
|
'search.categories': 'Categorii',
|
||
|
|
'search.recurring': 'Recurente',
|
||
|
|
'search.tags': 'Etichete',
|
||
|
|
'search.ocrMatch': 'Potrivire OCR',
|
||
|
|
|
||
|
|
// Alerte Buget
|
||
|
|
'budget.alert': 'Alertă Buget',
|
||
|
|
'budget.categoryAlert': 'Alertă Buget Categorie',
|
||
|
|
'budget.overallAlert': 'Alertă Buget Lunar',
|
||
|
|
'budget.exceededAlert': 'Buget Depășit',
|
||
|
|
'budget.categoryAlertMessage': '⚠️ {category} a folosit {percentage}% din buget',
|
||
|
|
'budget.overallAlertMessage': '⚠️ Ai folosit {percentage}% din bugetul lunar',
|
||
|
|
'budget.exceededAlertMessage': '🚨 {category} a depășit limita bugetului',
|
||
|
|
'budget.categoryWarning': '{category} este la {percentage}% ({spent} din {budget})',
|
||
|
|
'budget.overallWarning': 'Bugetul lunar este la {percentage}% ({spent} din {budget})',
|
||
|
|
'budget.viewAllAlerts': 'Vezi toate alertele',
|
||
|
|
'budget.activeAlerts': 'Alerte de Buget Active',
|
||
|
|
'budget.monthlyBudget': 'Buget Lunar',
|
||
|
|
'budget.weeklySummary': 'Rezumat Cheltuieli Săptămânale',
|
||
|
|
'budget.weeklySummaryMessage': 'Ai cheltuit {spent} săptămâna aceasta ({change} față de săptămâna trecută). Categorie principală: {category}',
|
||
|
|
'budget.noBudgetSet': 'Niciun buget setat',
|
||
|
|
'budget.setBudget': 'Setează Buget',
|
||
|
|
'budget.editBudget': 'Editează Buget',
|
||
|
|
'budget.budgetAmount': 'Suma Bugetului',
|
||
|
|
'budget.alertThreshold': 'Prag de Alertă',
|
||
|
|
'budget.alertThresholdHelp': 'Primește notificări când cheltuielile ajung la acest procent (50-200%)',
|
||
|
|
'budget.save': 'Salvează Buget',
|
||
|
|
'budget.cancel': 'Anulează',
|
||
|
|
'budget.budgetUpdated': 'Buget actualizat cu succes',
|
||
|
|
'budget.budgetError': 'Eroare la actualizarea bugetului',
|
||
|
|
|
||
|
|
// Import CSV
|
||
|
|
'import.title': 'Import CSV',
|
||
|
|
'import.subtitle': 'Importă extractele bancare sau fișierele CSV cu cheltuieli',
|
||
|
|
'import.stepUpload': 'Încărcare',
|
||
|
|
'import.stepReview': 'Revizuire',
|
||
|
|
'import.stepMap': 'Mapare Categorii',
|
||
|
|
'import.stepImport': 'Import',
|
||
|
|
'import.uploadTitle': 'Încarcă Fișier CSV',
|
||
|
|
'import.uploadDesc': 'Încarcă extractul bancar sau fișierul CSV cu cheltuieli',
|
||
|
|
'import.dragDrop': 'Trage și plasează fișierul CSV aici',
|
||
|
|
'import.orClick': 'sau click pentru a răsfoi',
|
||
|
|
'import.supportedFormats': 'Formate Suportate',
|
||
|
|
'import.formatRequirement1': 'Fișiere CSV cu coloane Dată, Descriere și Sumă',
|
||
|
|
'import.formatRequirement2': 'Suportă delimitatori virgulă, punct și virgulă sau tab',
|
||
|
|
'import.formatRequirement3': 'Formate dată: DD/MM/YYYY, YYYY-MM-DD, etc.',
|
||
|
|
'import.formatRequirement4': 'Dimensiune maximă fișier: 10MB',
|
||
|
|
'import.parsing': 'Se parsează fișierul CSV...',
|
||
|
|
'import.errorInvalidFile': 'Te rog selectează un fișier CSV',
|
||
|
|
'import.errorFileTooLarge': 'Fișier prea mare. Maxim 10MB',
|
||
|
|
'import.errorParsing': 'Eroare la parsarea fișierului CSV',
|
||
|
|
'import.errorLoadingCategories': 'Eroare la încărcarea categoriilor',
|
||
|
|
'import.reviewTitle': 'Revizuire Tranzacții',
|
||
|
|
'import.totalFound': 'Total Găsite',
|
||
|
|
'import.newTransactions': 'Noi',
|
||
|
|
'import.duplicates': 'Duplicate',
|
||
|
|
'import.duplicate': 'Duplicat',
|
||
|
|
'import.nextMapCategories': 'Următorul: Mapare Categorii',
|
||
|
|
'import.mapCategories': 'Mapare Categorii',
|
||
|
|
'import.mapCategoriesDesc': 'Asignează categorii tranzacțiilor tale',
|
||
|
|
'import.bankCategoryMapping': 'Mapare Categorii Bancare',
|
||
|
|
'import.bankCategory': 'Categorie Bancară',
|
||
|
|
'import.defaultCategory': 'Categorie Implicită',
|
||
|
|
'import.defaultCategoryDesc': 'Folosită pentru tranzacții fără categorie bancară',
|
||
|
|
'import.startImport': 'Importă Tranzacții',
|
||
|
|
'import.importing': 'Se importă tranzacții...',
|
||
|
|
'import.noTransactionsSelected': 'Nicio tranzacție selectată',
|
||
|
|
'import.errorImporting': 'Eroare la importarea tranzacțiilor',
|
||
|
|
'import.importComplete': 'Import Complet!',
|
||
|
|
'import.imported': 'Importate',
|
||
|
|
'import.skipped': 'Sărite',
|
||
|
|
'import.errors': 'Erori',
|
||
|
|
'import.viewTransactions': 'Vezi Tranzacții',
|
||
|
|
'import.importAnother': 'Importă Alt Fișier',
|
||
|
|
// Reports
|
||
|
|
'reports.title': 'Rapoarte Financiare',
|
||
|
|
'reports.export': 'Exportă CSV',
|
||
|
|
'reports.analysisPeriod': 'Perioadă de Analiză:',
|
||
|
|
'reports.last30Days': 'Ultimele 30 Zile',
|
||
|
|
'reports.quarter': 'Trimestru',
|
||
|
|
'reports.ytd': 'An Curent',
|
||
|
|
'reports.allCategories': 'Toate Categoriile',
|
||
|
|
'reports.generate': 'Generează Raport',
|
||
|
|
'reports.totalSpent': 'Total Cheltuit',
|
||
|
|
'reports.topCategory': 'Categorie Principală',
|
||
|
|
'reports.avgDaily': 'Medie Zilnică',
|
||
|
|
'reports.savingsRate': 'Rată Economii',
|
||
|
|
'reports.vsLastMonth': 'față de perioada anterioară',
|
||
|
|
'reports.spentThisPeriod': 'cheltuit în această perioadă',
|
||
|
|
'reports.placeholder': 'Substituent',
|
||
|
|
'reports.spendingTrend': 'Tendință Cheltuieli',
|
||
|
|
'reports.categoryBreakdown': 'Defalcare pe Categorii',
|
||
|
|
'reports.monthlySpending': 'Cheltuieli Lunare',
|
||
|
|
'reports.smartRecommendations': 'Recomandări Inteligente',
|
||
|
|
'reports.noRecommendations': 'Nicio recomandare momentan',
|
||
|
|
|
||
|
|
// User
|
||
|
|
'user.admin': 'Administrator',
|
||
|
|
'user.user': 'Utilizator',
|
||
|
|
|
||
|
|
// Documents
|
||
|
|
'nav.documents': 'Documente',
|
||
|
|
'documents.title': 'Documente',
|
||
|
|
'documents.uploadTitle': 'Încarcă Documente',
|
||
|
|
'documents.dragDrop': 'Trage și plasează fișiere aici sau click pentru a căuta',
|
||
|
|
'documents.uploadDesc': 'Încarcă extrase de cont, facturi sau chitanțe.',
|
||
|
|
'documents.supportedFormats': 'Formate suportate: CSV, PDF, XLS, XLSX, PNG, JPG (Max 10MB)',
|
||
|
|
'documents.yourFiles': 'Fișierele Tale',
|
||
|
|
'documents.searchPlaceholder': 'Caută după nume...',
|
||
|
|
'documents.tableDocName': 'Nume Document',
|
||
|
|
'documents.tableUploadDate': 'Data Încărcării',
|
||
|
|
'documents.tableType': 'Tip',
|
||
|
|
'documents.tableStatus': 'Stare',
|
||
|
|
'documents.tableActions': 'Acțiuni',
|
||
|
|
'documents.statusUploaded': 'Încărcat',
|
||
|
|
'documents.statusProcessing': 'În procesare',
|
||
|
|
'documents.statusAnalyzed': 'Analizat',
|
||
|
|
'documents.statusError': 'Eroare',
|
||
|
|
'documents.showing': 'Afișare',
|
||
|
|
'documents.of': 'din',
|
||
|
|
'documents.documents': 'documente',
|
||
|
|
'documents.noDocuments': 'Nu s-au găsit documente. Încarcă primul tău document!',
|
||
|
|
'documents.errorLoading': 'Eroare la încărcarea documentelor. Te rugăm încearcă din nou.',
|
||
|
|
|
||
|
|
// Settings
|
||
|
|
'settings.title': 'Setări',
|
||
|
|
'settings.avatar': 'Avatar Profil',
|
||
|
|
'settings.uploadAvatar': 'Încarcă Personalizat',
|
||
|
|
'settings.avatarDesc': 'PNG, JPG, GIF, WEBP. Max 20MB',
|
||
|
|
'settings.defaultAvatars': 'Sau alege un avatar prestabilit:',
|
||
|
|
'settings.profile': 'Informații Profil',
|
||
|
|
'settings.saveProfile': 'Salvează Profil',
|
||
|
|
'settings.changePassword': 'Schimbă Parola',
|
||
|
|
'settings.currentPassword': 'Parola Curentă',
|
||
|
|
'settings.newPassword': 'Parolă Nouă',
|
||
|
|
'settings.confirmPassword': 'Confirmă Parola Nouă',
|
||
|
|
'settings.updatePassword': 'Actualizează Parola',
|
||
|
|
'settings.twoFactor': 'Autentificare Doi Factori',
|
||
|
|
'settings.twoFactorEnabled': '2FA este activată pentru contul tău',
|
||
|
|
'settings.twoFactorDisabled': 'Adaugă un nivel suplimentar de securitate contului tău',
|
||
|
|
'settings.enabled': 'Activat',
|
||
|
|
'settings.disabled': 'Dezactivat',
|
||
|
|
'settings.regenerateCodes': 'Regenerează Coduri Backup',
|
||
|
|
'settings.enable2FA': 'Activează 2FA',
|
||
|
|
'settings.disable2FA': 'Dezactivează 2FA',
|
||
|
|
|
||
|
|
// Two-Factor Authentication
|
||
|
|
'twofa.setupTitle': 'Configurare Autentificare Doi Factori',
|
||
|
|
'twofa.setupDesc': 'Scanează codul QR cu aplicația ta de autentificare',
|
||
|
|
'twofa.step1': 'Pasul 1: Scanează Codul QR',
|
||
|
|
'twofa.step1Desc': 'Deschide aplicația ta de autentificare (Google Authenticator, Authy, etc.) și scanează acest cod QR:',
|
||
|
|
'twofa.manualEntry': 'Nu poți scana? Introdu codul manual',
|
||
|
|
'twofa.enterManually': 'Introdu acest cod în aplicația ta de autentificare:',
|
||
|
|
'twofa.step2': 'Pasul 2: Verifică Codul',
|
||
|
|
'twofa.step2Desc': 'Introdu codul de 6 cifre din aplicația ta de autentificare:',
|
||
|
|
'twofa.enable': 'Activează 2FA',
|
||
|
|
'twofa.infoText': 'După activarea 2FA, vei primi coduri de backup pe care le poți folosi dacă pierzi accesul la aplicația ta de autentificare. Păstrează-le într-un loc sigur!',
|
||
|
|
'twofa.setupSuccess': 'Autentificare Doi Factori Activată!',
|
||
|
|
'twofa.backupCodesDesc': 'Salvează aceste coduri de backup într-o locație sigură',
|
||
|
|
'twofa.important': 'Important!',
|
||
|
|
'twofa.backupCodesWarning': 'Fiecare cod de backup poate fi folosit o singură dată. Păstrează-le în siguranță - vei avea nevoie de ele dacă pierzi accesul la aplicația ta de autentificare.',
|
||
|
|
'twofa.yourBackupCodes': 'Codurile Tale de Backup',
|
||
|
|
'twofa.downloadPDF': 'Descarcă ca PDF',
|
||
|
|
'twofa.print': 'Tipărește Coduri',
|
||
|
|
'twofa.continueToSettings': 'Continuă la Setări',
|
||
|
|
'twofa.howToUse': 'Cum să folosești codurile de backup:',
|
||
|
|
'twofa.useWhen': 'Folosește un cod de backup când nu poți accesa aplicația ta de autentificare',
|
||
|
|
'twofa.enterCode': 'Introdu codul în câmpul 2FA când te autentifici',
|
||
|
|
'twofa.oneTimeUse': 'Fiecare cod funcționează o singură dată - va fi șters după folosire',
|
||
|
|
'twofa.regenerate': 'Poți regenera coduri oricând din Setări',
|
||
|
|
|
||
|
|
// Admin
|
||
|
|
'admin.title': 'Panou Administrare',
|
||
|
|
'admin.subtitle': 'Gestionează utilizatori și setări sistem',
|
||
|
|
'admin.totalUsers': 'Total Utilizatori',
|
||
|
|
'admin.adminUsers': 'Administratori',
|
||
|
|
'admin.twoFAEnabled': '2FA Activat',
|
||
|
|
'admin.users': 'Utilizatori',
|
||
|
|
'admin.createUser': 'Creează Utilizator',
|
||
|
|
'admin.username': 'Nume Utilizator',
|
||
|
|
'admin.email': 'Email',
|
||
|
|
'admin.role': 'Rol',
|
||
|
|
'admin.twoFA': '2FA',
|
||
|
|
'admin.language': 'Limbă',
|
||
|
|
'admin.currency': 'Monedă',
|
||
|
|
'admin.joined': 'Înregistrat',
|
||
|
|
'admin.actions': 'Acțiuni',
|
||
|
|
'admin.admin': 'Admin',
|
||
|
|
'admin.user': 'Utilizator',
|
||
|
|
'admin.createNewUser': 'Creează Utilizator Nou',
|
||
|
|
'admin.makeAdmin': 'Fă administrator',
|
||
|
|
'admin.create': 'Creează',
|
||
|
|
'admin.noUsers': 'Niciun utilizator găsit',
|
||
|
|
'admin.errorLoading': 'Eroare la încărcarea utilizatorilor',
|
||
|
|
'admin.userCreated': 'Utilizator creat cu succes',
|
||
|
|
'admin.errorCreating': 'Eroare la crearea utilizatorului',
|
||
|
|
'admin.confirmDelete': 'Sigur vrei să ștergi utilizatorul',
|
||
|
|
'admin.userDeleted': 'Utilizator șters cu succes',
|
||
|
|
'admin.errorDeleting': 'Eroare la ștergerea utilizatorului',
|
||
|
|
'admin.editNotImplemented': 'Funcționalitatea de editare va fi disponibilă în curând',
|
||
|
|
|
||
|
|
// Common
|
||
|
|
'common.cancel': 'Anulează',
|
||
|
|
'common.edit': 'Editează',
|
||
|
|
'common.delete': 'Șterge',
|
||
|
|
'common.error': 'A apărut o eroare. Încercați din nou.',
|
||
|
|
'common.success': 'Operațiune finalizată cu succes!',
|
||
|
|
'common.missingFields': 'Lipsesc câmpuri obligatorii',
|
||
|
|
'common.invalidCategory': 'Categorie invalidă',
|
||
|
|
|
||
|
|
// Etichete
|
||
|
|
'tags.title': 'Etichete Inteligente',
|
||
|
|
'tags.subtitle': 'Gestionează etichete pentru cheltuieli',
|
||
|
|
'tags.add': 'Adaugă Etichetă',
|
||
|
|
'tags.edit': 'Editează Etichetă',
|
||
|
|
'tags.delete': 'Șterge Etichetă',
|
||
|
|
'tags.name': 'Nume Etichetă',
|
||
|
|
'tags.color': 'Culoare',
|
||
|
|
'tags.icon': 'Pictogramă',
|
||
|
|
'tags.useCount': 'Folosit',
|
||
|
|
'tags.times': 'ori',
|
||
|
|
'tags.autoGenerated': 'Auto-generat',
|
||
|
|
'tags.manual': 'Manual',
|
||
|
|
'tags.popular': 'Etichete Populare',
|
||
|
|
'tags.all': 'Toate Etichetele',
|
||
|
|
'tags.filter': 'Filtrează după Etichetă',
|
||
|
|
'tags.filterByTags': 'Filtrează după Etichete',
|
||
|
|
'tags.selectTags': 'Selectează etichete...',
|
||
|
|
'tags.noTags': 'Nicio etichetă încă',
|
||
|
|
'tags.createFirst': 'Creează prima ta etichetă sau lasă sistemul să genereze automat',
|
||
|
|
'tags.created': 'Etichetă creată cu succes',
|
||
|
|
'tags.updated': 'Etichetă actualizată cu succes',
|
||
|
|
'tags.deleted': 'Etichetă ștearsă cu succes',
|
||
|
|
'tags.errorCreating': 'Eroare la crearea etichetei',
|
||
|
|
'tags.errorUpdating': 'Eroare la actualizarea etichetei',
|
||
|
|
'tags.errorDeleting': 'Eroare la ștergerea etichetei',
|
||
|
|
'tags.deleteConfirm': 'Ești sigur că vrei să ștergi această etichetă?',
|
||
|
|
'tags.autoTagging': 'Etichetare Automată',
|
||
|
|
'tags.autoTaggingDesc': 'Sugerează automat etichete bazate pe text OCR și descriere',
|
||
|
|
'tags.enableAutoTagging': 'Activează etichetarea automată',
|
||
|
|
'tags.suggestedTags': 'Etichete Sugerate',
|
||
|
|
'tags.manageTags': 'Gestionează Etichete',
|
||
|
|
'tags.viewAll': 'Vezi Toate Etichetele',
|
||
|
|
'tags.stats': 'Statistici Etichete',
|
||
|
|
'tags.totalTags': 'Total Etichete',
|
||
|
|
'tags.autoTags': 'Etichete Auto',
|
||
|
|
'tags.manualTags': 'Etichete Manuale',
|
||
|
|
'tags.totalUses': 'Utilizări Totale',
|
||
|
|
'tags.mostUsed': 'Eticheta Cea Mai Folosită',
|
||
|
|
// Categorii
|
||
|
|
'categories.foodDining': 'Mâncare & Restaurant',
|
||
|
|
'categories.transportation': 'Transport',
|
||
|
|
'categories.shopping': 'Cumpărături',
|
||
|
|
'categories.entertainment': 'Divertisment',
|
||
|
|
'categories.billsUtilities': 'Facturi & Utilități',
|
||
|
|
'categories.healthcare': 'Sănătate',
|
||
|
|
'categories.education': 'Educație',
|
||
|
|
'categories.other': 'Altele',
|
||
|
|
'categories.manageTitle': 'Gestionează Categorii',
|
||
|
|
'categories.addNew': 'Adaugă Categorie Nouă',
|
||
|
|
'categories.add': 'Adaugă',
|
||
|
|
'categories.yourCategories': 'Categoriile Tale',
|
||
|
|
'categories.dragToReorder': 'Trage pentru a reordona',
|
||
|
|
'categories.created': 'Categorie creată cu succes',
|
||
|
|
'categories.updated': 'Categorie actualizată cu succes',
|
||
|
|
'categories.deleted': 'Categorie ștearsă cu succes',
|
||
|
|
'categories.hasExpenses': 'Nu se poate șterge categoria cu cheltuieli',
|
||
|
|
'categories.reordered': 'Categorii reordonate cu succes',
|
||
|
|
'categories.selectIcon': 'Selectează Iconiță',
|
||
|
|
'categories.searchIcons': 'Caută iconițe...',
|
||
|
|
'categories.noExpenses': 'Nicio cheltuială în această categorie',
|
||
|
|
'categories.viewExpenses': 'Click pentru a vedea cheltuielile',
|
||
|
|
|
||
|
|
// Tablou de bord
|
||
|
|
'dashboard.expenseCategories': 'Categorii de Cheltuieli',
|
||
|
|
'dashboard.manageCategories': 'Gestionează',
|
||
|
|
|
||
|
|
// Formatare dată
|
||
|
|
'date.today': 'Astăzi',
|
||
|
|
'date.yesterday': 'Ieri',
|
||
|
|
'date.daysAgo': 'zile în urmă',
|
||
|
|
|
||
|
|
// Formular
|
||
|
|
'form.name': 'Nume',
|
||
|
|
'form.color': 'Culoare',
|
||
|
|
'form.icon': 'Iconă',
|
||
|
|
|
||
|
|
// Comune
|
||
|
|
'common.cancel': 'Anulează',
|
||
|
|
'common.edit': 'Editează',
|
||
|
|
'common.delete': 'Șterge',
|
||
|
|
'common.error': 'A apărut o eroare. Te rugăm încearcă din nou.',
|
||
|
|
'common.success': 'Operațiune finalizată cu succes!',
|
||
|
|
'common.missingFields': 'Câmpuri obligatorii lipsă',
|
||
|
|
'common.invalidCategory': 'Categorie invalidă',
|
||
|
|
// Actions
|
||
|
|
'actions.cancel': 'Anulează',
|
||
|
|
|
||
|
|
// Venit
|
||
|
|
'nav.income': 'Venit',
|
||
|
|
'income.title': 'Venit',
|
||
|
|
'income.subtitle': 'Urmărește sursele de venit',
|
||
|
|
'income.addNew': 'Adaugă Venit',
|
||
|
|
'income.add': 'Adaugă Venit',
|
||
|
|
'income.edit': 'Editează Venit',
|
||
|
|
'income.save': 'Salvează Venit',
|
||
|
|
'income.source': 'Sursă',
|
||
|
|
'income.tableDescription': 'Descriere',
|
||
|
|
'income.tableDate': 'Dată',
|
||
|
|
'income.tableSource': 'Sursă',
|
||
|
|
'income.tableAmount': 'Sumă',
|
||
|
|
'income.tableActions': 'Acțiuni',
|
||
|
|
'income.noIncome': 'Nicio intrare de venit încă',
|
||
|
|
'income.addFirst': 'Adaugă prima ta intrare de venit',
|
||
|
|
'income.created': 'Venit adăugat cu succes',
|
||
|
|
'income.updated': 'Venit actualizat cu succes',
|
||
|
|
'income.deleted': 'Venit șters cu succes',
|
||
|
|
'income.deleteConfirm': 'Sigur vrei să ștergi această intrare de venit?',
|
||
|
|
'income.frequency': 'Frecvență Plată',
|
||
|
|
'income.once': 'O singură dată',
|
||
|
|
'income.weekly': 'Săptămânal',
|
||
|
|
'income.biweekly': 'La 2 săptămâni',
|
||
|
|
'income.every4weeks': 'La 4 săptămâni',
|
||
|
|
'income.monthly': 'Lunar',
|
||
|
|
'income.custom': 'Personalizat (Freelance)',
|
||
|
|
'income.customDays': 'Interval Zile Personalizat',
|
||
|
|
'income.customHelp': 'Introdu numărul de zile între plăți',
|
||
|
|
'income.customDaysRequired': 'Te rog introdu un număr valid de zile pentru frecvența personalizată',
|
||
|
|
'income.autoCreate': 'Creează automat intrări de venit',
|
||
|
|
'income.autoCreateHelp': 'Când este activat, intrările de venit vor fi create automat pe baza frecvenței. Poți edita sau anula oricând.',
|
||
|
|
'income.createNowConfirm': 'Creezi o intrare de venit acum din acest venit recurent?',
|
||
|
|
'form.selectSource': 'Selectează sursa...',
|
||
|
|
'dashboard.total_income': 'Total Venit',
|
||
|
|
'dashboard.profit_loss': 'Profit/Pierdere',
|
||
|
|
'dashboard.income_vs_expenses': 'Venit vs Cheltuieli',
|
||
|
|
'dashboard.net_income': 'Venit Net',
|
||
|
|
|
||
|
|
// Reports
|
||
|
|
'reports.title': 'Rapoarte Financiare',
|
||
|
|
'reports.export': 'Exportă CSV',
|
||
|
|
'reports.analysisPeriod': 'Perioada de Analiză',
|
||
|
|
'reports.last30Days': 'Ultimele 30 Zile',
|
||
|
|
'reports.quarter': 'Trimestru',
|
||
|
|
'reports.ytd': 'An Curent',
|
||
|
|
'reports.allCategories': 'Toate Categoriile',
|
||
|
|
'reports.generate': 'Generează Raport',
|
||
|
|
'reports.totalIncome': 'Total Venit',
|
||
|
|
'reports.totalSpent': 'Total Cheltuit',
|
||
|
|
'reports.profitLoss': 'Profit/Pierdere',
|
||
|
|
'reports.topCategory': 'Categoria Principală',
|
||
|
|
'reports.avgDaily': 'Medie Zilnică',
|
||
|
|
'reports.savingsRate': 'Rată Economisire',
|
||
|
|
'reports.vsLastMonth': 'față de perioada anterioară',
|
||
|
|
'reports.spentThisPeriod': 'cheltuit în perioada',
|
||
|
|
'reports.incomeVsExpenses': 'Venit vs Cheltuieli',
|
||
|
|
'reports.incomeSources': 'Surse de Venit',
|
||
|
|
'reports.categoryBreakdown': 'Categorii Cheltuieli',
|
||
|
|
'reports.monthlyComparison': 'Comparație Lunară',
|
||
|
|
'reports.monthlySpending': 'Cheltuieli Lunare',
|
||
|
|
'reports.smartRecommendations': 'Recomandări Inteligente',
|
||
|
|
'reports.spendingTrend': 'Tendință Cheltuieli'
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
// Get current language from localStorage or default to 'en'
|
||
|
|
function getCurrentLanguage() {
|
||
|
|
return localStorage.getItem('language') || 'en';
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set language
|
||
|
|
function setLanguage(lang) {
|
||
|
|
if (translations[lang]) {
|
||
|
|
localStorage.setItem('language', lang);
|
||
|
|
translatePage(lang);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Translate all elements on page
|
||
|
|
function translatePage(lang) {
|
||
|
|
const elements = document.querySelectorAll('[data-translate]');
|
||
|
|
|
||
|
|
elements.forEach(element => {
|
||
|
|
const key = element.getAttribute('data-translate');
|
||
|
|
const translation = translations[lang][key];
|
||
|
|
|
||
|
|
if (translation) {
|
||
|
|
if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {
|
||
|
|
element.placeholder = translation;
|
||
|
|
} else {
|
||
|
|
element.textContent = translation;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// Initialize translations on page load
|
||
|
|
document.addEventListener('DOMContentLoaded', () => {
|
||
|
|
const currentLang = getCurrentLanguage();
|
||
|
|
translatePage(currentLang);
|
||
|
|
});
|
||
|
|
|
||
|
|
// Helper function to get translated text
|
||
|
|
function getTranslation(key, fallback = '') {
|
||
|
|
const lang = getCurrentLanguage();
|
||
|
|
return translations[lang]?.[key] || fallback || key;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Make functions and translations globally accessible for other scripts
|
||
|
|
window.getCurrentLanguage = getCurrentLanguage;
|
||
|
|
window.setLanguage = setLanguage;
|
||
|
|
window.translatePage = translatePage;
|
||
|
|
window.translations = translations;
|
||
|
|
window.getTranslation = getTranslation;
|
||
|
|
|
||
|
|
// Export functions for module systems
|
||
|
|
if (typeof module !== 'undefined' && module.exports) {
|
||
|
|
module.exports = { getCurrentLanguage, setLanguage, translatePage, translations };
|
||
|
|
}
|