{ "app": { "name": "Simpl'Result" }, "changelog": { "title": "Version History", "description": "View what's new and fixed in each version", "empty": "No entries available" }, "nav": { "dashboard": "Dashboard", "import": "Import", "transactions": "Transactions", "categories": "Categories", "adjustments": "Adjustments", "budget": "Budget", "reports": "Reports", "balance": "Balance sheet", "settings": "Settings" }, "dashboard": { "title": "Dashboard", "balance": "Balance", "income": "Income", "expenses": "Expenses", "net": "Net", "noData": "No data available. Start by importing your bank statements.", "expensesByCategory": "Expenses by Category", "recentTransactions": "Recent Transactions", "budgetVsActual": "Budget vs Actual", "expensesOverTime": "Expenses Over Time", "categoriesBanner": { "title": "New category taxonomy available", "description": "Your profile uses the legacy taxonomy. A new standard structure, aligned with Statistics Canada's CPI, is now available. Discover it from Settings.", "cta": "Discover the standard structure", "dismiss": "Dismiss banner" }, "period": { "month": "This month", "3months": "3 months", "6months": "6 months", "12months": "12 months", "year": "This year", "all": "All", "custom": "Custom" }, "dateFrom": "From", "dateTo": "To", "apply": "Apply", "help": { "title": "How to use the Dashboard", "tips": [ "Use the period selector (top right) to view different time ranges", "Summary cards show your balance, income, and expenses for the selected period", "The pie chart breaks down your expenses by category", "Recent transactions are listed at the bottom" ] } }, "import": { "title": "Import Statements", "dropzone": "Drag your CSV files here or click to select", "source": "Source", "file": "File", "status": "Status", "date": "Date", "folder": { "label": "Import folder", "notConfigured": "No folder configured", "browse": "Browse", "refresh": "Refresh" }, "sources": { "title": "Import Sources", "empty": "No sources found. Create subfolders in your import folder with CSV files.", "new": "new", "fileCount_one": "{{count}} file", "fileCount_other": "{{count}} files", "fileCount": "{{count}} file(s)" }, "config": { "title": "Source Configuration", "sourceName": "Source name", "delimiter": "Delimiter", "semicolon": "Semicolon", "comma": "Comma", "tab": "Tab", "encoding": "Encoding", "dateFormat": "Date format", "skipLines": "Lines to skip", "hasHeader": "First row contains headers", "signConvention": "Sign convention", "negativeExpense": "Negative expenses", "positiveExpense": "Positive expenses", "columnMapping": "Column mapping", "dateColumn": "Date column", "descriptionColumn": "Description column", "amountColumn": "Amount column", "amountMode": "Amount mode", "singleAmount": "Single amount", "debitCredit": "Separate debit / credit", "debitColumn": "Debit column", "creditColumn": "Credit column", "selectFiles": "Files to import", "selectAll": "Select all", "alreadyImported": "Imported", "autoDetect": "Auto-detect", "saveAsTemplate": "Save as template", "loadTemplate": "Load template", "templateName": "Template name", "templateSaved": "Template saved", "deleteTemplate": "Delete template", "noTemplates": "No templates saved", "updateTemplate": "Update template" }, "preview": { "title": "Data Preview", "noData": "No data to display", "rowCount": "{{count}} row(s)", "errorCount": "{{count}} error(s)", "date": "Date", "description": "Description", "amount": "Amount", "raw": "Raw data", "moreRows": "... and {{count}} more row(s)" }, "duplicates": { "title": "Duplicate Detection", "fileAlreadyImported": "This file has already been imported", "fileAlreadyImportedDesc": "A file with the same content already exists in the database.", "rowsFound": "{{count}} duplicate(s) found", "rowsFoundDesc": "These rows match existing transactions.", "noneFound": "No duplicates found", "skip": "Skip duplicates", "includeAll": "Import all", "summary": "Total: {{total}} rows — {{new}} new — {{duplicates}} duplicate(s)", "withinBatch": "Duplicate within imported files", "sourceDb": "Existing", "sourceBatch": "Within batch" }, "confirm": { "title": "Import Confirmation", "source": "Source", "files": "Files", "settings": "Settings", "rowsToImport": "Rows to import", "rowsSummary": "{{count}} row(s) to import, {{skipped}} duplicate(s) skipped" }, "progress": { "title": "Import in Progress", "importing": "Importing...", "rows": "rows" }, "report": { "title": "Import Report", "totalRows": "Total rows", "imported": "Imported", "skippedDuplicates": "Skipped duplicates", "errors": "Errors", "categorized": "Categorized", "uncategorized": "Uncategorized", "errorDetails": "Error details", "row": "Row", "errorMessage": "Error message", "done": "Done" }, "history": { "title": "Import History", "empty": "No imports yet.", "deleteAll": "Delete All", "deleteConfirm": "Delete this import and its {{count}} transaction(s)?", "deleteAllConfirm": "Delete ALL imports and their transactions? This cannot be undone.", "source": "Source", "filename": "File", "date": "Date", "rows": "Rows", "status": "Status" }, "wizard": { "back": "Back", "next": "Next", "preview": "Preview", "checkDuplicates": "Check duplicates", "confirm": "Confirm", "import": "Import" }, "help": { "title": "How to import bank statements", "tips": [ "Set your import folder, then create one subfolder per bank/source with CSV files inside", "Click a source to configure column mapping, delimiter, and date format", "Preview your data before importing to catch formatting issues", "Duplicate detection prevents the same transactions from being imported twice" ] } }, "transactions": { "title": "Transactions", "date": "Date", "description": "Description", "amount": "Amount", "category": "Category", "supplier": "Supplier", "noTransactions": "No transactions found.", "filters": { "search": "Search", "searchPlaceholder": "Search by description...", "allCategories": "All categories", "allSources": "All sources", "uncategorized": "Uncategorized", "dateFrom": "From", "dateTo": "To" }, "summary": { "count": "Transactions", "income": "Income", "expenses": "Expenses", "balance": "Balance" }, "table": { "noCategory": "— No category —" }, "pagination": { "showing": "Showing", "of": "of", "previous": "Previous", "next": "Next" }, "notes": { "placeholder": "Add a note..." }, "autoCategorize": "Auto-categorize", "autoCategorizeResult": "{{count}} transaction(s) categorized", "autoCategorizeNone": "No new matches found", "addKeyword": "Add keyword", "keywordAdded": "Keyword added", "keywordPlaceholder": "Keyword to match...", "splitAdjustment": "Split adjustment", "splitBase": "Base", "splitAdjusted": "Adjusted", "splitCategory": "Category", "splitAmount": "Amount", "splitDescription": "Description", "splitAddRow": "Add split", "splitRemove": "Remove split", "splitTotal": "Total must equal original amount", "splitDeleteConfirm": "Remove this split adjustment?", "help": { "title": "How to use Transactions", "tips": [ "Use the filters to search by description, category, source, or date range", "Click a column header to sort transactions", "Assign categories by clicking the category dropdown on each row", "Auto-categorize uses your keyword rules to categorize transactions in bulk" ] }, "transferIcon": { "tooltip": "Linked to a balance account", "ariaLabel": "Transaction linked to a balance account" } }, "categories": { "title": "Categories", "name": "Name", "type": "Type", "parent": "Parent Category", "color": "Color", "expense": "Expense", "income": "Income", "transfer": "Transfer", "keywords": "Keywords", "addCategory": "Add Category", "editCategory": "Edit Category", "deleteCategory": "Delete Category", "deleteConfirm": "Are you sure you want to delete this category? Its children will be promoted to top-level.", "deleteBlocked": "Cannot delete: this category or its children are used by {{count}} transaction(s).", "reinitialize": "Re-initialize", "reinitializeConfirm": "Reset all categories and keywords to their default values? Transaction categories will be unlinked. This cannot be undone.", "noParent": "No parent (top-level)", "isInputable": "Allow input", "isInputableHint": "Uncheck to hide from budget and transaction dropdowns", "dragToReorder": "Drag to reorder or change parent", "selectCategory": "Select a category to view details", "keywordCount": "Keywords", "keywordText": "Keyword...", "priority": "Priority", "customColor": "Custom color", "allKeywords": "All Keywords", "allKeywordsEmpty": "No keywords yet", "help": { "title": "How to manage Categories", "tips": [ "Create top-level categories and subcategories to organize your expenses and income", "Add keywords to a category so transactions matching those words are auto-categorized", "Set a priority on keywords to resolve conflicts when multiple categories match", "Click a category in the tree to view its details, edit it, or manage keywords" ] } }, "adjustments": { "title": "Adjustments", "name": "Name", "date": "Date", "description": "Description", "amount": "Amount", "recurring": "Recurring", "entries": "Entries", "addEntry": "Add entry", "newAdjustment": "New adjustment", "editAdjustment": "Edit adjustment", "deleteConfirm": "Delete this adjustment?", "total": "Total", "selectAdjustment": "Select an adjustment", "category": "Category", "noEntries": "No entries yet", "splitTransactions": "Transaction splits", "help": { "title": "How to use Adjustments", "tips": [ "Adjustments let you add manual entries that don't come from bank imports", "Use them for expected expenses or income not yet reflected in your statements", "Recurring adjustments repeat automatically each period" ] } }, "budget": { "title": "Budget", "category": "Category", "planned": "Planned", "actual": "Actual", "difference": "Difference", "annual": "Annual", "previousYear": "Prev. Year", "splitEvenly": "Split evenly across 12 months", "annualMismatch": "Annual total does not match the sum of monthly amounts", "clickToEdit": "Click to edit", "applyToMonth": "Apply to month", "allMonths": "All 12 months", "expenses": "Expenses", "income": "Income", "transfers": "Transfers", "totalExpenses": "Total Expenses", "totalIncome": "Total Income", "totalTransfers": "Total Transfers", "totalPlanned": "Total Planned", "totalActual": "Total Actual", "totalDifference": "Difference", "noCategories": "No categories found. Create categories first to set up your budget.", "saveAsTemplate": "Save as template", "applyTemplate": "Apply template", "noTemplates": "No templates saved yet.", "templateName": "Template name", "templateDescription": "Description (optional)", "directSuffix": "(direct)", "deleteTemplateConfirm": "Delete this template?", "help": { "title": "How to use Budget", "tips": [ "Use the year navigator to switch between years", "Click on any month cell to edit the planned amount — press Enter to save, Escape to cancel, Tab to move to next month", "The Annual column shows the total of all 12 months", "Use the split button to distribute the annual total evenly across all months", "Save your budget as a template and apply it to specific months or all 12 at once" ] } }, "reports": { "title": "Reports", "period": "Period", "byCategory": "Expenses by Category", "overTime": "Category Over Time", "trends": { "subviewGlobal": "Global flow", "subviewByCategory": "By category", "chartBar": "Bars", "chartArea": "Stacked area", "chartTypeAria": "Chart type" }, "budgetVsActual": "Budget vs Actual", "subtotalsOnTop": "Subtotals on top", "subtotalsOnBottom": "Subtotals on bottom", "detail": { "showAmounts": "Show amounts", "hideAmounts": "Hide amounts" }, "filters": { "title": "Categories", "search": "Search...", "all": "All", "none": "None", "allTypes": "All types" }, "bva": { "monthly": "Monthly", "ytd": "Year-to-Date", "dollarVar": "$ Var", "pctVar": "% Var", "noData": "No budget or transaction data for this period.", "titlePrefix": "Budget vs Actual for" }, "export": "Export", "month": "Month", "viewMode": { "chart": "Chart", "table": "Table" }, "hub": { "title": "Reports", "explore": "Explore", "highlights": "Highlights", "highlightsDescription": "What moved this month", "trends": "Trends", "trendsDescription": "Where you're heading over 12 months", "compare": "Compare", "compareDescription": "Compare a reference month against previous month, previous year, or budget", "categoryZoom": "Category Analysis", "categoryZoomDescription": "Zoom in on a single category", "cartes": "Cards", "cartesDescription": "KPI dashboard with sparklines, top movers, budget adherence, and seasonality" }, "compare": { "modeActual": "Actual vs actual", "modeBudget": "Actual vs budget", "subModeMoM": "Previous month", "subModeYoY": "Previous year", "subModeAria": "Comparison period", "referenceMonth": "Reference month", "currentAmount": "Current", "previousAmount": "Previous", "totalRow": "Total" }, "cartes": { "kpiSectionAria": "Key indicators for the reference month", "income": "Income", "expenses": "Expenses", "net": "Net balance", "savingsRate": "Savings rate", "savingsRateTooltip": { "month": "Formula: (income − expenses) ÷ income × 100, computed on the reference month.", "ytd": "Formula: (YTD income − YTD expenses) ÷ YTD income × 100, cumulative from January 1st." }, "periodMode": { "month": "Monthly", "ytd": "YTD", "aria": "Period" }, "deltaMoMLabel": "vs last month", "deltaYoYLabel": "vs last year", "flowChartTitle": "Income vs expenses — last 12 months", "topMoversUp": "Biggest increases", "topMoversDown": "Biggest decreases", "budgetAdherenceTitle": "Budget adherence", "budgetAdherenceSubtitle": "{{score}} of budgeted categories on target", "budgetAdherenceEmpty": "No budgeted categories this month", "budgetAdherenceWorst": "Worst overruns", "seasonalityTitle": "Seasonality", "seasonalityEmpty": "Not enough history for this month", "seasonalityAverage": "Average", "seasonalityDeviation": "{{pct}} vs average" }, "category": { "selectCategory": "Select a category", "searchPlaceholder": "Search a category…", "includeSubcategories": "Include subcategories", "directOnly": "Direct only", "breakdown": "Total", "evolution": "Evolution", "transactions": "Transactions" }, "keyword": { "addFromTransaction": "Add as keyword", "dialogTitle": "New keyword", "willMatch": "Will also match", "nMatches_one": "{{count}} transaction matched", "nMatches_other": "{{count}} transactions matched", "applyAndRecategorize": "Apply and recategorize", "applyToHidden": "Also apply to {{count}} non-displayed transactions", "tooShort": "Minimum {{min}} characters", "tooLong": "Maximum {{max}} characters", "alreadyExists": "This keyword already exists for another category. Reassign?" }, "highlights": { "balances": "Balances", "netBalanceCurrent": "This month", "netBalanceYtd": "Year to date", "topMovers": "Top movers", "topTransactions": "Top recent transactions", "category": "Category", "previousAmount": "Previous", "currentAmount": "Current", "variationAbs": "Delta ($)", "variationPct": "Delta (%)", "vsLastMonth": "vs. last month", "windowDays30": "30 days", "windowDays60": "60 days", "windowDays90": "90 days" }, "empty": { "noData": "No data for this period", "importCta": "Import a statement" }, "help": { "title": "How to use Reports", "tips": [ "Switch between Trends, By Category, and Over Time views using the tabs", "Use the period selector to adjust the time range for all charts", "Monthly Trends shows your income and expenses over time", "Category Over Time tracks how spending in each category evolves" ] } }, "settings": { "title": "Settings", "version": "Version {{version}}", "updates": { "title": "Updates", "checkButton": "Check for updates", "checking": "Checking for updates...", "upToDate": "App is up to date", "available": "Version {{version}} available", "downloadButton": "Download and install", "downloading": "Downloading...", "readyToInstall": "Update ready to install", "installButton": "Install and restart", "installing": "Installing...", "error": "Update failed", "retryButton": "Retry", "releaseNotes": "What's New", "notEntitled": "Automatic updates are available with the Base edition. Activate a license to enable them." }, "dataManagement": { "title": "Data Management", "export": { "title": "Export", "modeLabel": "What to export", "modeTransactionsWithCategories": "Transactions with categories", "modeTransactionsOnly": "Transactions only", "modeCategoriesOnly": "Categories only", "formatLabel": "Format", "csvDisabledNote": "transactions only", "encryptLabel": "Encrypt with password", "passwordPlaceholder": "Password (min 8 characters)", "passwordConfirmPlaceholder": "Confirm password", "passwordTooShort": "Password must be at least 8 characters", "passwordMismatch": "Passwords do not match", "button": "Export", "success": "Export completed successfully" }, "import": { "title": "Import", "description": "Import data from a previously exported file. This will replace existing data.", "button": "Import from file", "passwordRequired": "This file is encrypted. Enter the password to decrypt it.", "passwordPlaceholder": "Password", "decrypt": "Decrypt", "confirmTitle": "Replace Data", "willDeleteLabel": "The following data will be deleted:", "willDeleteCategories": "All categories, suppliers, and keywords", "willDeleteTransactions": "All transactions and import history", "willDeleteAll": "All transactions, categories, suppliers, keywords, and import history", "willImportLabel": "The following data will be imported:", "countCategories": "{{count}} category(ies)", "countSuppliers": "{{count}} supplier(s)", "countKeywords": "{{count}} keyword(s)", "countTransactions": "{{count}} transaction(s)", "irreversibleWarning": "This action is irreversible. All existing data of the selected type will be permanently deleted and replaced.", "typeToConfirm": "Type \"{{word}}\" to confirm:", "confirmWord": "REPLACE", "replaceButton": "Replace Data", "success": "Import completed successfully", "tryAgain": "Try again" } }, "userGuide": { "title": "User Guide", "description": "Learn how to use all features of the app" }, "categoriesCard": { "title": "Category management", "description": "Organize your expenses and income the way you want.", "standardGuideTitle": "Standard category structure", "standardGuideDescription": "Browse the CPI taxonomy (read-only)", "migrateTitle": "Migrate to the standard structure", "migrateDescription": "Preview, back up and migrate in 3 steps", "restoreEntry": { "title": "Restore a backup", "description": "Roll back a previous category migration from its automatic backup" }, "restoreBanner": { "title": "Backup available", "description": "Your previous category structure is backed up until {{expiry}}. Restore it if the new structure does not suit you.", "cta": "Restore the backup", "dismiss": "Dismiss" }, "restoreModal": { "title": "Confirm restore", "subtitle": "Backup from {{date}}", "warning": "This action will replace ALL your current data with the backup content. This action is irreversible.", "filePath": "Backup file", "fileMissingTitle": "Backup file not found", "fileMissingHint": "The original backup file is no longer at its recorded location. Pick it manually to continue — it is usually in your Documents folder under Simpl-Resultat/backups/.", "pickFile": "Pick a backup file", "passwordLabel": "Profile PIN", "passwordHelp": "This backup is encrypted. Enter the PIN that was active at the time of the migration to decrypt it.", "cancel": "Cancel", "confirm": "Restore", "close": "Close", "retry": "Try again", "restoring": "Restoring your profile — do not close the application...", "errors": { "file_missing": "The backup file was not found at the recorded location.", "read_failed": "The backup file could not be read.", "parse_failed": "The backup file could not be parsed. It may be corrupted.", "wrong_envelope_type": "This file is not a full pre-migration backup.", "no_recorded_migration": "No migration has been recorded on this profile.", "needs_password": "This backup is encrypted — a PIN is required.", "wrong_password": "Incorrect PIN. The backup could not be decrypted.", "import_failed": "The restore failed while rewriting your profile. Please try again." } } }, "logs": { "title": "Logs", "clear": "Clear", "copy": "Copy", "copied": "Copied!", "empty": "No logs", "filterAll": "All" }, "dataSafeNotice": "Your data is safe — only the app binary is replaced, your database is not modified.", "help": { "title": "About Settings", "tips": [ "Check for app updates and install them directly from this page", "Your data is stored locally and is never affected by updates", "Change the app language using the language selector in the sidebar" ] } }, "charts": { "hideCategory": "Hide category", "viewTransactions": "View transactions", "hiddenCategories": "Hidden", "showAll": "Show all", "total": "Total", "transactions": "transactions", "clickToShow": "Click to show" }, "months": { "jan": "Jan", "feb": "Feb", "mar": "Mar", "apr": "Apr", "may": "May", "jun": "Jun", "jul": "Jul", "aug": "Aug", "sep": "Sep", "oct": "Oct", "nov": "Nov", "dec": "Dec" }, "docs": { "title": "User Guide", "backToSettings": "Back to Settings", "print": "Print", "features": "Features", "howTo": "How To", "quickStart": "Quick Start", "tipsHeader": "Tips", "gettingStarted": { "title": "Getting Started", "overview": "Simpl'Result helps you track your personal finances by importing bank statements, categorizing transactions, setting budgets, and generating reports. The app is available on Windows and Linux.", "features": [ "Import CSV bank statements from multiple sources", "Automatic and manual transaction categorization", "Split a transaction across multiple categories", "Budget planning with monthly and annual views", "Visual reports and interactive charts with context menu", "Multiple profiles with separate databases and optional PIN", "Dark mode with warm gray palette", "Data export and import with optional AES-256 encryption" ], "steps": [ "On first launch, choose or create a profile — each profile has its own database", "Go to Settings and set your import folder — create one subfolder per bank account", "Place your CSV bank statements in the corresponding subfolder", "Open the Import page and configure your source (column mapping, delimiter, date format)", "Import your transactions, then head to Categories to set up keyword rules", "Use Auto-categorize on the Transactions page to apply your rules in bulk", "Set up your Budget and track progress via Reports" ], "tips": [ "You can switch between English and French using the language selector in the sidebar", "Toggle dark mode using the button in the sidebar", "Each page has a help icon (?) in the header with quick tips", "Your data is stored locally on your computer — nothing is sent to the cloud" ] }, "profiles": { "title": "Profiles", "overview": "Manage multiple independent profiles, each with its own database. Ideal for separating personal and business finances, or for multiple users on the same computer.", "features": [ "Create multiple profiles with custom names and colors", "Each profile has its own separate database", "Optional PIN protection (numeric code)", "Quick profile switching from the sidebar", "Delete a profile along with all its data" ], "steps": [ "Click the profile selector in the sidebar to see available profiles", "Click Manage Profiles to create, edit, or delete profiles", "Create a new profile by choosing a name, color, and optional PIN", "Switch between profiles by clicking the one you want in the selector" ], "tips": [ "A default profile is automatically created on first launch", "The PIN is requested each time you access a protected profile", "Deleting a profile permanently removes all its data — this action cannot be undone" ] }, "dashboard": { "title": "Dashboard", "overview": "The Dashboard gives you an at-a-glance summary of your financial situation for a selected time period.", "features": [ "Balance, income, and expense summary cards", "Expense breakdown by category (pie chart with SVG patterns)", "Budget vs Actual table for the current month (variance in $ and %)", "Stacked bar chart of expenses by category and month", "Adjustable time period selector (default: year to date)", "Context menu (right-click) to hide a category or view its transactions" ], "steps": [ "Use the period selector in the top-right to choose a time range (month, 3 months, year, etc.)", "Review the summary cards for your balance, total income, and total expenses", "Check the pie chart to see how your spending is distributed across categories", "Review the Budget vs Actual table to compare your spending against your plan for the current month", "Analyze the stacked bar chart at the bottom to see expense trends by category over time", "Right-click a category in a chart to hide it or view its transaction details" ], "tips": [ "The default period is year to date for an annual overview when you open the app", "The balance is calculated as income minus expenses for the selected period", "Hidden categories appear as dismissible chips above the chart — click Show All to restore them", "SVG patterns (lines, dots, crosshatch) help distinguish categories beyond just color" ] }, "import": { "title": "Import", "overview": "Import bank statements from CSV files using a step-by-step wizard. Each bank account is represented as a source folder.", "features": [ "Multi-step import wizard with data preview", "Configurable column mapping, delimiter, and date format", "Automatic duplicate detection (within batch and against existing data)", "Import templates to save and reuse source configurations", "Import history with the ability to delete past imports" ], "steps": [ "Set your import folder via the folder picker at the top of the page", "Create a subfolder for each bank/source and place CSV files inside", "Click on a source to open the import wizard", "Configure the delimiter, encoding, date format, and column mapping", "Select which files to import and preview the parsed data", "Check for duplicates, review the summary, then confirm the import" ], "tips": [ "Save your configuration as a template so you don't have to reconfigure each time", "Files already imported are marked with a badge — re-importing them will trigger duplicate detection", "You can delete an import from the history to remove all its transactions" ] }, "transactions": { "title": "Transactions", "overview": "Browse, filter, sort, and categorize all your imported transactions. This is where you organize your financial data.", "features": [ "Search and filter by description, category, source, or date range", "Quick period selectors (this month, last month, this year, etc.)", "Sortable columns (date, description, amount, category)", "Inline category assignment via dropdown", "Auto-categorize based on keyword rules", "Add keywords directly from a transaction", "Split a transaction across multiple categories", "Transaction notes" ], "steps": [ "Use the filter bar to narrow down transactions by text, category, source, or date", "Click a column header to sort ascending or descending", "To categorize a transaction, click its category dropdown and select a category", "To auto-categorize all uncategorized transactions, click the Auto-categorize button", "To add a keyword rule from a transaction, click the + icon and enter the keyword", "To split a transaction across categories, use the Split button and add amounts per category" ], "tips": [ "Use the quick period buttons (This month, Last month, etc.) for fast date filtering", "Auto-categorize only affects uncategorized transactions — it won't overwrite manual assignments", "Adding a keyword from a transaction pre-fills the category so you can quickly build rules", "Split transactions display a visual indicator and show the breakdown details" ] }, "categories": { "title": "Categories", "overview": "Manage your category tree with subcategories, keyword rules for auto-categorization, and custom colors.", "features": [ "Hierarchical categories with parent/child relationships", "Three category types: Expense, Income, Transfer", "Keyword rules with priority levels for auto-categorization", "Custom colors for chart display", "Drag-and-drop to reorder categories or change their parent", "Toggle categories as inputable or non-inputable", "All Keywords view to see all rules at a glance", "Re-initialize categories to defaults" ], "steps": [ "Click Add Category to create a new category — choose a name, type, and optional parent", "Select a category in the tree to view its details and keyword list", "Drag and drop a category in the tree to reorder it or move it under a different parent", "Add keywords that match transaction descriptions for auto-categorization", "Set keyword priority to resolve conflicts when multiple categories match", "Use the color picker to assign a custom color for charts" ], "tips": [ "Non-inputable categories are hidden from budget and transaction dropdowns but still visible in reports", "Higher priority keywords win when multiple categories match the same transaction", "Use the All Keywords view to get a global overview of your categorization rules", "Use Re-initialize to reset categories to defaults — this will unlink all transaction categories" ] }, "adjustments": { "title": "Adjustments", "overview": "Add manual entries that don't come from bank imports, and view transaction splits created from the Transactions page.", "features": [ "Create named adjustment groups with multiple entries", "Assign a category to each entry", "Mark adjustments as recurring", "View transaction splits in a dedicated section" ], "steps": [ "Click New Adjustment to create an adjustment group", "Add entries with a description, amount, date, and category", "Toggle the recurring flag if the adjustment should repeat each period", "View the Transaction Splits section to see splits created from the Transactions page" ], "tips": [ "Adjustments appear in your budget actuals alongside imported transactions", "Use adjustments for planned expenses that haven't hit your bank account yet", "Transaction splits are created from the Transactions page and appear here automatically" ] }, "budget": { "title": "Budget", "overview": "Plan your monthly budget for each category and track planned vs. actual spending throughout the year.", "features": [ "Monthly budget grid for all categories", "Annual column with automatic totals", "Split annual amount evenly across 12 months", "Budget templates to save and apply configurations", "Parent category subtotals", "Column headers stay fixed when scrolling vertically" ], "steps": [ "Use the year navigator to select the budget year", "Click on any month cell to enter a planned amount", "Press Enter to save, Escape to cancel, or Tab to move to the next month", "Use the split button (on the Annual column) to distribute evenly across all months", "Save your budget as a template to reuse it in future years" ], "tips": [ "The Annual column auto-sums all 12 months — a warning appears if monthly totals don't match", "Templates can be applied to specific months or all 12 at once", "Parent categories show subtotals aggregated from their children" ] }, "reports": { "title": "Reports", "overview": "A hub with a live highlights panel plus four dedicated sub-reports (Highlights, Trends, Compare, Category Zoom). Every page shares a bookmarkable period via the URL query string.", "features": [ "Hub: compact highlights panel + 4 navigation cards", "Highlights: current month and YTD balances with sparklines, top movers vs. last month, top recent transactions (30/60/90 day window)", "Cartes: single-month KPI dashboard (income, expenses, net, savings rate) with a Monthly/YTD toggle, 13-month sparklines, top movers, budget adherence, and seasonality", "Trends: global flow (income vs. expenses) and by-category evolution with a chart/table toggle", "Compare: Month vs. Previous Month, Year vs. Previous Year, and Actual vs. Budget", "Category Zoom: single-category drill-down with donut, monthly evolution, and filterable transaction table; auto-rollup of subcategories", "Contextual keyword editing: right-click a transaction row to add its description as a keyword with a live preview of the matches", "SVG patterns (lines, dots, crosshatch) to distinguish categories", "View mode preference (chart vs. table) persisted per report section" ], "steps": [ "Open /reports to see the highlights panel and four navigation cards", "Adjust the period with the period selector — it is mirrored in the URL and shared with every sub-report", "Click a card or a sub-route link to open the corresponding report", "On /reports/cartes, pick a reference month then toggle Monthly vs. YTD to flip the 4 KPI cards between the month and the year-to-date cumulative view — the choice is persisted", "Toggle chart vs. table on any sub-report — your choice is remembered", "Right-click any transaction row in the category zoom, highlights list, or transactions page to add a keyword", "In the keyword dialog, review the preview of matching transactions and confirm to apply" ], "tips": [ "Copy the URL to share a specific period + report state", "Keywords must be 2–64 characters long", "The Category Zoom is protected against malformed category trees: a parent_id cycle cannot freeze the app", "On /reports/cartes in YTD mode, the MoM delta for January is always \"—\" (no prior YTD window inside the same year), and the savings rate stays \"—\" when YTD income is zero", "Seasonality, top movers, and budget adherence stay monthly even when the toggle is set to YTD — only the 4 KPI numbers change" ] }, "balance": { "title": "Balance Sheet", "overview": "The Balance Sheet is a net-worth view: you periodically enter a dated snapshot of all your accounts (cash, RRSP, TFSA, funds, stocks, crypto, other), track their evolution over time, and compute the true return of each investment account by linking transfers (deposits/withdrawals) to the matching accounts.", "features": [ "7 standard categories pre-installed (Cash, TFSA, RRSP, Fund, Stock, Crypto, Other) — renameable, non-deletable", "Custom category creation with simple (direct amount) or priced (quantity × unit price) kind", "Accounts per category: name, optional symbol, currency (CAD at MVP), notes", "Dated snapshots with a UNIQUE constraint per date — editing means revisiting the same date, never duplicating", "\"Prefill from previous snapshot\" button: copies simple values + priced quantities", "Linking existing transactions to a balance account (modal with filters and auto-suggested direction)", "Attribution icon in the Transactions page for transactions linked to a transfer", "Evolution chart with line or stacked-area-by-category mode + vertical markers for tagged transfers (green = in, red = out)", "Accounts table with 3 Modified Dietz return columns (3M / 1Y / since inception) + side-by-side unadjusted return column", "Warning if the latest snapshot is more than 60 days old", "Soft-delete of accounts (Archive) — hidden from new snapshots, preserved in history", "Snapshot deletion with double-confirmation by retyping the date", "Privacy-first: everything stays local, no outbound calls at MVP" ], "steps": [ "Go to /balance/accounts → Categories tab to create an extra category if needed (RRIF as simple, or Stocks Wealthsimple as priced)", "Go to the Accounts tab to create each account (TFSA Tangerine under TFSA, BTC Ledger under Crypto with symbol BTC)", "Click \"+ New snapshot\" from /balance to open /balance/snapshot at today's date", "Fill in values per account (grouped by category). For priced accounts, enter quantity and unit price — value is computed", "Save. The chart on /balance refreshes immediately", "To compute the real return of an investment account, open the actions menu → \"Link transfers\" → check the transactions matching deposits/withdrawals — direction (in/out) is auto-proposed", "The accounts table now shows Modified Dietz returns over 3M / 1Y / since inception, side-by-side with the unadjusted return", "To edit an existing snapshot, click its point on the chart or use the date picker — the page opens in edit mode (date is immutable)", "To delete a snapshot, click \"Delete\" in its editor and retype the date to confirm" ], "tips": [ "Take snapshots on a regular cadence (monthly or quarterly) — return quality depends on regularity", "The unadjusted return on the right shows \"account value\" vs \"true performance\": the difference comes from contributions, not from performance", "Vertical chart markers help you read value jumps: a jump followed by a green marker isn't \"performance\", it's a deposit", "If you try to delete a transaction linked to a balance account, the app asks you to unlink it first — this friction preserves the reproducibility of past returns", "The \"balance out of date\" warning appears if your latest snapshot is more than 60 days old", "(Coming in Phase 5) Automatic price fetching for Stocks/Crypto via a private proxy (premium-only) that anonymizes your request — manual entry remains always available" ] }, "settings": { "title": "Settings", "overview": "Configure app preferences, check for updates, access the user guide, and manage your data with export/import tools.", "features": [ "App version display", "Complete user guide accessible directly from settings", "Automatic update checker with one-click install", "Application logs viewable with level filters, copy, and clear", "Data export (transactions, categories, or both) in JSON or CSV format", "Data import from a previously exported file", "Optional AES-256-GCM encryption for exported files", "Optional feedback submission to feedback.lacompagniemaximus.com (explicit exception to the 100% local operation — prompts for consent)" ], "steps": [ "Click User Guide to access the full documentation", "Click Check for Updates to see if a new version is available", "View the Logs section to see application logs — filter by level (All, Error, Warn, Info), copy or clear", "Use the Data Management section to export or import your data", "When exporting, choose what to include and optionally set a password for encryption", "When importing, select a previously exported file — encrypted files will prompt for the password", "Click Send feedback in the Logs section to share a suggestion, comment, or issue — the identify and context/logs checkboxes are unchecked by default" ], "tips": [ "Updates only replace the app binary — your database is never modified", "Change the app language using the language selector in the sidebar", "Export regularly to keep a backup of your data", "The user guide can be printed or exported to PDF via the Print button", "Logs persist for the session — they survive a page refresh", "If you encounter an issue, copy the logs and attach them to your report", "Feedback is the only feature that talks to a server besides updates and Maximus sign-in — every submission is explicit, no automatic telemetry" ] } }, "profile": { "title": "Profiles", "select": "Select a profile", "create": "Create Profile", "edit": "Edit Profile", "delete": "Delete Profile", "deleteConfirm": "Delete this profile and all its data? This cannot be undone.", "name": "Profile Name", "namePlaceholder": "Enter a name...", "color": "Color", "pin": "PIN", "pinSet": "PIN set", "pinNotSet": "No PIN", "setPin": "Set PIN", "removePin": "Remove PIN", "enterPin": "Enter your PIN", "wrongPin": "Wrong PIN. Try again.", "switchProfile": "Switch Profile", "manageProfiles": "Manage Profiles", "default": "Default" }, "error": { "title": "An error occurred", "startupTimeout": "Database connection timed out", "unexpectedError": "An unexpected error occurred", "showDetails": "Show details", "hideDetails": "Hide details", "refresh": "Refresh", "checkUpdate": "Check for updates", "updateAvailable": "Update available: v{{version}}", "upToDate": "The application is up to date", "updateNotEntitled": "Automatic updates are available with the Base edition.", "contactUs": "Contact us", "contactEmail": "Send an email to", "reportIssue": "Report an issue" }, "common": { "save": "Save", "cancel": "Cancel", "delete": "Delete", "edit": "Edit", "add": "Add", "search": "Search", "filter": "Filter", "loading": "Loading...", "noResults": "No results", "confirm": "Confirm", "language": "Language", "total": "Total", "darkMode": "Dark mode", "lightMode": "Light mode", "close": "Close", "underConstruction": "Under construction", "back": "Back" }, "license": { "title": "License", "currentEdition": "Current edition", "expiresAt": "Expires on", "enterKey": "Enter a license key", "keyPlaceholder": "SR-BASE-...", "activate": "Activate", "purchase": "Buy Simpl'Result", "editions": { "free": "Free", "base": "Base", "premium": "Premium" }, "removeLicense": "Remove license", "machines": { "title": "Machines", "count": "{{count}}/{{limit}} machines activated", "activating": "Activating...", "activated": "Activated", "notActivated": "Not activated", "deactivate": "Deactivate", "deactivating": "Deactivating...", "activateError": "Activation failed", "thisMachine": "This machine", "noMachines": "No machines activated" } }, "account": { "title": "Maximus Account", "optional": "Optional", "description": "Sign in to access Premium features (web version, sync). The account is only required for Premium features.", "signIn": "Sign in", "signOut": "Sign out", "connected": "Connected", "tokenStore": { "fallback": { "title": "Tokens stored in plaintext fallback", "description": "Your authentication tokens are currently stored in a local file protected by filesystem permissions. For stronger protection via the OS keychain, make sure a keyring service is running (GNOME Keyring, KWallet, or equivalent)." } } }, "feedback": { "button": "Send feedback", "logsHeading": "Recent logs:", "dialog": { "title": "Your feedback", "placeholder": "Describe your suggestion, comment, or issue...", "submit": "Send", "sending": "Sending...", "cancel": "Cancel" }, "checkbox": { "context": "Include navigation context (page, theme, viewport, version)", "logs": "Include recent error logs", "identify": "Identify me with my Maximus account" }, "toast": { "success": "Thank you for your feedback", "error": { "429": "Too many feedbacks sent recently. Try again later.", "400": "Invalid feedback. Check the content.", "generic": "Error while sending. Try again later." } }, "consent": { "title": "Feedback submission", "body": "Your feedback will be sent to feedback.lacompagniemaximus.com so we can improve the app. This requires an internet connection and is an exception to the app's 100% local operation.", "accept": "I agree" } }, "categoriesSeed": { "revenus": { "root": "Income", "emploi": { "root": "Employment", "paie": "Regular paycheque", "primes": "Bonuses & premiums", "autonome": "Self-employment" }, "gouvernemental": { "root": "Government", "remboursementImpot": "Tax refund", "allocations": "Family allowances", "credits": "GST/QST credits", "assuranceEmploi": "Employment insurance / QPIP" }, "placement": { "root": "Investment income", "interets": "Interest & dividends", "capital": "Capital gains", "locatifs": "Rental income" }, "autres": "Other income" }, "alimentation": { "root": "Food", "epicerie": { "root": "Groceries & markets", "reguliere": "Regular groceries", "boucherie": "Butcher & fishmonger", "boulangerie": "Bakery & pastry", "depanneur": "Convenience store", "marche": "Markets & specialty food" }, "restauration": { "root": "Dining out", "restaurant": "Restaurant", "cafe": "Coffee shop & quick bakery", "fastfood": "Fast food", "livraison": "Home delivery", "cantine": "Cafeteria" } }, "logement": { "root": "Housing", "habitation": { "root": "Primary residence", "loyer": "Rent", "hypotheque": "Mortgage", "taxes": "Municipal & school taxes", "copropriete": "Condo fees" }, "services": { "root": "Utilities", "electricite": "Electricity", "gaz": "Natural gas", "chauffage": "Heating (oil, propane)", "eau": "Water & sewer" }, "communications": { "root": "Communications", "internet": "Home internet", "mobile": "Mobile phone", "residentielle": "Landline phone", "streamingTv": "Cable & TV streaming" }, "entretien": { "root": "Maintenance & repairs", "general": "General maintenance", "renovations": "Renovations", "materiaux": "Materials & tools", "paysager": "Landscaping" }, "assurance": "Home insurance" }, "menage": { "root": "Household & furnishings", "ameublement": { "root": "Furnishings", "meubles": "Furniture", "electromenagers": "Appliances", "decoration": "Decoration" }, "fournitures": { "root": "Household supplies", "entretien": "Cleaning supplies", "literie": "Bedding & linens", "vaisselle": "Dishes & utensils" }, "services": { "root": "Domestic services", "nettoyage": "Cleaning services", "buanderie": "Laundry & dry cleaning" } }, "vetements": { "root": "Clothing & footwear", "adultes": "Adult clothing", "enfants": "Children's clothing", "chaussures": "Footwear", "accessoires": "Accessories & jewelry" }, "transport": { "root": "Transportation", "vehicule": { "root": "Personal vehicle", "achat": "Vehicle purchase / lease", "essence": "Gasoline", "entretien": "Auto maintenance & repairs", "immatriculation": "Registration & licence", "stationnement": "Parking & tolls", "assurance": "Auto insurance" }, "public": { "root": "Public transit", "autobus": "Bus & subway", "train": "Commuter train", "taxi": "Taxi & ride-sharing" }, "voyages": { "root": "Long-distance travel", "avion": "Air travel", "trainAutocar": "Train & coach", "hebergement": "Lodging", "location": "Travel car rental" } }, "sante": { "root": "Health & personal care", "medicaux": { "root": "Medical care", "pharmacie": "Pharmacy", "consultations": "Medical consultations", "dentiste": "Dentist & orthodontist", "optometrie": "Optometry & eyewear", "therapies": "Therapies (physio, psych, etc.)", "assurance": "Supplemental health insurance" }, "personnels": { "root": "Personal care", "coiffure": "Haircare & esthetics", "soins": "Personal care products" }, "assuranceVie": "Life & disability insurance" }, "loisirs": { "root": "Leisure, education & reading", "divertissement": { "root": "Entertainment", "cinema": "Cinema & shows", "jeux": "Video games & consoles", "streamingVideo": "Video streaming", "streamingMusique": "Music & audio streaming", "jouets": "Toys & hobbies" }, "sports": { "root": "Sports & outdoors", "abonnements": "Sports memberships", "equipement": "Sports equipment", "parcs": "Parks & outdoor activities" }, "formation": { "root": "Education & training", "scolarite": "Tuition fees", "materiel": "School supplies", "cours": "Courses & certifications", "abonnements": "Professional subscriptions" }, "lecture": { "root": "Reading & media", "livres": "Books", "journaux": "Newspapers & magazines" }, "animaux": { "root": "Pets", "nourriture": "Pet food & supplies", "veterinaire": "Veterinarian" } }, "consommation": { "root": "Beverages, tobacco & cannabis", "alcool": "Alcohol (SAQ, microbreweries)", "cannabis": "Cannabis (SQDC)", "tabac": "Tobacco" }, "finances": { "root": "Finances & obligations", "fraisBancaires": { "root": "Bank fees", "compte": "Account fees", "interets": "Interest & credit fees", "change": "Currency exchange fees" }, "impots": { "root": "Taxes", "federal": "Federal income tax", "provincial": "Provincial income tax", "acomptes": "Instalment payments" }, "dons": { "root": "Donations & dues", "charite": "Charitable donations", "professionnelles": "Professional dues", "syndicales": "Union dues" }, "cadeaux": "Gifts", "cash": "Cash withdrawal", "divers": "Miscellaneous uncategorized purchases" }, "transferts": { "root": "Transfers & investments", "epargne": { "root": "Savings & investments", "reer": "RRSP", "celi": "TFSA", "reee": "RESP", "nonEnregistre": "Non-registered account", "urgence": "Emergency fund" }, "dette": { "root": "Debt repayment", "carteCredit": "Credit card payment", "etudiant": "Student loan repayment", "personnel": "Personal loan repayment" }, "internes": "Internal transfers" }, "guidePage": { "title": "Standard categories guide", "subtitle": "Based on the Statistics Canada CPI classification", "backToSettings": "Back to settings", "intro": { "title": "Why this structure?", "body": "Statistics Canada's official household expenditure classification (CPI basket) identifies the main budget components of a Canadian household. This structure covers the full range of financial flows of a typical Quebec household, makes it easier to benchmark against external references, and produces clearer reports." }, "counter": "{{roots}} root categories · {{subcategories}} subcategories · {{leaves}} leaves · {{total}} categories in total", "searchPlaceholder": "Search a category...", "expandAll": "Expand all", "collapseAll": "Collapse all", "print": "Export as PDF", "printHint": "Use the print dialog to save as PDF.", "noResults": "No category matches your search.", "tooltip": { "key": "i18n key", "type": "Type", "id": "Identifier" }, "type": { "income": "Income", "expense": "Expense", "transfer": "Transfer" }, "legend": { "title": "Legend", "root": "Root category", "subcategory": "Subcategory", "leaf": "Leaf (final category)" } }, "migration": { "customParent": "Custom categories (migration)", "pageTitle": "Migrate to the standard structure", "pageSubtitle": "Three steps: discover, simulate, consent. No data is changed until the final step.", "backToSettings": "Back to settings", "stepper": { "ariaLabel": "Migration progress", "discover": "Discover", "simulate": "Simulate", "consent": "Consent" }, "alreadyMigrated": { "title": "Your profile already uses the standard structure", "body": "No migration needed. If you recently migrated, you can review the backup from Settings." }, "discover": { "title": "Step 1 · Discover the new structure", "subtitle": "Take your time to explore the tree. You can come back later without risk.", "intro": { "title": "Why this structure?", "body": "Statistics Canada's official household expenditure classification (CPI basket) identifies the main budget components of a Canadian household. It covers 100% of the financial flows of a typical Quebec household and produces clearer reports." }, "next": "Continue to migration preview" }, "simulate": { "title": "Step 2 · Migration preview", "subtitle": "Dry-run — no writes. Click a row to see affected transactions and, if needed, pick a different target.", "loadError": "Failed to load profile data: {{error}}", "needsReview": "Needs review", "chooseTarget": "Choose a target...", "txCount_one": "{{count}} transaction", "txCount_other": "{{count}} transactions", "unresolvedWarning_one": "You have {{count}} decision to make before you can continue.", "unresolvedWarning_other": "You have {{count}} decisions to make before you can continue.", "header": { "current": "Current category", "match": "Match", "target": "Proposed v1 target" }, "confidence": { "high": "High", "medium": "Medium", "low": "Low", "none": "Needs review" }, "reason": { "keyword": "Keyword-based", "supplier": "Supplier-based", "default": "Default mapping", "review": "Manual review required", "preserved": "Preserved" }, "stats": { "total": "Total" }, "preserved": { "title_one": "{{count}} custom category preserved", "title_other": "{{count}} custom categories preserved", "body": "Your custom categories will be grouped under the parent \"Custom categories (migration)\". You can move or rename them at your own pace after the migration.", "txCount_one": "{{count}} transaction", "txCount_other": "{{count}} transactions" }, "panel": { "title": "Affected transactions", "subtitle_one": "{{count}} transaction attached to this category", "subtitle_other": "{{count}} transactions attached to this category", "close": "Close panel", "noTransactions": "No transaction attached to this category.", "overflow_one": "... and {{count}} more transaction", "overflow_other": "... and {{count}} more transactions", "willMapTo": "Will be reassigned to: {{target}}", "noTarget": "No target chosen — a decision is required." }, "back": "Back to discovery", "next": "All decisions made · Continue" }, "consent": { "title": "Step 3 · Confirmation and backup", "subtitle": "An encrypted copy of your profile will be created BEFORE any change. You can restore it at any time.", "backup": { "title": "Automatic backup before migration", "body": "Simpl'Résultat creates a verified copy of your profile inside your Documents folder. The filename includes the date and time — nothing leaves your device.", "location": "Location: ~/Documents/Simpl-Resultat/backups/" }, "password": { "label": "Profile PIN", "help": "Your PIN is used to encrypt the backup (AES-256-GCM). It never leaves your device." }, "checklist": { "title": "Confirm that:", "item1": "I understand this operation permanently modifies my categories.", "item2": "I confirm a verified backup will be created before any change.", "item3": "I can restore the backup at any time during 90 days." }, "back": "Back", "confirm": "Create backup and migrate" }, "running": { "title": "Migration in progress...", "subtitle": "Do not close the application until the operation finishes.", "step1": "Step 1 · Creating the backup", "step2": "Step 2 · Verifying the backup (SHA-256 checksum)", "step3": "Step 3 · Applying the migration (SQL transaction)", "step4": "Step 4 · Committing and refreshing" }, "success": { "title": "Migration successful", "subtitle": "Your profile now uses the standard structure (Statistics Canada CPI).", "backupLabel": "Your backup is here:", "restoreHint": "You can restore this backup at any time from Settings > Categories for 90 days.", "stats": { "inserted": "Categories added", "transactions": "Transactions migrated", "keywords": "Keywords migrated", "budgets": "Budgets migrated" }, "backToDashboard": "Go to dashboard", "viewCategories": "View my categories" }, "error": { "title": "The migration could not be applied", "subtitle": "No change was saved. Your profile is in the exact same state as before the operation.", "rollbackNote": "If a partial backup was created, it stays available in your Documents folder — you can delete it manually if it is not useful.", "retry": "Back to consent step", "backToSettings": "Back to settings", "backup": { "missing_password": "Missing PIN — backing up a protected profile requires the PIN.", "documents_dir_unavailable": "Unable to locate the Documents folder.", "permission_denied": "Insufficient permissions to write in the backup folder.", "disk_space": "Not enough disk space to create the backup.", "create_dir_failed": "Unable to create the backup folder.", "write_failed": "Failed to write the backup file.", "read_back_failed": "Unable to read the backup file back for verification.", "verification_mismatch": "Backup verification failed (invalid checksum or corrupted file)." } } } }, "balance": { "overview": { "title": "Balance sheet", "latestTotal": "Current net worth", "asOf": "as of {{date}}", "noSnapshots": "No snapshot yet. Create one to start tracking your balance over time.", "vsPrevious": "vs previous", "newSnapshot": "New snapshot", "staleWarning": "The latest snapshot is more than {{days}} days old. Consider updating it to keep your balance accurate.", "latestValue": "Latest value", "periodDelta": "Δ% over period", "noAccounts": "No active accounts. Create a balance account to get started.", "accountsTitle": "Accounts", "detailAction": "Details", "detailComingSoon": "Available in a future release." }, "period": { "legend": "Analysis period", "3M": "3 months", "6M": "6 months", "1A": "1 year", "3A": "3 years", "all": "All" }, "chart": { "empty": "No snapshot for this period.", "modeLegend": "Chart display mode", "totalSeriesLabel": "Total", "mode": { "line": "Line", "stacked": "Stacked by category" } }, "sidebar": "Balance sheet", "accountsPage": { "title": "Balance accounts", "tabs": { "accounts": "Accounts", "categories": "Categories" }, "newAccount": "New account", "includeArchived": "Show archived accounts", "empty": "No accounts yet. Click “New account” to start." }, "account": { "fields": { "name": "Name", "category": "Category", "symbol": "Symbol", "currency": "Currency", "status": "Status", "actions": "Actions" }, "status": { "active": "Active", "archived": "Archived" }, "actions": { "archive": "Archive", "unarchive": "Restore" }, "form": { "createTitle": "New account", "editTitle": "Edit account", "category": "Category", "noCategory": "(no category available)", "name": "Account name", "nameRequired": "Name is required.", "symbol": "Symbol", "symbolPricedHint": "required for priced categories", "symbolRequiredForPriced": "A symbol is required for priced categories.", "symbolPlaceholderSimple": "Optional", "symbolPlaceholderPriced": "e.g. AAPL, BTC-USD", "notes": "Notes", "currencyMvpNotice": "At the MVP, all accounts are in CAD. Multi-currency support will land in a later version.", "save": "Save", "create": "Create account" } }, "category": { "intro": "Seeded categories (TFSA, RRSP, Cash, etc.) ship with the app. You can create your own for special cases.", "fields": { "name": "Name", "key": "Key", "kind": "Kind", "origin": "Origin", "actions": "Actions" }, "kind": { "simple": "Direct amount", "priced": "Quantity × price" }, "origin": { "seeded": "Standard", "user": "Custom" }, "actions": { "create": "New category", "renamePrompt": "New label for this category", "deleteConfirm": "Delete this category? This cannot be undone.", "deleteSeedHint": "Standard categories cannot be deleted.", "deleteHasAccountsHint": "This category has {{count}} linked account(s) — archive or move them first." }, "form": { "createTitle": "New category", "key": "Key", "keyPlaceholder": "e.g. lira, prpp", "label": "Label", "labelPlaceholder": "e.g. LIRA, PRPP", "kindLabel": "Category kind", "kindHintSimple": "Direct value entry (e.g. checking-account balance).", "kindHintPriced": "Quantity × unit price entry (e.g. stocks, crypto). Linked accounts will require a symbol.", "simpleOnlyNotice": "Priced categories (stocks, crypto) will be available in a future release.", "create": "Create category" }, "error": { "has_accounts": "Cannot delete this category: {{count}} linked account(s) ({{names}}). Archive or move them first." }, "cash": "Cash", "tfsa": "TFSA", "rrsp": "RRSP", "fund": "Mutual fund", "other": "Other", "stock": "Stock", "crypto": "Crypto" }, "snapshot": { "page": { "newTitle": "New snapshot", "editTitle": "Edit snapshot", "dateLabel": "Snapshot date", "dateImmutable": "An existing snapshot date cannot be changed. To change the date, delete this snapshot and create a new one.", "total": "Entered total", "noAccounts": "You need to create at least one balance account first.", "goToAccounts": "Go to accounts", "prefill": "Prefill from previous", "prefillTooltip": "Copy values from the snapshot dated {{date}}", "prefillNoPrevious": "No earlier snapshot available.", "save": "Save", "create": "Create snapshot", "delete": "Delete this snapshot" }, "editor": { "empty": "No active accounts. Create an account before entering a snapshot." }, "line": { "valuePlaceholder": "0.00", "valueLabel": "Value for {{account}}" }, "priced": { "quantity": "Quantity", "quantityLabel": "Quantity for {{account}}", "quantityPlaceholder": "0", "unitPrice": "Unit price", "unitPriceLabel": "Unit price for {{account}}", "unitPricePlaceholder": "0.00", "computedValue": "Value (computed)", "computedValueLabel": "Computed value for {{account}}", "computedValuePlaceholder": "—", "attributionManual": "Manual", "attributionManualHint": "Value entered manually. Automatic price fetching will land in a later release." }, "delete": { "title": "Delete this snapshot?", "body": "This permanently deletes the snapshot dated {{date}} and all its lines. To confirm, retype the date below.", "confirmLabel": "Retype the date {{date}} to confirm", "confirm": "Delete permanently" } }, "errors": { "currency_unsupported": "Only CAD is supported at the MVP.", "category_seed_protected": "Standard categories cannot be deleted.", "category_has_accounts": "Cannot delete a category with linked accounts. Move or archive linked accounts first.", "category_not_found": "Category not found.", "account_not_found": "Account not found.", "name_required": "Name is required.", "kind_invalid": "Invalid category kind.", "snapshot_date_required": "A date in YYYY-MM-DD format is required.", "snapshot_date_taken": "A snapshot already exists at that date — edit it instead of creating a new one.", "snapshot_not_found": "Snapshot not found.", "snapshot_value_invalid": "An entered value is not a valid number.", "snapshot_priced_unsupported": "Priced accounts (stocks/crypto) will be supported in a future release.", "snapshot_priced_quantity_required": "Quantity is required for priced accounts.", "snapshot_priced_unit_price_required": "Unit price is required for priced accounts.", "snapshot_priced_value_mismatch": "The entered value does not match quantity × unit price.", "snapshot_simple_must_be_scalar": "A simple value must not carry quantity or price." }, "returns": { "partialTooltip": "Partial return: a snapshot is missing for the selected period.", "noTransfersWarning": "No transfers tagged — performance may be skewed if contributions weren't tagged." }, "accountsTable": { "return3m": "3M", "return3mTooltip": "Modified Dietz return over the last 90 days.", "return1y": "1Y", "return1yTooltip": "Modified Dietz return over the last 365 days.", "sinceCreation": "Since inception", "sinceCreationTooltip": "Modified Dietz return since the first snapshot.", "unadjusted": "Unadjusted", "unadjustedTooltip": "Simple return (V_end − V_start) / V_start, with no contribution weighting." }, "transfers": { "linkAction": "Link transfers", "direction": { "in": "In", "out": "Out" }, "modal": { "title": "Link transfers to {{account}}", "subtitle": "Select transactions to attribute to this balance account. The direction is suggested based on the amount sign.", "from": "From", "to": "To", "category": "Category", "anyCategory": "Any category", "search": "Search", "searchPlaceholder": "Keyword in description…", "loading": "Loading…", "noTransactions": "No transactions match the filters.", "direction": "Direction", "toggleDirection": "Click to flip direction", "summary": "{{selected}} selected of {{total}} shown", "linkSelection": "Link {{count}} transaction(s)", "linking": "Linking…", "partialFailure": "{{linked}}/{{total}} linked successfully" }, "errors": { "transfer_direction_invalid": "Invalid transfer direction (expected in/out).", "transfer_already_linked": "This transaction is already linked to this account.", "transfer_not_linked": "This transaction is not linked to this account.", "transfer_active_profile_unknown": "No active profile — cannot compute return.", "transaction_linked_to_balance_account": "This transaction is linked to balance account {{account}} — unlink it before deleting." } }, "evolution": { "transferIn": "In", "transferOut": "Out" } } }