Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixUI/hesabix_ui/lib/l10n/app_en.arb

7713 lines
379 KiB
Text
Executable file
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"@@locale": "en",
"appTitle": "Hesabix",
"login": "Login",
"username": "Username",
"password": "Password",
"submit": "Submit",
"loginFailed": "Login failed. Please try again.",
"homeWelcome": "Signed in successfully!",
"language": "Language",
"requiredField": "is required",
"register": "Register",
"forgotPassword": "Forgot password",
"firstName": "First name",
"lastName": "Last name",
"email": "Email",
"mobile": "Mobile number",
"registerSuccess": "Registration successful.",
"forgotSent": "Reset link sent to your email.",
"identifier": "Email or mobile",
"theme": "Theme",
"colorTheme": "Color theme",
"colorThemeDescription": "Choose a color palette applied across the whole app.",
"themeModeLabel": "Light / Dark mode",
"defaultColorTheme": "Default color theme",
"defaultColorThemeHint": "Applied for users who have not chosen a color theme yet.",
"themeClassicBlue": "Classic Blue",
"themeTurquoiseSea": "Turquoise Sea",
"themeEmeraldForest": "Emerald Forest",
"themeWarmCopper": "Warm Copper",
"system": "System",
"light": "Light",
"dark": "Dark",
"welcomeTitle": "Hesabix Cloud Accounting",
"welcomeSubtitle": "Smart, secure, and always available accounting for your business.",
"brandTagline": "Manage your finances anywhere, anytime with confidence.",
"authSignInTitle": "Sign in",
"authSignInSubtitle": "Enter your account details to continue.",
"authSignUpTitle": "Create account",
"authSignUpStepContactHint": "Enter your email or mobile number. At least one is required.",
"authForgotTitle": "Reset password",
"authForgotSubtitle": "Enter your account identifier to receive a reset code.",
"authNoAccount": "Do not have an account?",
"authHaveAccount": "Already have an account?",
"authOrDivider": "or",
"authBackToSignIn": "Back to sign in",
"authBackPreviousStep": "Previous step",
"authTrustCloud": "Cloud access from any device",
"authTrustEncrypted": "Your data is encrypted",
"authTrustSupport": "Support at every step",
"authStepContact": "Contact",
"authStepProfile": "Profile",
"authStepSecurity": "Security",
"authContinue": "Continue",
"authChannelUnavailable": "Unavailable",
"captcha": "Captcha",
"refresh": "Refresh"
,
"captchaRequired": "Captcha is required."
,
"acceptTermsPrefix": "I accept ",
"acceptTermsSuffix": "",
"privacyPolicy": "Privacy Policy",
"termsOfService": "Terms of Service",
"and": "and",
"acceptTermsRequired": "You must accept the Privacy Policy and Terms of Service to register.",
"sendReset": "Send reset code"
,
"registerFailed": "Registration failed. Please try again.",
"resetFailed": "Request failed. Please try again."
,
"fixFormErrors": "Please fix the form errors."
,
"dashboard": "Dashboard",
"profile": "Profile",
"settings": "Settings",
"logout": "Logout",
"logoutDone": "Signed out.",
"logoutConfirmTitle": "Sign out",
"logoutConfirmMessage": "Are you sure you want to sign out?",
"menu": "Menu"
,
"systemSettings": "System Settings",
"adminTools": "Admin Tools",
"emailSettings": "Email Settings",
"emailSettingsDescription": "Configure SMTP settings for email sending",
"emailConfigurations": "Email Configurations",
"noEmailConfigurations": "No email configurations found",
"addEmailConfiguration": "Add Email Configuration",
"configurationName": "Configuration Name",
"smtpHost": "SMTP Host",
"smtpPort": "SMTP Port",
"smtpUsername": "SMTP Username",
"smtpPassword": "SMTP Password",
"fromEmail": "From Email",
"fromName": "From Name",
"useTls": "Use TLS",
"useSsl": "Use SSL",
"isActive": "Active",
"active": "Active",
"testConnection": "Test Connection",
"sendTestEmail": "Send Test Email",
"saveConfiguration": "Save Configuration",
"deleteConfiguration": "Delete Configuration",
"deleteConfigurationConfirm": "Are you sure you want to delete this configuration?",
"delete": "Delete",
"invalidPort": "Invalid port",
"invalidEmail": "Invalid email",
"ok": "OK",
"cancel": "Cancel",
"columnSettings": "Column Settings",
"columnSettingsDescription": "Manage column visibility and order for this table",
"columnName": "Column Name",
"visibility": "Visibility",
"order": "Order",
"visible": "Visible",
"hidden": "Hidden",
"resetToDefaults": "Reset to Defaults",
"save": "Save",
"error": "Error"
,
"bulkDefaultWarehouseTitle": "Bulk default warehouse",
"bulkDefaultWarehouseAction": "Change default warehouse",
"bulkDefaultWarehouseNewWarehouseLabel": "New warehouse",
"bulkDefaultWarehouseClearOption": "Clear default warehouse (empty)",
"bulkDefaultWarehouseScopeLabel": "Apply scope (Policy):",
"bulkDefaultWarehouseScopeAll": "All selected",
"bulkDefaultWarehouseScopeTrackInventoryTrue": "Only inventory-tracked items (track_inventory=true)",
"bulkDefaultWarehouseScopeTrackInventoryFalse": "Only non-inventory items (track_inventory=false)",
"bulkDefaultWarehouseConfirmTitle": "Apply changes",
"bulkDefaultWarehouseConfirmMessage": "Are you sure you want to apply this default warehouse change to the selected items?",
"bulkDefaultWarehouseApplySuccess": "Done. Updated: {count}",
"@bulkDefaultWarehouseApplySuccess": {"placeholders": {"count": {"type": "String"}}},
"bulkDefaultWarehouseSelectedCount": "Selected items: {count}",
"@bulkDefaultWarehouseSelectedCount": {"placeholders": {"count": {"type": "int"}}},
"bulkDefaultWarehousePreviewSummary": "Requested: {total} | Found: {found} | Will update: {willUpdate}",
"@bulkDefaultWarehousePreviewSummary": {"placeholders": {"total": {"type": "String"}, "found": {"type": "String"}, "willUpdate": {"type": "String"}}},
"bulkDefaultWarehouseSkippedCount": "Skipped: {count}",
"@bulkDefaultWarehouseSkippedCount": {"placeholders": {"count": {"type": "int"}}},
"bulkDefaultWarehouseNotesLabel": "Notes:",
"bulkDefaultWarehouseForcedServiceNull": "Service items forced to null default warehouse: {count}",
"@bulkDefaultWarehouseForcedServiceNull": {"placeholders": {"count": {"type": "int"}}},
"bulkDefaultWarehouseApplySummary": "Requested: {total} | Found: {found} | Updated: {updated} | Skipped: {skipped}",
"@bulkDefaultWarehouseApplySummary": {"placeholders": {"total": {"type": "String"}, "found": {"type": "String"}, "updated": {"type": "String"}, "skipped": {"type": "String"}}},
"bulkDefaultWarehouseReasonAlreadySet": "Already set",
"bulkDefaultWarehouseReasonScopeMismatch": "Out of selected scope",
"bulkDefaultWarehouseReasonNotFound": "Not found",
"bulkDefaultWarehouseReasonServiceAlreadyNull": "Service item must have no default warehouse",
"bulkDefaultWarehouseReasonUnknown": "Unknown",
"newBusiness": "New business",
"businesses": "Businesses",
"deleteBusiness": "Delete Business",
"loanFacilities": "Loan facilities",
"loanFacilityReloadTooltip": "Reload",
"loanFacilitySearchTitlesLabel": "Search titles",
"loanFacilityEmptyState": "No contracts yet. Tap add to create one.",
"loanFacilityLoadMore": "Load more",
"loanFacilityValidationTitleRequired": "Title is required",
"loanFacilityValidationSelectCurrency": "Select a currency",
"loanFacilityValidationPrincipalInvalid": "Enter a valid principal amount",
"loanFacilityDialogNewTitle": "New contract",
"loanFacilityDialogEditTitle": "Edit contract",
"loanFacilityFieldTitle": "Title *",
"loanFacilityFieldCurrency": "Currency *",
"loanFacilityFieldCurrencyHint": "Choose currency",
"loanFacilityFieldPrincipal": "Principal *",
"loanFacilityFieldContractDate": "Contract date *",
"loanFacilityFieldContractDateHint": "Pick",
"loanFacilityFieldAnnualRate": "Annual rate (%)",
"loanFacilityFieldInstallmentCountOptional": "Installment count (optional)",
"loanFacilityFieldFirstInstallment": "First installment date",
"loanFacilityFieldFirstInstallmentHint": "Optional",
"loanFacilityFieldLenderBank": "Facility receipt/payment bank account",
"loanFacilityFieldNotes": "Notes",
"loanFacilityCurrencyId": "Currency #{id}",
"@loanFacilityCurrencyId": {
"placeholders": {
"id": {
"type": "String"
}
}
},
"loanFacilityConfirmDeleteDraftTitle": "Delete facility?",
"loanFacilityConfirmDeleteDraftBody": "If accounting constraints allow it, this facility, installments, payments, and linked vouchers will be removed.",
"loanFacilityDeleted": "Deleted",
"loanFacilityScheduleUpdated": "Schedule updated",
"loanFacilityDeletePaymentTitle": "Delete payment?",
"loanFacilityDeletePaymentBody": "Linked accounting voucher will be removed and installment balances will be rolled back.",
"loanFacilityPaymentDeleted": "Payment deleted",
"loanFacilityRecordPaymentTitle": "Record installment payment",
"loanFacilityAmount": "Amount",
"loanFacilityBankAccount": "Bank account",
"loanFacilityValidationAmountInvalid": "Enter a valid amount",
"loanFacilityValidationPickBank": "Pick a bank account",
"loanFacilityPaymentRecorded": "Payment recorded",
"loanFacilityRetry": "Retry",
"loanFacilityTooltipEdit": "Edit",
"loanFacilityTooltipDeleteDraft": "Delete facility",
"loanFacilityContractSummary": "Contract summary",
"loanFacilitySummaryStatus": "Status",
"loanFacilitySummaryCurrency": "Currency",
"loanFacilitySummaryPrincipal": "Principal",
"loanFacilitySummaryAnnualRate": "Annual rate",
"loanFacilitySummaryContractDate": "Contract date",
"loanFacilitySummaryFirstInstallment": "First installment",
"loanFacilitySummaryInstallmentCount": "Installments",
"loanFacilitySummaryScheduleMethod": "Schedule method",
"loanFacilitySummaryLenderBankId": "Facility bank account",
"loanFacilitySummaryNotes": "Notes",
"loanFacilityDisbursementDocument": "Facility receipt voucher",
"loanFacilityScheduleSection": "Schedule",
"loanFacilityRegenerateSchedule": "Generate / rebuild schedule",
"loanFacilityInstallmentLine": "Installment {seq} · {due}",
"@loanFacilityInstallmentLine": {
"placeholders": {
"seq": {
"type": "String"
},
"due": {
"type": "String"
}
}
},
"loanFacilityRemainingPrincipalInterest": "Rem. pr./int.: {principal} / {interest}",
"@loanFacilityRemainingPrincipalInterest": {
"placeholders": {
"principal": {
"type": "String"
},
"interest": {
"type": "String"
}
}
},
"loanFacilityRecordPayment": "Record payment",
"loanFacilityDocumentNumber": "Doc #{id}",
"@loanFacilityDocumentNumber": {
"placeholders": {
"id": {
"type": "String"
}
}
},
"loanFacilityViewVoucher": "View voucher",
"loanFacilityDeletePayment": "Delete payment",
"loanFacilityPaymentPostingHint": "If posting is enabled, standard system vouchers are created.",
"loanFacilityRegenerateValidationCount": "Enter a valid installment count",
"loanFacilityRegenerateValidationFirstDue": "First due date is required",
"loanFacilityRegenerateValidationDisburseBank": "Pick a bank account for facility receipt posting",
"loanFacilityRegenerateDialogTitle": "Installment schedule",
"loanFacilityRegenerateMethod": "Method",
"loanFacilityScheduleMethodAnnuity": "Annuity",
"loanFacilityScheduleMethodEqualPrincipal": "Equal principal",
"loanFacilityRegenerateCountRequired": "Installment count *",
"loanFacilityRegenerateFirstDueRequired": "First due *",
"loanFacilityRegenerateDisburseBank": "Facility receipt bank account",
"loanFacilityRegeneratePostAccounting": "Post facility receipt voucher",
"loanFacilityRegenerateApply": "Apply",
"apiErrorLoanFacilityFinancialLocked": "Financial details cannot be changed after scheduling or activating the contract.",
"apiErrorLoanFacilityNotDraft": "Only draft contracts can be deleted.",
"apiErrorLoanFacilityHasPayments": "This action is not allowed because payments already exist.",
"apiErrorLoanInvalidCurrency": "Currency is required or invalid.",
"apiErrorLoanInvalidPrincipal": "Principal must be a positive amount.",
"apiErrorLoanContractDateRequired": "Contract date is required or invalid.",
"apiErrorLoanInvalidScheduleMethod": "Schedule method must be annuity or equal principal.",
"apiErrorLoanInvalidInstallmentCount": "Installment count is required and must be at least 1.",
"apiErrorLoanFirstDueRequired": "First installment due date is required.",
"apiErrorLoanBadSchedulePayload": "Invalid installment count or due date.",
"apiErrorLoanBankRequiredAccounting": "A bank account is required to post the accounting voucher.",
"apiErrorLoanBankCurrencyMismatch": "The bank account currency must match the contract currency.",
"apiErrorLoanFacilityDraft": "Generate the installment schedule before recording payments.",
"apiErrorLoanInvalidAmount": "Amount is required and must be positive.",
"apiErrorLoanInvalidPaymentDate": "Payment date is invalid.",
"apiErrorLoanScheduleError": "Could not calculate the installment schedule.",
"apiErrorLoanInvalidBankAccount": "Bank account is missing or invalid.",
"apiErrorLoanInvalidRate": "Annual interest rate is invalid.",
"apiErrorLoanInvalidFirstInstallmentDate": "First installment date is invalid.",
"apiErrorLoanPaymentExceedsBalance": "Payment amount exceeds the remaining balance for this installment.",
"apiErrorLoanAllocationError": "The payment could not be applied correctly. Try a smaller amount or contact support.",
"apiErrorLoanFacilityNotFound": "This loan contract was not found.",
"apiErrorLoanInstallmentNotFound": "This installment was not found.",
"apiErrorLoanPaymentNotFound": "This payment record was not found.",
"apiErrorLoanFacilityMissingAfterCommit": "Something went wrong while saving the schedule. Refresh the page and try again.",
"apiErrorLoanPaymentAccountingFailed": "The accounting voucher for this payment could not be created.",
"apiErrorLoanChartAccountNotFound": "Required chart accounts for loan posting are missing. Contact support.",
"apiErrorLoanAccountingLinesUnbalanced": "Loan accounting totals do not balance. Contact support.",
"apiErrorLoanBankRequiredForPaymentDocument": "A bank account is required to register the accounting voucher.",
"deleteBusinessConfirmTypeInstruction": "To confirm, type DELETE in English or «حذف» in Persian, exactly as shown.",
"deleteBusinessConfirmTypeHint": "DELETE or حذف",
"invoiceLineItemsAddRowKeyboardHint": "Tab or Enter on the tax rate field of the last row adds a new line. Pick a quick shortcut from the keyboard icon. Outside text fields: Q then I.",
"invoiceLineItemsQuickShortcutMenuTooltip": "Choose add-row shortcut",
"invoiceLineItemsShortcutOptionF2": "F2 (default; web-friendly)",
"invoiceLineItemsShortcutOptionCtrlShiftN": "Ctrl+Shift+N (desktop)",
"invoiceLineItemsShortcutOptionNone": "Off",
"support": "Support",
"changePassword": "Change password",
"marketing": "Marketing"
,
"marketingReport": "Marketing report",
"today": "Today",
"thisMonth": "This month",
"total": "Total",
"dateFrom": "From date",
"dateTo": "To date",
"applyFilter": "Apply filter",
"copied": "Copied",
"copyLink": "Copy link",
"loading": "Loading...",
"currentPassword": "Current password",
"newPassword": "New password",
"confirmPassword": "Confirm new password",
"changePasswordSuccess": "Password changed successfully",
"changePasswordFailed": "Failed to change password. Please try again.",
"passwordsDoNotMatch": "New password and confirm password do not match",
"samePassword": "New password must be different from current password",
"invalidCurrentPassword": "Current password is incorrect",
"passwordChanged": "Password changed successfully",
"changePasswordDescription": "Enter your current password and choose a new secure password",
"changePasswordButton": "Change Password",
"passwordMinLength": "Password must be at least 8 characters",
"passwordMaxLength": "Password must not exceed 72 bytes (about 72 ASCII characters)",
"calendar": "Calendar",
"gregorian": "Gregorian",
"jalali": "Jalali",
"calendarType": "Calendar Type",
"dataLoadingError": "Error loading data",
"refresh": "Refresh",
"yourReferralLink": "Your referral link",
"filtersAndSearch": "Filters and search",
"hideFilters": "Hide filters",
"showFilters": "Show filters",
"clear": "Clear",
"searchInNameEmail": "Search in name, last name and email...",
"recordsPerPage": "Records per page",
"records": "records",
"installmentsReportTitle": "Installments report",
"installmentsFiltersFiscalYear": "Fiscal year",
"installmentsFiltersStatus": "Status",
"installmentsFiltersDueFrom": "Due date from",
"installmentsFiltersDueTo": "Due date to",
"installmentsFiltersPerson": "Person",
"installmentsFiltersPersonHint": "Search and select a person",
"installmentsFiltersInvoice": "Invoice",
"installmentsFiltersInvoiceHint": "Selected invoice number",
"installmentsFiltersInvoiceButton": "Select invoice",
"installmentsStatusAll": "All statuses",
"installmentsStatusPending": "Pending",
"installmentsStatusPartial": "Partially paid",
"installmentsStatusPaid": "Paid",
"installmentsStatusOverdue": "Overdue",
"installmentsSummaryPrincipal": "Principal total",
"installmentsSummaryInterest": "Interest total",
"installmentsSummaryTotal": "Grand total",
"installmentsSummaryPaid": "Paid total",
"installmentsSummaryRemaining": "Remaining total",
"installmentsSummaryLateFee": "Late fee total",
"installmentsFetchError": "Failed to load installments",
"installmentsExportError": "Export failed",
"installmentsExportWebOnly": "File download is only available on the web version",
"installmentsInvoicePickerTitle": "Select installment invoice",
"installmentsInvoicePickerSearchLabel": "Search by code, description...",
"installmentInvoicesLoadMore": "Load more",
"installmentInvoicesCount": "{count} installment invoice(s)",
"installmentsTableInvoice": "Invoice",
"installmentsTableInstallment": "Installment",
"installmentsTablePerson": "Person",
"installmentsTableDueDate": "Due date",
"installmentsTableStatus": "Status",
"installmentsTablePrincipal": "Principal",
"installmentsTableInterest": "Interest",
"installmentsTableTotal": "Total",
"installmentsTablePaid": "Paid",
"installmentsTableRemaining": "Remaining",
"installmentsTableLateFee": "Late fee",
"installmentsTableOverdueDays": "Overdue days",
"installmentsRowsPerPage": "Rows per page",
"installmentsViewPortfolios": "Installment files",
"installmentsViewFlat": "All installments",
"installmentsFiltersBucket": "Quick filter",
"installmentsBucketAll": "All",
"installmentsBucketUnpaid": "Unpaid (open)",
"installmentsBucketUpcoming": "Upcoming due dates",
"installmentsBucketOverdueOnly": "Overdue only",
"installmentsMinOverdueDaysLabel": "Min. overdue days",
"installmentsTableMobile": "Mobile",
"installmentsGroupedNextDue": "Next due",
"installmentsGroupedWorstStatus": "Worst status",
"installmentsGroupedInstallments": "Installments (matched)",
"installmentsGroupedPaidCount": "Paid",
"installmentsGroupedOverdueCount": "Overdue",
"installmentsGroupedRemainingSum": "Remaining (sum)",
"installmentsDetailTitle": "Installment plan",
"installmentsPaymentsColumn": "Receipts",
"installmentsNoPaymentsYet": "No receipt allocations yet",
"installmentsPaymentsDetailMissing": "Payment is recorded on this installment, but linked receipt rows could not be listed. Try reopening the dialog after saving receipts with installment allocation.",
"test": "Test",
"user": "User",
"showingRecords": "Showing {start} to {end} of {total} records",
"previousPage": "Previous page",
"nextPage": "Next page",
"pageOf": "{current} of {total}",
"referralList": "Referral List",
"dateRangeFilter": "Date Range Filter",
"columnSearch": "Column Search",
"searchInColumn": "Search in {column}",
"searchType": "Search Type",
"contains": "Contains",
"startsWith": "Starts With",
"endsWith": "Ends With",
"exactMatch": "Exact Match",
"searchValue": "Search Value",
"applyColumnFilter": "Apply Column Filter",
"clearColumnFilter": "Clear Column Filter",
"activeFilters": "Active Filters",
"selectDate": "Select Date",
"noDataFound": "No data found",
"marketingReportSubtitle": "Manage and analyze user referrals",
"showing": "Showing",
"to": "to",
"ofText": "of",
"results": "results",
"recordsPerPage": "Records per page",
"firstPage": "First page",
"previousPage": "Previous page",
"nextPage": "Next page",
"lastPage": "Last page",
"exportToExcel": "Export to Excel",
"exportToPdf": "Export to PDF",
"exportSelected": "Export Selected",
"exportAll": "Export All",
"exporting": "Exporting...",
"exportSuccess": "Export completed successfully",
"exportError": "Export error",
"exportDownloadStarted": "Download started",
"exportFileSaved": "File saved",
"exportFileSavedToPath": "File saved: {path}",
"@exportFileSavedToPath": {
"placeholders": {
"path": {
"type": "String"
}
}
},
"exportFileShared": "File ready to share",
"export": "Export",
"importFromExcel": "Import from Excel",
"rowNumber": "Row",
"firstName": "First Name",
"lastName": "Last Name",
"registrationDate": "Registration Date",
"selectedRange": "Selected Range",
"page": "Page",
"equals": "equals",
"greater_than": "greater than",
"greater_equal": "greater or equal",
"less_than": "less than",
"less_equal": "less or equal",
"not_equals": "not equals",
"contains": "contains",
"starts_with": "starts with",
"ends_with": "ends with",
"in_list": "in list",
"businessBasicInfo": "Basic Business Information",
"includeSampleDataLabel": "Add sample data for a quick start",
"includeSampleDataSubtitle": "Creates sample customers, product, warehouse, and cash/bank accounts (not used when restoring from a .hbx backup).",
"sampleDataSeedWarning": "Business created but sample data could not be completed",
"businessContactInfo": "Contact Information",
"businessLegalInfo": "Legal Information",
"businessGeographicInfo": "Geographic Information",
"businessConfirmation": "Confirmation",
"businessName": "Business Name",
"businessType": "Business Type",
"businessField": "Business Field",
"address": "Address",
"phone": "Phone",
"mobile": "Mobile",
"postalCode": "Postal Code",
"nationalId": "National ID",
"registrationNumber": "Registration Number",
"economicId": "Economic ID",
"country": "Country",
"province": "Province",
"city": "City",
"step": "Step",
"ofText": "of",
"previous": "Previous",
"next": "Next",
"createBusiness": "Create Business",
"confirmInfo": "Confirm Information",
"confirmInfoMessage": "Are you sure about the entered information?",
"businessCreatedSuccessfully": "Business created successfully",
"businessCreationFailed": "Failed to create business",
"pleaseFillRequiredFields": "Please fill all required fields",
"required": "required",
"example": "Example",
"phoneExample": "02112345678",
"mobileExample": "09123456789",
"nationalIdExample": "1234567890",
"newBusinessIntentTitle": "How would you like to start?",
"newBusinessIntentSubtitle": "Create a new business in a few steps, or bring your data from a backup or the previous Hesabix.",
"newBusinessCreateManuallyTitle": "Create new business",
"newBusinessCreateManuallySubtitle": "Set up name, type, currency, and fiscal year — you can add the rest later.",
"newBusinessImportBackupTitle": "Restore from backup",
"newBusinessImportBackupSubtitle": "Upload a .hbx file to recreate a business from backup.",
"newBusinessImportLegacyTitle": "Transfer from previous Hesabix",
"newBusinessImportLegacySubtitle": "Connect to the previous version and migrate with live progress.",
"newBusinessIdentityStepTitle": "Business identity",
"newBusinessIdentityStepSubtitle": "Choose a name and what kind of business this is.",
"newBusinessFinancialStepTitle": "Currency & fiscal year",
"newBusinessFinancialStepSubtitle": "Set the default currency and your first fiscal year.",
"newBusinessReviewStepTitle": "Review & create",
"newBusinessReviewStepSubtitle": "Confirm the details. Optional contact and legal info can be completed later in settings.",
"newBusinessCurrencyAndFiscal": "Currency & fiscal year",
"defaultCurrency": "Default currency",
"extraCurrencies": "Additional currencies",
"selectCurrencies": "Select currencies…",
"searchCurrencyHint": "Search by name or code…",
"fiscalYearTitleLabel": "Fiscal year title",
"fiscalStartDate": "Start date",
"fiscalEndDate": "End date",
"fiscalYearRequiredHint": "Title, start date, and end date are required.",
"fiscalYearEndingTitle": "Fiscal year ending {date}",
"@fiscalYearEndingTitle": {
"placeholders": {
"date": {"type": "String"}
}
},
"newBusinessNameHint": "e.g. Aria Trading Co.",
"newBusinessOptionalDetails": "Optional details",
"newBusinessOptionalDetailsHint": "Contact, location, and legal IDs — you can skip these for now.",
"newBusinessCompleteLaterHint": "You can finish contact and legal details anytime from business settings.",
"newBusinessEditSection": "Edit",
"newBusinessBackToOptions": "Back to options",
"newBusinessReadyToCreate": "Everything looks good. Create your business when you are ready.",
"newBusinessLivePreview": "Preview",
"newBusinessSampleDataShort": "Include sample data",
"newBusinessAllOptions": "All start options",
"verificationRequiredTitle": "Verification required",
"verificationRequiredBody": "To verify your email and mobile number, go to account settings.",
"verificationLater": "Later",
"verificationGo": "Go to verification",
"importBackupEmptyFile": "The selected file is empty",
"importBackupHs60Unsupported": "The .hs60 format is not supported yet. This will be added later.",
"importBackupProcessing": "Processing…",
"importBackupSuccess": "Business created successfully from backup",
"importBackupPartialSuccess": "Import finished; some documents were skipped ({count})",
"@importBackupPartialSuccess": {
"placeholders": {
"count": {"type": "int"}
}
},
"importBackupFailed": "Failed to import backup file",
"importBackupSelectFailed": "Failed to select file",
"importBackupStatusFailed": "Failed to check import status",
"importBackupPleaseWait": "Please wait",
"importBackupInProgress": "Importing from backup…",
"company": "Company",
"shop": "Shop",
"store": "Store",
"union": "Union",
"club": "Club",
"institute": "Institute",
"individual": "Individual",
"manufacturing": "Manufacturing",
"trading": "Trading",
"service": "Service",
"other": "Other",
"owner": "Owner",
"member": "Member",
"support": "Support",
"newTicket": "New Ticket",
"ticketTitle": "Ticket Title",
"ticketDescription": "Problem Description",
"category": "Category",
"priority": "Priority",
"status": "Status",
"messages": "Messages",
"sendMessage": "Send Message",
"messageHint": "Type your message...",
"createTicket": "Create Ticket",
"ticketCreated": "Ticket created successfully",
"messageSent": "Message sent",
"loadingTickets": "Loading tickets...",
"noTickets": "No tickets found",
"ticketDetails": "Ticket Details",
"supportTickets": "Support Tickets",
"supportTicketCopyAll": "Copy ticket text",
"supportTicketCopyMessage": "Copy message",
"supportTicketCopyRequest": "Copy initial request",
"ticketCreatedAt": "Created At",
"ticketUpdatedAt": "Last Updated",
"ticketLoadingError": "Error loading tickets",
"ticketId": "Ticket ID",
"createdAt": "Created At",
"updatedAt": "Updated At",
"assignedTo": "Assigned To",
"low": "Low",
"medium": "Medium",
"high": "High",
"urgent": "Urgent",
"open": "Open",
"inProgress": "In Progress",
"waitingForUser": "Waiting for User",
"closed": "Closed",
"resolved": "Resolved",
"technicalIssue": "Technical Issue",
"featureRequest": "Feature Request",
"question": "Question",
"complaint": "Complaint",
"other": "Other",
"operatorPanel": "Operator Panel",
"allTickets": "All Tickets",
"assignTicket": "Assign Ticket",
"createNewTicket": "Create New Ticket",
"createSupportTicket": "Create Support Ticket",
"ticketTitleLabel": "Ticket Title",
"ticketTitleHint": "Enter a short and clear title for your issue",
"categoryLabel": "Category",
"priorityLabel": "Priority",
"descriptionLabel": "Problem Description",
"descriptionHint": "Please describe your problem or question in detail...",
"submitTicket": "Submit Ticket",
"submittingTicket": "Submitting...",
"ticketTitleRequired": "Ticket title is required",
"ticketTitleMinLength": "Title must be at least 5 characters",
"categoryRequired": "Please select a category",
"priorityRequired": "Please select a priority",
"descriptionRequired": "Problem description is required",
"descriptionMinLength": "Description must be at least 10 characters",
"loadingData": "Loading...",
"dataLoadingError": "Error loading data",
"retry": "Retry",
"ticketCreatedSuccessfully": "Ticket created successfully",
"pleaseSelectCategoryAndPriority": "Please select category and priority",
"cancel": "Cancel",
"changeStatus": "Change Status",
"multiSelectFilter": "Multi-Select Filter",
"selectFilterOptions": "Select Filter Options",
"noFilterOptionsAvailable": "No filter options available",
"marketing": "Marketing",
"marketingDescription": "Manage referrals and marketing codes",
"referralCode": "Referral Code",
"referralList": "Referral List",
"today": "Today",
"thisMonth": "This Month",
"total": "Total",
"internalMessage": "Internal Message",
"user": "User",
"operator": "Operator",
"system": "System",
"ticketNumber": "Ticket #{number}",
"ticketNotFound": "Ticket not found",
"noMessagesFound": "No messages found",
"writeYourMessage": "Write your message...",
"writeYourResponse": "Write your response...",
"sendingMessage": "Sending message...",
"messageSentSuccessfully": "Message sent successfully",
"errorSendingMessage": "Error sending message",
"ticketLoadingError": "Error loading ticket",
"retry": "Retry",
"refresh": "Refresh",
"changeStatus": "Change Status",
"statusUpdatedSuccessfully": "Status updated successfully",
"errorUpdatingStatus": "Error updating status",
"ticketClosed": "Ticket is closed",
"ticketResolved": "Ticket is resolved",
"daysAgo": "{count} days ago",
"hoursAgo": "{count} hours ago",
"minutesAgo": "{count} minutes ago",
"justNow": "Just now",
"ticketDetails": "Ticket Details",
"conversation": "Conversation",
"ticketInfo": "Ticket Information",
"createdBy": "Created by",
"creatorColumnTitle": "Creator",
"assignedTo": "Assigned to",
"lastUpdated": "Last updated",
"messageCount": "{count} messages",
"replyAsOperator": "Reply as Operator",
"replyAsUser": "Reply as User",
"internalNote": "Internal Note",
"publicMessage": "Public Message",
"markAsInternal": "Mark as Internal",
"markAsPublic": "Mark as Public",
"ticketDetailsDialog": "Ticket Details",
"close": "Close",
"ticketInfo": "Ticket Information",
"conversation": "Conversation",
"messageCount": "{count} messages",
"fileStorage": "File Management",
"fileStorageSettings": "File Settings",
"storageConfigurations": "Storage Configurations",
"addStorageConfig": "Add Storage Configuration",
"editStorageConfig": "Edit Storage Configuration",
"storageName": "Configuration Name",
"storageType": "Storage Type",
"localStorage": "Local Storage",
"ftpStorage": "FTP Storage",
"isDefault": "Default",
"isActive": "Active",
"configData": "Configuration Data",
"basePath": "Base Path",
"ftpHost": "FTP Host",
"ftpPort": "FTP Port",
"ftpUsername": "FTP Username",
"ftpPassword": "FTP Password",
"ftpDirectory": "FTP Directory",
"testConnection": "Test Connection",
"connectionSuccessful": "Connection Successful",
"connectionFailed": "Connection Failed",
"setAsDefault": "Set as Default",
"defaultConfiguration": "Default Configuration",
"setDefaultConfirm": "Are you sure you want to set this configuration as default?",
"defaultSetSuccessfully": "Default configuration set successfully",
"defaultSetFailed": "Failed to set default configuration",
"cannotDeleteDefault": "Cannot delete default configuration",
"defaultConfigurationNote": "Default configuration is used for sending emails and cannot be deleted",
"setAsDefaultEmail": "Set as Default Email",
"defaultEmailServer": "Default Email Server",
"changeDefaultEmail": "Change Default Email",
"currentDefault": "Current Default",
"makeDefault": "Make Default",
"defaultEmailNote": "Emails are sent from the default server",
"noDefaultSet": "No default email server is set",
"selectDefaultServer": "Select Default Server",
"defaultServerChanged": "Default server changed",
"defaultServerChangeFailed": "Failed to change default server",
"emailConfigSavedSuccessfully": "Email configuration saved successfully",
"emailConfigUpdatedSuccessfully": "Email configuration updated successfully",
"editEmailConfiguration": "Edit Email Configuration",
"updateConfiguration": "Update Configuration",
"testEmailSubject": "Test Email",
"testEmailBody": "This is a test email.",
"testEmailSentSuccessfully": "Test email sent successfully",
"emailConfigDeletedSuccessfully": "Configuration deleted successfully",
"confirm": "Confirm",
"cancel": "Cancel",
"fileStatistics": "File Statistics",
"totalFiles": "Total Files",
"totalSize": "Total Size",
"temporaryFiles": "Temporary Files",
"unverifiedFiles": "Unverified Files",
"cleanupTemporaryFiles": "Cleanup Temporary Files",
"cleanupCompleted": "Cleanup Completed",
"filesCleaned": "{count} files cleaned",
"fileManagement": "File Management",
"allFiles": "All Files",
"unverifiedFilesList": "Unverified Files",
"fileName": "File Name",
"fileSize": "File Size",
"mimeType": "MIME Type",
"moduleContext": "Module Context",
"createdAt": "Created At",
"expiresAt": "Expires At",
"isTemporary": "Temporary",
"isVerified": "Verified",
"forceDelete": "Force Delete",
"restoreFile": "Restore File",
"deleteConfirm": "Confirm Delete",
"deleteConfirmMessage": "Are you sure you want to delete this file?",
"restoreConfirm": "Confirm Restore",
"restoreConfirmMessage": "Are you sure you want to restore this file?",
"fileDeleted": "File deleted",
"fileRestored": "File restored",
"errorDeletingFile": "Error deleting file",
"errorRestoringFile": "Error restoring file",
"noFilesFound": "No files found",
"loadingFiles": "Loading files...",
"errorLoadingFiles": "Error loading files",
"refreshFiles": "Refresh Files",
"fileDetails": "File Details",
"originalName": "Original Name",
"storedName": "Stored Name",
"filePath": "File Path",
"checksum": "Checksum",
"uploadedBy": "Uploaded by",
"lastVerified": "Last Verified",
"developerData": "Developer Data",
"save": "Save",
"cancel": "Cancel",
"edit": "Edit",
"delete": "Delete",
"actions": "Actions",
"search": "Search",
"filter": "Filter",
"clear": "Clear",
"apply": "Apply",
"reset": "Reset",
"page": "Page",
"itemsPerPage": "Items per page",
"previous": "Previous",
"next": "Next",
"first": "First",
"last": "Last",
"systemSettingsWelcome": "System Settings",
"systemSettingsDescription": "Manage system configuration and administration",
"storageManagement": "Storage Management",
"storageManagementDescription": "Configure file storage, public app URL for share links (file sharing), and manage files",
"systemConfiguration": "System Configuration",
"systemConfigurationDescription": "General system settings and preferences",
"userManagement": "User Management",
"userManagementDescription": "Manage users, roles and permissions",
"settingsSystemReports": "Reports",
"settingsSystemReportsDescription": "System dashboards and user analytics in one place",
"systemReportsHubIntro": "Choose a report. To add a new one, register it in SystemReportRegistry and add a matching GoRoute.",
"systemReportActiveUsersTitle": "Active & online users",
"systemReportActiveUsersDescription": "Summary of all users plus recently active users based on app heartbeat (approximate, not live socket count).",
"systemReportSignupsTitle": "Signups over time",
"systemReportSignupsDescription": "New user registrations aggregated by day, week, or month for the selected date range (UTC midnight boundaries).",
"systemReportSignupsPickRange": "Select date range",
"systemReportSignupsEmptyHint": "No registrations in this range for the chosen granularity.",
"systemReportRefresh": "Refresh",
"systemReportActiveWindowLabel": "Recent activity window (minutes)",
"systemReportSummaryTotal": "Total users",
"systemReportSummaryActive": "Active accounts",
"systemReportSummaryInactive": "Inactive accounts",
"systemReportSummaryActivePct": "Active share",
"systemReportOnlineApprox": "Recently active (approx.)",
"systemReportOnlineNote": "Online count uses last_activity_at from the mobile/web app heartbeat; widen the window if you need a looser signal.",
"systemReportGranularityLabel": "Granularity",
"systemReportGranularityDay": "Daily",
"systemReportGranularityWeek": "Weekly",
"systemReportGranularityMonth": "Monthly",
"systemReportApplyRange": "Run report",
"systemReportPeriodColumn": "Period",
"systemReportCountColumn": "Signups",
"systemReportTotalInRange": "Total in range",
"systemLogs": "System Logs",
"systemLogsDescription": "View system logs and monitoring",
"backToSettings": "Back to Settings",
"settingsOverview": "Settings Overview",
"availableSettings": "Available Settings",
"systemAdministration": "System Administration",
"generalSettings": "General Settings",
"securitySettings": "Security Settings",
"maintenanceSettings": "Maintenance Settings",
"smsDestinationRateSettings": "SMS rate limit (per destination number)",
"smsDestinationRateEnabled": "Enforce per-number send cap within a time window",
"smsDestinationRateMaxSends": "Max sends per number in the window",
"smsDestinationRateWindowMinutes": "Window length (minutes)",
"smsDestinationRateMaxSendsHelper": "0 means no cap (this per-number limit is off)",
"initializing": "Initializing...",
"loadingLanguageSettings": "Loading language settings...",
"loadingCalendarSettings": "Loading calendar settings...",
"loadingThemeSettings": "Loading theme settings...",
"loadingAuthentication": "Loading authentication...",
"loadingStepOfTotal": "Step {current} of {total}",
"@loadingStepOfTotal": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"businessManagementPlatform": "Business Management Platform",
"businessDashboard": "Business Dashboard",
"businessStatistics": "Business Statistics",
"recentActivities": "Recent Activities",
"sales": "Sales",
"accounting": "Accounting",
"inventory": "Inventory",
"reports": "Reports",
"members": "Members",
"backToProfile": "Back to Profile",
"noBusinessesFound": "No businesses found",
"createFirstBusiness": "Create your first business",
"businessesHubSearchHint": "Search businesses…",
"businessesHubDeletionPending": "Pending deletion",
"businessesHubRestore": "Restore",
"businessesHubRestoring": "Restoring…",
"businessesHubLeave": "Leave",
"businessesHubDefaultCurrency": "Default currency",
"businessesHubNoSearchResults": "No results found",
"businessesHubNoSearchResultsFor": "No results for \"{query}\"",
"@businessesHubNoSearchResultsFor": {
"placeholders": {
"query": {
"type": "String"
}
}
},
"businessesHubClearSearch": "Clear search",
"businessesHubActiveBadge": "Current",
"businessesHubCount": "{count} businesses",
"@businessesHubCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"businessesHubSortTooltip": "Sort",
"businessesHubSortRecent": "Recently used",
"businessesHubSortName": "Name",
"businessesHubSortCreated": "Newest",
"businessesHubOpenSettings": "Settings",
"businessesHubEmptyTitle": "No businesses yet",
"businessesHubEmptySubtitle": "Create a new business, restore a .hbx backup, or transfer from the previous Hesabix.",
"businessesHubImportLegacy": "Import from legacy version",
"businessesHubDaysRemaining": "{days} days until permanent deletion",
"@businessesHubDaysRemaining": {
"placeholders": {
"days": {
"type": "int"
}
}
},
"businessesHubHoursRemaining": "{hours} hours until permanent deletion",
"@businessesHubHoursRemaining": {
"placeholders": {
"hours": {
"type": "int"
}
}
},
"businessesHubDeadlineExpired": "Recovery deadline has passed",
"businessesHubRestoreConfirmTitle": "Restore business",
"businessesHubRestoreConfirmMessage": "Are you sure you want to restore \"{name}\"?\n\nYour access will be restored after recovery.",
"@businessesHubRestoreConfirmMessage": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"businessesHubRestoreSuccess": "Business restored successfully",
"businessesHubRestoreFailed": "Restore failed: {error}",
"@businessesHubRestoreFailed": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"businessesHubLeaveConfirmTitle": "Leave business",
"businessesHubLeaveConfirmMessage": "Are you sure you want to leave \"{name}\"?\n\nYour access will be removed.",
"@businessesHubLeaveConfirmMessage": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"businessesHubLeaveFailed": "Leave failed: {error}",
"@businessesHubLeaveFailed": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"businessesHubLoadMoreFailed": "Failed to load more",
"businessesHubSearchShortcut": "Press / to search",
"businessesSwitcherContinue": "Continue",
"businessesSwitcherSubtitle": "Select a workspace to continue",
"mobileLauncherChooseModeHint": "This choice is saved. Long-press a business to change it later.",
"accessDenied": "Access denied",
"basicTools": "Basic Tools",
"businessSettings": "Business Settings",
"printDocuments": "Print Documents",
"people": "People",
"peopleList": "People List",
"personCode": "Person Code",
"receipts": "Receipts",
"payments": "Payments",
"receiptsAndPayments": "Receipts and Payments",
"productsAndServices": "Products and Services",
"products": "Products",
"product": "Product",
"services": "Services",
"priceLists": "Price Lists",
"categories": "Categories",
"productAttributes": "Product Attributes",
"addAttribute": "Add Attribute",
"viewAttributes": "View Attributes",
"editAttributes": "Edit Attributes",
"deleteAttributes": "Delete Attributes",
"title": "Title",
"description": "Description",
"actions": "Actions",
"createdAt": "Created At",
"active": "Active",
"add": "Add",
"edit": "Edit",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"deleteConfirm": "Are you sure to delete \"{name}\"?",
"banking": "Banking",
"accounts": "Accounts",
"pettyCash": "Petty Cash",
"cashBox": "Cash Box",
"wallet": "Wallet",
"checks": "Checks",
"transfers": "Transfers",
"accounting": "Accounting",
"invoice": "Invoice",
"expenseAndIncome": "Expense and Income",
"accountingMenu": "Accounting",
"documents": "Documents",
"chartOfAccounts": "Chart of Accounts",
"openingBalance": "Opening Balance",
"yearEndClosing": "Year End Closing",
"yearEndSplitSectionTitle": "Fiscal period split",
"yearEndSplitSectionDescription": "You can close the books on an end date earlier than the fiscal calendar end. Documents after that date (by the rule below) move to the new fiscal year after it is created.",
"yearEndSplitDifferentEndToggle": "Closing end date differs from calendar fiscal year end",
"yearEndSplitClosingEndDateLabel": "Closing period end date (inclusive)",
"yearEndSplitRelocationBasisLabel": "Criterion for \"after period end\" when moving documents",
"yearEndSplitBasisDocumentDate": "Document date",
"yearEndSplitBasisRegisteredAt": "Registration date (day)",
"yearEndSplitMoveDocumentsToggle": "Automatically move post-period documents to the new fiscal year",
"yearEndSplitMoveDocumentsSubtitle": "If off, fiscal_year_id is not updated (not recommended).",
"yearEndSplitCalendarEndNote": "Calendar end of current fiscal year: {date}",
"@yearEndSplitCalendarEndNote": {
"placeholders": {
"date": {
"type": "String"
}
}
},
"yearEndSplitRelocatePreviewLine": "{docCount} accounting document(s) and {whCount} warehouse document(s) are scheduled to move.",
"@yearEndSplitRelocatePreviewLine": {
"placeholders": {
"docCount": {
"type": "int"
},
"whCount": {
"type": "int"
}
}
},
"yearEndClosingDoneRelocationLine": "Moved {docCount} document(s) and {whCount} warehouse slip(s) to the new fiscal year.",
"@yearEndClosingDoneRelocationLine": {
"placeholders": {
"docCount": {
"type": "int"
},
"whCount": {
"type": "int"
}
}
},
"currencyRevaluation": "FX rates & revaluation",
"reports": "Reports",
"accountingSettings": "Settings",
"servicesAndPlugins": "Services and Plugins",
"warehouseManagement": "Warehouse Management",
"warehouses": "Warehouses",
"inquiries": "Inquiries",
"storageSpace": "Storage Space",
"taxpayers": "Taxpayers",
"others": "Others",
"pluginMarketplace": "Plugin Marketplace",
"pluginMarketplaceSubtitle": "Extend Hesabix with integrations and industry add-ons. Pay from your business wallet.",
"pluginMarketplaceBrowseTab": "Catalog",
"pluginMarketplaceMyPluginsTab": "My add-ons",
"pluginMarketplaceSearchHint": "Search by name or description…",
"pluginMarketplaceCategoryAll": "All",
"pluginMarketplaceCategoryIntegration": "Integrations",
"pluginMarketplaceCategoryOperations": "Operations",
"pluginMarketplaceCategoryProductManagement": "Products",
"pluginMarketplaceCategorySales": "Sales",
"pluginMarketplaceCategoryCrmMarketing": "CRM & marketing",
"pluginMarketplaceWalletBalance": "Available wallet balance",
"pluginMarketplaceWalletTopUp": "Top up wallet",
"pluginMarketplaceWalletLowBalance": "Balance is below the cheapest plan. Top up before purchasing.",
"pluginMarketplaceInvoicesLink": "Marketplace invoices",
"pluginMarketplaceEmpty": "No add-ons are available right now.",
"pluginMarketplaceMyEmpty": "You have not activated any add-ons yet.",
"pluginMarketplaceError": "Could not load the marketplace",
"pluginMarketplaceViewAndBuy": "View & purchase",
"pluginMarketplaceReadMore": "Read more",
"pluginMarketplaceReadLess": "Show less",
"pluginMarketplaceFreeTrialDays": "Free trial · {days} days",
"@pluginMarketplaceFreeTrialDays": {
"placeholders": {
"days": {"type": "int"}
}
},
"pluginMarketplaceStartTrial": "Start free trial",
"pluginMarketplacePlanMonthly": "Monthly",
"pluginMarketplacePlanYearly": "Yearly",
"pluginMarketplacePlanLifetime": "Lifetime",
"pluginMarketplaceStatusActive": "Active",
"pluginMarketplaceStatusInactive": "Inactive",
"pluginMarketplaceStatusExpired": "Expired",
"pluginMarketplaceStatusTrialDays": "Trial · {days} days left",
"@pluginMarketplaceStatusTrialDays": {
"placeholders": {
"days": {"type": "int"}
}
},
"pluginMarketplaceStatusTrialExpired": "Trial ended",
"pluginMarketplacePlanPurchased": "Purchased",
"pluginMarketplacePlanCurrent": "Current plan",
"pluginMarketplacePopularPlan": "Popular",
"pluginMarketplaceEquivalentMonthly": "~{amount} / month",
"@pluginMarketplaceEquivalentMonthly": {
"placeholders": {
"amount": {"type": "String"}
}
},
"pluginMarketplaceSavingsPercent": "Save {percent}% vs monthly",
"@pluginMarketplaceSavingsPercent": {
"placeholders": {
"percent": {"type": "int"}
}
},
"pluginMarketplaceConfirmPurchaseTitle": "Confirm purchase",
"pluginMarketplaceConfirmPurchasePlugin": "Add-on",
"pluginMarketplaceConfirmPurchasePlan": "Plan",
"pluginMarketplaceConfirmPurchaseAmount": "Amount",
"pluginMarketplaceConfirmWalletBalance": "Wallet balance",
"pluginMarketplaceConfirmPay": "Confirm & pay",
"pluginMarketplaceInsufficientFundsTitle": "Insufficient balance",
"pluginMarketplaceInsufficientFundsBody": "Required: {required} · Available: {available} · Shortfall: {shortfall}",
"@pluginMarketplaceInsufficientFundsBody": {
"placeholders": {
"required": {"type": "String"},
"available": {"type": "String"},
"shortfall": {"type": "String"}
}
},
"pluginMarketplaceGoToWallet": "Go to wallet",
"pluginMarketplacePurchaseSuccess": "Purchase completed successfully",
"pluginMarketplaceConfigurePlugin": "Open add-on settings",
"pluginMarketplaceReturnToPrevious": "Back to previous page",
"pluginMarketplacePaymentFromWallet": "Paid from business wallet",
"pluginMarketplaceRetry": "Try again",
"pluginMarketplaceNoPermissionView": "You do not have permission to view the marketplace.",
"pluginMarketplaceNoPermissionBuy": "You do not have permission to purchase add-ons.",
"pluginMarketplaceNoPlansHidden": "Some add-ons are hidden because they have no active plans.",
"pluginMarketplaceExpiresAt": "Expires: {date}",
"@pluginMarketplaceExpiresAt": {
"placeholders": {
"date": {"type": "String"}
}
},
"pluginMarketplaceTrialProgress": "Trial progress",
"pluginMarketplaceComparePlans": "Choose a plan",
"pluginMarketplacePerMonth": "/ month",
"pluginMarketplacePluginCodeSupport": "Support code: {code}",
"@pluginMarketplacePluginCodeSupport": {
"placeholders": {
"code": {"type": "String"}
}
},
"pluginMarketplaceRefresh": "Refresh",
"pluginMarketplaceTrialSuccess": "Free trial started",
"pluginMarketplaceDetailTitle": "Add-on details",
"pluginMarketplaceFromPrice": "From {price}",
"@pluginMarketplaceFromPrice": {
"placeholders": {
"price": {"type": "String"}
}
},
"pluginMarketplaceBuyDisabledTooltip": "You need marketplace purchase permission",
"pluginMarketplaceActiveCount": "{count} active",
"@pluginMarketplaceActiveCount": {
"placeholders": {
"count": {"type": "int"}
}
},
"practicalTools": "Practical Tools",
"usersAndPermissions": "Users and Permissions",
"businessUsers": "Business Users",
"addNewUser": "Add New User",
"userEmailOrPhone": "Email or Phone",
"userEmailOrPhoneHint": "Enter user email or phone number",
"addUser": "Add User",
"businessMembershipUnlimited": "Unlimited membership",
"businessMembershipLimited": "Membership end date",
"businessMembershipPickDate": "Pick end date",
"businessMembershipSectionTitle": "Membership duration",
"businessMembershipUntil": "Until {date}",
"@businessMembershipUntil": {
"placeholders": {
"date": {"type": "String"}
}
},
"businessMembershipExpired": "Expired",
"businessMembershipEndDateRequired": "Please select a membership end date",
"userAddedSuccessfully": "User added successfully",
"userAddFailed": "Failed to add user",
"userRemovedSuccessfully": "User removed successfully",
"userRemoveFailed": "Failed to remove user",
"permissionsUpdatedSuccessfully": "Permissions updated successfully",
"permissionsUpdateFailed": "Failed to update permissions",
"userNotFound": "User not found",
"invalidEmailOrPhone": "Invalid email or phone number",
"userAlreadyExists": "User already exists",
"removeUser": "Remove User",
"removeUserConfirm": "Are you sure you want to remove this user?",
"userPermissions": "User Permissions",
"permissions": "Permissions",
"permission": "Permission",
"hasPermission": "Has Permission",
"noPermission": "No Permission",
"viewUsers": "View Users",
"managePermissions": "Manage Permissions",
"totalUsers": "Total Users",
"activeUsers": "Active Users",
"pendingUsers": "Pending Users",
"userName": "User Name",
"userEmail": "Email",
"userPhone": "Phone",
"userStatus": "Status",
"userRole": "Role",
"userAddedAt": "Added At",
"lastActive": "Last Active",
"active": "Active",
"inactive": "Inactive",
"pending": "Pending",
"owner": "Owner",
"admin": "Admin",
"member": "Member",
"viewer": "Viewer",
"editPermissions": "Edit Permissions",
"savePermissions": "Save Permissions",
"permissionsEnableAll": "Enable all",
"permissionsDisableAll": "Disable all",
"permissionsConfirmEnableAllTitle": "Enable all permissions?",
"permissionsConfirmEnableAllBody": "This turns on every permission for this user, including sensitive actions such as fiscal year rollback and user management. Continue?",
"permissionsConfirmDisableAllTitle": "Disable all permissions?",
"permissionsConfirmDisableAllBody": "This turns off every permission for this user. They will lose access to most features until you change settings again. Continue?",
"permissionsConfirmDisableCategoryTitle": "Disable this category?",
"permissionsConfirmDisableCategoryBody": "All permissions under \"{categoryName}\" will be turned off for this user. Continue?",
"@permissionsConfirmDisableCategoryBody": {"placeholders": {"categoryName": {"type": "String"}}},
"appLevelPermissionsConfirmEnableBody": "All application-level privileges listed below will be enabled for this user. Continue?",
"appLevelPermissionsConfirmDisableBody": "All application-level privileges listed below will be disabled for this user. Continue?",
"cancel": "Cancel",
"loading": "Loading...",
"noUsersFound": "No users found",
"searchUsers": "Search users...",
"filterByStatus": "Filter by Status",
"filterByRole": "Filter by Role",
"allStatuses": "All Statuses",
"allRoles": "All Roles",
"permissionDashboard": "Dashboard Access",
"permissionPeople": "People Access",
"permissionReceipts": "Receipts Access",
"permissionPayments": "Payments Access",
"permissionReports": "Reports Access",
"permissionSettings": "Settings Access",
"permissionUsers": "Users Access",
"permissionPrint": "Print Access",
"ownerWarning": "Warning: Business owner does not need to be added and always has full access to all sections",
"ownerWarningTitle": "Business Owner",
"alreadyAddedWarning": "This user has already been added to the business",
"alreadyAddedWarningTitle": "Existing User",
"version": "Version 1.0.23",
"motto": "The world becomes beautiful through cooperation",
"loadingLanguageSettings": "Loading language settings...",
"loadingCalendarSettings": "Loading calendar settings...",
"loadingThemeSettings": "Loading theme settings...",
"loadingAuthentication": "Loading authentication...",
"initializing": "Initializing...",
"add": "Add",
"view": "View",
"edit": "Edit",
"delete": "Delete",
"draft": "Manage Drafts",
"addPerson": "Add New Person",
"viewPeople": "View People List",
"editPeople": "Edit People Information",
"deletePeople": "Delete People",
"addReceipt": "Add New Receipt",
"viewReceipts": "View Receipts",
"editReceipts": "Edit Receipts",
"deleteReceipts": "Delete Receipts",
"manageReceiptDrafts": "Manage Receipt Drafts",
"addPayment": "Add New Payment",
"viewPayments": "View Payments",
"editPayments": "Edit Payments",
"deletePayments": "Delete Payments",
"managePaymentDrafts": "Manage Payment Drafts",
"products": "Products and Services",
"addProduct": "Add Product or Service",
"@duplicateProduct": {},
"duplicateProduct": "Copy Product / Service",
"@productDuplicatedSuccessfully": {},
"productDuplicatedSuccessfully": "Product copy was created successfully",
"viewProducts": "View Products and Services",
"editProducts": "Edit Products and Services",
"deleteProducts": "Delete Products and Services",
"priceLists": "Price Lists",
"addPriceList": "Add Price List",
"viewPriceLists": "View Price Lists",
"editPriceLists": "Edit Price Lists",
"deletePriceLists": "Delete Price Lists",
"categories": "Categories",
"addCategory": "Add Category",
"viewCategories": "View Categories",
"editCategories": "Edit Categories",
"deleteCategories": "Delete Categories",
"inventory": "Inventory",
"addInventory": "Add Inventory",
"viewInventory": "View Inventory",
"editInventory": "Edit Inventory",
"deleteInventory": "Delete Inventory",
"reports": "Reports",
"viewReports": "View Reports",
"generateReports": "Generate Reports",
"exportReports": "Export Reports",
"settings": "Settings",
"viewSettings": "View Settings",
"editSettings": "Edit Settings",
"users": "Users",
"viewUsers": "View Users",
"manageUsers": "Manage Users",
"print": "Print Documents",
"printDocuments": "Print Documents",
"peopleReceipts": "Receipts from People",
"peoplePayments": "Payments to People",
"storageConfigUpdated": "Storage configuration updated",
"storageConfigCreated": "Storage configuration created",
"storageConfigDeleted": "Storage configuration deleted",
"storageConfigHasFiles": "This storage configuration has files and cannot be deleted",
"storageConfigNotFound": "Storage configuration not found",
"storageConfigSetAsDefault": "Configuration set as default",
"storageConfigSetDefaultFailed": "Failed to set as default",
"adminStorageFtpPurposeSubtitle": "Used as the default file storage backend for uploads (not the same as per-business backup FTP).",
"adminStorageFtpInsecureWarning": "Without TLS, credentials and data can be read on the network. Enable TLS when the server supports it.",
"adminStorageFtpPasswordOptionalHint": "Leave empty to keep the current password",
"adminStorageFtpPassive": "Passive mode (PASV)",
"adminStorageFormSectionBasic": "Basic information",
"adminStorageFormSectionDetails": "Configuration details",
"adminStorageFormSectionOptions": "Options",
"adminStorageNameHint": "Enter a name for this storage profile",
"adminStorageFtpHostLabel": "FTP host",
"adminStorageFtpHostHint": "Hostname or IP of the FTP server",
"adminStorageFtpPortHintPlain": "Default 21 without TLS",
"adminStorageFtpPortHintTls": "Often 990 with implicit TLS, or 21 with explicit TLS",
"adminStorageFtpDirectoryLabel": "Remote folder",
"adminStorageFtpDirectoryHint": "Remote folder for stored files (e.g. /hesabix_files)",
"adminStorageLocalBasePath": "Base path",
"adminStorageFtpUseTlsTitle": "Use TLS",
"adminStorageFtpUseTlsSubtitle": "FTP over TLS (FTPS) when supported",
"adminStorageDefaultTitle": "Set as default",
"adminStorageDefaultSubtitle": "Use this profile as the default storage",
"adminStorageActiveTitle": "Active",
"adminStorageActiveSubtitle": "Inactive profiles are not used for new uploads",
"adminStorageCreateTitle": "Create storage profile",
"adminStorageEditTitle": "Edit storage profile",
"adminStorageFtpServerTitle": "FTP server",
"adminStorageTestConnection": "Test connection",
"adminStorageTestingConnection": "Testing connection…",
"adminStorageTestSuccess": "Connection test succeeded",
"adminStorageTestFailed": "Connection test failed",
"adminStorageSaveInProgress": "Saving…",
"adminStorageCreateButton": "Create",
"adminStorageUpdateButton": "Update",
"passwordChangeError": "Error changing password",
"banking": "Banking",
"bankAccounts": "Bank Accounts",
"cash": "Cash",
"pettyCash": "Petty Cash",
"checks": "Checks",
"wallet": "Wallet",
"transfers": "Transfers",
"invoices": "Invoices",
"expensesIncome": "Expenses & Income",
"accounting": "Accounting",
"accountingDocuments": "Accounting Documents",
"chartOfAccounts": "Chart of Accounts",
"openingBalance": "Opening Balance",
"warehouse": "Warehouse",
"warehouses": "Warehouse Management",
"warehouseTransfers": "Warehouse Transfers",
"@permissionsWarehouseInventoryHint": {
"description": "User permissions screen: explains warehouse vs warehouse-transfer capabilities."
},
"permissionsWarehouseInventoryHint": "Warehouse locations and warehouse documents use different permissions. Warehouse management is for defining warehouses. To use warehouse documents (lists, creating or posting documents, issuing from invoices, stock count adjustments, and related stock operations), enable the matching options under Warehouse transfers.",
"@permissionsGroupHintChecks": {
"description": "User permissions: checks group — link to accounting documents permission."
},
"permissionsGroupHintChecks": "Creating a new check posts an accounting document. Besides check permissions, enable at least one of add, edit, or draft under Accounting documents. Some check workflows (collection, endorsement, payment, etc.) may also record documents.",
"@permissionsGroupHintAccountingDocuments": {
"description": "User permissions: accounting documents group — scope of the permission."
},
"permissionsGroupHintAccountingDocuments": "These permissions apply to manual journal entries and to automatic documents generated by the system from operations such as checks, receipts and payments, and invoices (where applicable).",
"permissionsCategoryInvoicesAndExpenses": "Invoices & expenses",
"permissionSectionInvoiceTypes": "Allowed invoice types",
"permissionSectionPricing": "Sales / purchase price visibility",
"permissionInvoiceChangeUnitPrice": "Change invoice unit price manually (invoice & quick sales)",
"permissionSectionCrmWebChat": "Web chat widget (CRM)",
"permissionCrmEditAndAdd": "Create and edit CRM records",
"permissionCrmViewReports": "View CRM reports",
"permissionCrmTeamPerformanceReports": "Team performance reports (entire team)",
"permissionCrmWebChatView": "View web chat",
"permissionCrmWebChatReply": "Reply and send messages in web chat",
"permissionCrmWebChatManageWidgets": "Create and edit chat widgets",
"permissionCrmWebChatEditConversations": "Edit conversations (status, assignment, lead)",
"permissionCrmWebChatDeleteMessages": "Delete messages in web chat",
"permissionFiscalYearEditCurrent": "Edit current fiscal year",
"permissionFiscalYearClose": "Close fiscal year",
"permissionFiscalYearRollbackDangerous": "Revert current fiscal year (dangerous operation)",
"@permissionsUpdateError": {
"description": "User permissions dialog: save failed with server or network detail.",
"placeholders": {
"error": {
"type": "String"
}
}
},
"permissionsUpdateError": "Could not update permissions: {error}",
"@checkFormNeedsChecksWritePermission": {
"description": "Check form dialog when user lacks check write permissions."
},
"checkFormNeedsChecksWritePermission": "You do not have permission to add or edit checks.",
"@checkFormNeedsAccountingDocumentsPermission": {
"description": "Check form dialog when user lacks accounting document posting permissions."
},
"checkFormNeedsAccountingDocumentsPermission": "You do not have permission to post accounting documents. Saving a check records a journal entry; ask an admin to grant add, edit, or draft under Accounting documents.",
"@checkFormDuplicateSayadCode": {
"description": "Check form save error when Sayad code already exists in the business."
},
"checkFormDuplicateSayadCode": "This Sayad code is already registered for another check in this business.",
"productAttributes": "Product Attributes",
"addAttribute": "Add Attribute",
"viewAttributes": "View Attributes",
"editAttributes": "Edit Attributes",
"deleteAttributes": "Delete Attributes",
"title": "Title",
"description": "Description",
"actions": "Actions",
"createdAt": "Created At",
"active": "Active",
"add": "Add",
"edit": "Edit",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"deleteConfirm": "Are you sure to delete \"{name}\"?",
"addBankAccount": "Add Bank Account",
"viewBankAccounts": "View Bank Accounts",
"editBankAccounts": "Edit Bank Accounts",
"deleteBankAccounts": "Delete Bank Accounts",
"addCash": "Add Cash",
"viewCash": "View Cash",
"editCash": "Edit Cash",
"deleteCash": "Delete Cash",
"addPettyCash": "Add Petty Cash",
"viewPettyCash": "View Petty Cash",
"editPettyCash": "Edit Petty Cash",
"deletePettyCash": "Delete Petty Cash",
"addCheck": "Add Check",
"viewChecks": "View Checks",
"editChecks": "Edit Checks",
"deleteChecks": "Delete Checks",
"collectChecks": "Collect Checks",
"transferChecks": "Transfer Checks",
"returnChecks": "Return Checks",
"viewWallet": "View Wallet",
"chargeWallet": "Charge Wallet",
"addTransfer": "Add Transfer",
"viewTransfers": "View Transfers",
"editTransfers": "Edit Transfers",
"deleteTransfers": "Delete Transfers",
"manageTransferDrafts": "Manage Transfer Drafts",
"addInvoice": "Add Invoice",
"invoiceCopyOpenNew": "Copy to new invoice",
"invoiceCopyLoading": "Preparing the new invoice form from the selected document…",
"viewInvoices": "View Invoices",
"editInvoices": "Edit Invoices",
"deleteInvoices": "Delete Invoices",
"manageInvoiceDrafts": "Manage Invoice Drafts",
"addExpenseIncome": "Add Expense/Income",
"viewExpensesIncome": "View Expenses & Income",
"editExpensesIncome": "Edit Expenses & Income",
"deleteExpensesIncome": "Delete Expenses & Income",
"manageExpenseIncomeDrafts": "Manage Expense/Income Drafts",
"addAccountingDocument": "Add Accounting Document",
"viewAccountingDocuments": "View Accounting Documents",
"editAccountingDocuments": "Edit Accounting Documents",
"deleteAccountingDocuments": "Delete Accounting Documents",
"manageAccountingDocumentDrafts": "Manage Accounting Document Drafts",
"addAccount": "Add Account",
"viewChartOfAccounts": "View Chart of Accounts",
"editChartOfAccounts": "Edit Chart of Accounts",
"deleteAccounts": "Delete Accounts",
"viewOpeningBalance": "View Opening Balance",
"editOpeningBalance": "Edit Opening Balance",
"addWarehouse": "Add Warehouse",
"viewWarehouses": "View Warehouses",
"editWarehouses": "Edit Warehouses",
"deleteWarehouses": "Delete Warehouses",
"addWarehouseTransfer": "Add Warehouse Transfer",
"viewWarehouseTransfers": "View Warehouse Transfers",
"editWarehouseTransfers": "Edit Warehouse Transfers",
"deleteWarehouseTransfers": "Delete Warehouse Transfers",
"manageWarehouseTransferDrafts": "Manage Warehouse Transfer Drafts",
"businessSettings": "Business Settings",
"printSettings": "Print Settings",
"eventHistory": "Event History",
"usersAndPermissions": "Users and Permissions",
"storageSpace": "Storage Space",
"viewStorage": "View Storage",
"deleteFiles": "Delete Files",
"smsPanel": "SMS Panel",
"viewSmsHistory": "View SMS History",
"manageSmsTemplates": "Manage SMS Templates",
"marketplace": "Marketplace",
"viewMarketplace": "View Marketplace",
"buyPlugins": "Buy Plugins",
"viewInvoices": "View Invoices",
"generalSettings": "General Settings",
"appearanceSettings": "Appearance Settings",
"advancedSettings": "Advanced Settings",
"businessSettingsDescription": "Manage business information and main settings",
"usersAndPermissionsDescription": "Manage users and set access levels",
"printDocuments": "Print Documents",
"printDocumentsDescription": "Configure print templates and formatting",
"languageDescription": "Select user interface language",
"themeDescription": "Choose light, dark or system theme",
"calendarDescription": "Select calendar type (Jalali or Gregorian)",
"dataBackup": "Data Backup",
"dataBackupDescription": "Create backup of all business data",
"dataRestore": "Data Restore",
"dataRestoreDescription": "Restore data from previous backup",
"restoreModeNewBusiness": "Create a new business",
"restoreModeReplace": "Replace existing data",
"restoreWarningTitle": "Security Warning",
"restoreWarningReplace": "⚠️ Restoring with \"Complete replacement\" mode will DELETE all current business data and replace it with backup data. This action is IRREVERSIBLE!",
"restoreWarningNewBusiness": "ℹ️ Restoring with \"Create new business\" mode will create a new business with backup data and will NOT affect your current data.",
"restoreSecurityNote": "Security Notes:",
"restoreSecurityNote1": "• Create a backup of your current data before restoring",
"restoreSecurityNote2": "• Ensure the backup file is valid and belongs to your business",
"restoreSecurityNote3": "• Restore may take several minutes, please wait",
"restoreSecurityNote4": "• Contact support if you encounter any errors",
"restoreConfirmReplace": "Confirm Complete Replacement",
"restoreConfirmReplaceMessage": "Are you sure you want to DELETE all current data and replace it with backup data?\n\nThis action is IRREVERSIBLE!",
"restoreConfirmNewBusiness": "Confirm New Business Creation",
"restoreConfirmNewBusinessMessage": "Are you sure you want to create a new business with backup data?",
"restoreSourceTitle": "Restore Source",
"restoreModeTitle": "Restore Mode",
"selectBackupFile": "Select backup file (.hbx)",
"defaultBackupFilename": "backup.hbx",
"errorUnknown": "Unknown error",
"errorConnectionTimeout": "Connection timeout. Please check your internet connection.",
"errorReceiveTimeout": "Receive timeout. Please try again.",
"errorConnectionError": "Connection error. Please check your internet connection.",
"errorFileUploadFailed": "File upload failed. Please try again.",
"errorDataSaveFailed": "Could not save the data. Please try again.",
"errorSendTimeout": "Send timeout.",
"errorUnknownServer": "Unknown server error",
"errorRequestTimeout": "Request timeout. Please try again.",
"errorExtractorSaveData": "Could not save data.",
"errorExtractorFileUpload": "File upload error.",
"errorInternetUnavailablePleaseRetry": "No internet connection. Please try again.",
"errorInvalidInput": "Invalid input data. Please check the information.",
"errorBackupNotFound": "Backup not found.",
"errorBusinessMismatch": "This backup belongs to a different business.",
"errorNotSupported": "This operation is not currently supported.",
"errorRateLimit": "Too many requests. Please wait a moment.",
"errorInvalidBackup": "Backup file is invalid or corrupted.",
"errorBusinessCreationFailed": "Failed to create new business. Please try again.",
"errorRestoreFailed": "Restore failed",
"apiErrorBusinessUsersBusinessNotFound": "Business not found.",
"apiErrorBusinessUsersUserNotFound": "User not found.",
"apiErrorBusinessUsersInviteAccountMissing": "No user found with this email or phone number. They must register first.",
"apiErrorBusinessUsersAlreadyMember": "This user is already a member of this business.",
"apiErrorBusinessUsersCannotRemoveOwner": "You cannot remove the business owner.",
"apiErrorBusinessUsersRemoveMemberNotFound": "This user is not a member of this business.",
"apiErrorBusinessUsersOwnerCannotLeave": "The business owner cannot leave the business here. Delete the business from settings if needed.",
"apiErrorBusinessUsersNotAMemberLeave": "You are not a member of this business.",
"apiErrorBusinessUsersLeaveFailed": "Could not leave the business. Please try again.",
"apiErrorLegacyAccproRequired": "To complete this action, enable or renew the Advanced Accounting add-on in your legacy Hesabix account.",
"apiErrorNoFiscalYearForDate": "No fiscal year covers this date.",
"apiErrorFiscalYearRangeOverlap": "The selected date range overlaps another fiscal year.",
"apiErrorFiscalYearLockedForPosting": "This fiscal year is closed; posting is not allowed.",
"apiErrorDocumentCodeRace": "Document number conflict. Please try again.",
"apiErrorNoActiveStoragePlan": "This business has no active storage plan. Activate a storage plan before uploading files.",
"apiErrorStorageLimitExceeded": "Not enough storage space. The file exceeds your remaining storage limit.",
"apiErrorFileSizeExceeded": "The file exceeds the maximum allowed size.",
"byteUnitB": "B",
"byteUnitKB": "KB",
"byteUnitMB": "MB",
"byteUnitGB": "GB",
"byteUnitTB": "TB",
"backupCompleted": "Backup completed",
"restoreCompleted": "Restore completed",
"backupFailed": "Backup failed",
"restoreFailed": "Restore failed",
"jobStartingBackup": "Starting backup",
"jobCollectingData": "Collecting data",
"jobPackagingArchive": "Packaging archive",
"jobSavingFile": "Saving file",
"jobFinalizing": "Finalizing",
"jobUploadingFile": "Uploading file",
"jobStartingRestore": "Starting restore",
"jobLoadingBackup": "Loading backup",
"jobCreatingNewBusiness": "Creating new business",
"jobNewBusinessCreated": "New business created",
"jobCleaningCurrentData": "Cleaning current data",
"jobPreparingToRestoreData": "Preparing to restore data",
"jobUpdatingBusinessInfo": "Updating business info",
"jobPreparingBusinessData": "Preparing business data",
"jobRestoringData": "Restoring data",
"systemLogs": "System Logs",
"systemLogsDescription": "View system reports and user activity logs",
"close": "Close",
"edit": "Edit",
"manage": "Manage",
"configure": "Configure",
"set": "Set",
"execute": "Execute",
"backup": "Backup",
"restore": "Restore",
"view": "View",
"businessSettingsDialogContent": "In this section you can manage business information, address, contact numbers and other details.",
"usersAndPermissionsDialogContent": "In this section you can add new users, set permissions and manage roles.",
"printDocumentsDialogContent": "In this section you can configure print templates, letterheads and printer settings.",
"dataBackupDialogContent": "In this section you can create a backup of all business data.",
"dataRestoreDialogContent": "In this section you can restore data from a previous backup.",
"systemLogsDialogContent": "In this section you can view system reports, errors and user activities.",
"accountManagement": "Account Management",
"persons": "Persons",
"person": "Person",
"personsList": "Persons List",
"personGroup": "Person group",
"personGroupNone": "No group",
"personGroupsManage": "Manage person groups",
"personGroupColumn": "Group",
"addPerson": "Add Person",
"editPerson": "Edit Person",
"personDetails": "Person Details",
"deletePerson": "Delete Person",
"personAliasName": "Alias Name",
"personFirstName": "First Name",
"personLastName": "Last Name",
"personType": "Person Type",
"personCompanyName": "Company Name",
"personNamePrefix": "Name prefix",
"personNamePrefixNone": "None",
"personLegalEntityType": "Legal entity type",
"personLegalEntityNatural": "Natural person",
"personLegalEntityLegal": "Legal entity",
"personPaymentId": "Payment ID",
"personNationalId": "National ID",
"personRegistrationNumber": "Registration Number",
"personEconomicId": "Economic ID",
"personCountry": "Country",
"personProvince": "Province",
"personCity": "City",
"personAddress": "Address",
"personPostalCode": "Postal Code",
"personPhone": "Phone",
"personMobile": "Mobile",
"personMobile2": "Mobile 2",
"personMobile3": "Mobile 3",
"personFax": "Fax",
"personEmail": "Email",
"personWebsite": "Website",
"personSocialNetworks": "Messengers and social networks",
"personSocialPlatform": "Platform",
"personSocialValue": "Username, link or number",
"personSocialCustomName": "Custom platform name (for Other)",
"addPersonSocialRow": "Add contact",
"noPersonSocialRows": "No messenger or social entry yet.",
"personBankAccounts": "Bank Accounts",
"addBankAccount": "Add Bank Account",
"editBankAccount": "Edit Bank Account",
"deleteBankAccount": "Delete Bank Account",
"bankName": "Bank Name",
"accountNumber": "Account Number",
"cardNumber": "Card Number",
"shebaNumber": "Sheba Number",
"personTypeCustomer": "Customer",
"personTypeMarketer": "Marketer",
"personTypeEmployee": "Employee",
"personTypeSupplier": "Supplier",
"personTypePartner": "Partner",
"personTypeSeller": "Seller",
"personTypeShareholder": "Shareholder",
"personCreatedSuccessfully": "Person created successfully",
"personUpdatedSuccessfully": "Person updated successfully",
"personDeletedSuccessfully": "Person deleted successfully",
"personNotFound": "Person not found",
"personAliasNameRequired": "Alias name is required",
"personAliasPickFromNamesHint": "Fill alias from name fields…",
"personTypeRequired": "Person type is required",
"bankAccountAddedSuccessfully": "Bank account added successfully",
"bankAccountUpdatedSuccessfully": "Bank account updated successfully",
"bankAccountDeletedSuccessfully": "Bank account deleted successfully",
"bankNameRequired": "Bank name is required",
"personBasicInfo": "Basic Information",
"personEconomicInfo": "Economic Information",
"personContactInfo": "Contact Information",
"personBankInfo": "Bank Accounts",
"personSummary": "Persons Summary",
"totalPersons": "Total Persons",
"activePersons": "Active Persons",
"inactivePersons": "Inactive Persons",
"personsByType": "Persons by Type",
"update": "Update",
"collect": "Collect",
"transfer": "Transfer",
"charge": "Charge",
"businessSettings": "Business Settings",
"printSettings": "Print Settings",
"eventHistory": "Event History",
"usersAndPermissions": "Users and Permissions",
"storageSpace": "Storage Space",
"deleteFiles": "Files",
"viewSmsHistory": "View SMS History",
"manageSmsTemplates": "Manage SMS Templates",
"viewMarketplace": "View Marketplace",
"buyPlugins": "Buy Plugins",
"viewInvoices": "View Invoices",
"saving": "Saving...",
"userPermissionsTitle": "User Permissions",
"dialogClose": "Close",
"buy": "Buy",
"templates": "Templates",
"history": "History",
"business": "Business",
"shareCount": "Share Count",
"commissionSalePercentLabel": "Commission Sale Percent",
"commissionSalesReturnPercentLabel": "Commission Sales Return Percent",
"commissionSalesAmountLabel": "Commission Sales Amount",
"commissionSalesReturnAmountLabel": "Commission Sales Return Amount",
"importPersonsFromExcel": "Import Persons from Excel",
"selectedFile": "Selected file",
"noFileSelected": "No file selected",
"chooseFile": "Choose file",
"matchBy": "Match by",
"code": "code",
"conflictPolicy": "Conflict policy",
"policyInsertOnly": "Insert-only",
"policyUpdateExisting": "Update existing",
"policyUpsert": "Upsert",
"dryRun": "Dry run",
"dryRunValidateOnly": "Dry run (validate only)",
"downloadTemplate": "Download template",
"reviewDryRun": "Review (Dry run)",
"import": "Import",
"importReal": "Import (real)",
"templateDownloaded": "Template downloaded",
"pickFileError": "Error picking file",
"templateDownloadError": "Error downloading template",
"importError": "Import error",
"result": "Result",
"valid": "Valid",
"invalid": "Invalid",
"inserted": "Inserted",
"updated": "Updated",
"skipped": "Skipped",
"importSkippedApply": "Failed on save",
"importPreviewInsert": "Would insert (preview)",
"importPreviewUpdate": "Would update (preview)",
"importPreviewSkipConflict": "Would skip existing (preview)",
"importWarningsTitle": "Warnings",
"productImportHint": "Internal IDs are not required. Copy a category path like \"Raw materials > Plastics\" from the template''s Categories sheet. An empty cell on update means do not change that field.",
"productImportHowToTitle": "How do I fill the file?",
"productImportHowToBody": "1) Download the template.\n2) Fill only the Products sheet; other sheets list existing values.\n3) Edit or delete the sample row.\n4) Run a dry-run review, then import for real.",
"productImportEmptyCellHint": "On update, an empty cell keeps the current value. Write No explicitly to turn a flag off.",
"productImportMissingCategory": "If a category is missing",
"productImportMissingAttribute": "If an attribute is missing",
"productImportPolicyInsert": "New products only",
"productImportPolicyUpdate": "Update existing only",
"productImportPolicyUpsert": "Create new and update existing",
"personImportSuccess": "Import completed",
"yes": "Yes",
"no": "No",
"row": "Row",
"onlyForMarketerSeller": "This section is shown only for marketer/seller",
"percentFromSales": "Percent from sales",
"percentFromSalesReturn": "Percent from sales return",
"salesAmount": "Sales amount",
"salesReturnAmount": "Sales return amount",
"mustBeBetweenZeroAndHundred": "Must be between 0 and 100",
"mustBePositiveNumber": "Must be a positive number",
"personCodeOptional": "Person code (optional)",
"uniqueCodeNumeric": "Unique code (numeric)",
"automatic": "Automatic",
"manual": "Manual",
"personCodeRequired": "Person code is required",
"codeMustBeNumeric": "Code must be numeric",
"codeMinLength": "Code must be at least 3 digits",
"codeRequired": "Code is required",
"integerNoDecimal": "Integer number (no decimals)",
"shareholderShareCountRequired": "For shareholder, share count is required",
"noBankAccountsAdded": "No bank accounts added",
"commissionExcludeDiscounts": "Exclude discounts from commission",
"commissionExcludeAdditionsDeductions": "Exclude additions/deductions from commission",
"commissionPostInInvoiceDocument": "Post commission in invoice accounting document"
,
"manageCategories": "Manage Categories",
"categoriesDialogTitle": "Manage Categories",
"addRootCategory": "Add Root",
"addCategory": "Add Category",
"addChildCategory": "Add Child",
"renameCategory": "Rename",
"deleteCategory": "Delete Category",
"deleteCategoryConfirm": "Are you sure you want to delete this category?",
"categoryNameFa": "Name (Persian)",
"categoryNameEn": "Name (English)",
"categoryName": "Category Name",
"categoryNameRequired": "Category name is required",
"categoryNameHint": "Enter category name",
"categoryType": "Type",
"productType": "Product",
"serviceType": "Service",
"loadingCategories": "Loading categories...",
"createCategory": "Create Category",
"updateCategory": "Update Category",
"deleteCategorySuccess": "Category deleted",
"operationFailed": "Operation failed",
"productGeneralInfo": "General Information",
"pricingAndInventory": "Pricing & Inventory",
"tax": "Tax",
"productStock": "Stock",
"productStockInWarehouses": "Product Stock in Warehouses",
"productCommercialPricing": "Commercial & Pricing",
"productCommercialPricingNoAccessHint": "To view this tab, invoice read permission is required. Ask your admin to grant invoices.view.",
"productCommercialInsightsNotEligibleTitle": "This report is not active for this product",
"productCommercialInsightsNotEligibleBody": "This summary is not available for this product or current business configuration.",
"productCommercialInsightsChecklistTitle": "Checklist:",
"productCommercialInsightsChecklistInventoryTracked": "Ensure inventory tracking is enabled for this product.",
"productCommercialInsightsChecklistConfirmedInvoice": "Ensure at least one confirmed purchase/sales invoice exists for this product.",
"productCommercialInsightsChecklistPostedWarehouseDoc": "Ensure related invoices have a posted warehouse document with source type invoice.",
"productCommercialInsightsReload": "Reload",
"productCommercialInsightsResetTooltip": "Reset",
"productCommercialInsightsNoData": "No data",
"productCommercialInsightsDocumentDate": "Document date",
"productCommercialInsightsParty": "Party",
"productCommercialInsightsDocumentCode": "Document code",
"productCommercialInsightsQuantity": "Quantity",
"productCommercialInsightsUnitPriceBase": "Unit price in base currency",
"productCommercialInsightsFxRateToBase": "Document to base FX rate",
"productCommercialInsightsChartDataMissing": "Chart data is not available.",
"productCommercialInsightsChartNoPoints": "No chart points for the selected range.",
"productCommercialInsightsLanePurchase": "Purchase",
"productCommercialInsightsLaneSale": "Sale",
"productCommercialInsightsLegendPurchaseAvg": "Weighted average purchase (base)",
"productCommercialInsightsLegendSaleAvg": "Weighted average sale (base)",
"productCommercialInsightsAvgUnitBaseLabel": "Average unit in base",
"productCommercialInsightsTotalQuantityLabel": "Total quantity",
"productCommercialInsightsBucketDay": "Day",
"productCommercialInsightsBucketWeek": "Week",
"productCommercialInsightsBucketMonth": "Month",
"productCommercialInsightsPreset30Days": "30 days",
"productCommercialInsightsPreset90Days": "90 days",
"productCommercialInsightsPreset6Months": "6 months",
"productCommercialInsightsPreset1Year": "1 year",
"productCommercialInsightsPresetCustom": "Custom",
"productCommercialInsightsFromDate": "From date",
"productCommercialInsightsToDate": "To date",
"productCommercialInsightsLastPurchase": "Last purchase",
"productCommercialInsightsLastSale": "Last sale",
"productCommercialInsightsTotalsInRange": "Totals in range",
"productCommercialInsightsPurchaseQuantity": "Purchase quantity",
"productCommercialInsightsSaleQuantity": "Sale quantity",
"productCommercialInsightsPurchaseLinesCount": "Purchase lines count",
"productCommercialInsightsSaleLinesCount": "Sale lines count",
"productCommercialInsightsTrendTitle": "Weighted average unit price trend (base currency)",
"productCommercialInsightsTopSuppliers": "Top suppliers in range",
"productCommercialInsightsTopBuyers": "Top buyers in range",
"productCommercialInsightsRecentEventsTitle": "Recent events (invoice lines)",
"productCommercialInsightsUnitShortLabel": "unit",
"warehouseCode": "Warehouse Code",
"warehouseName": "Warehouse Name",
"stockQuantity": "Quantity",
"totalStock": "Total Stock",
"noStockRecorded": "No stock recorded",
"inventoryNotTracked": "This product does not track inventory",
"stockReportDate": "Report Date",
"showZeroStock": "Show Zero Stock",
"refreshStock": "Refresh Stock",
"inventoryControl": "Inventory control",
"inventoryControlHelpSubtitle": "On: stock is tracked and this product is included on invoice-linked warehouse documents. Off: the product is skipped when warehouse drafts are generated from invoices.",
"inventoryControlHelpDetail": "Turning this off does not mean “allow posting issues with negative stock.” To sometimes post outgoing warehouse documents despite insufficient stock, use the shortage / negative-stock policy in business settings—that is separate from this switch.",
"inventoryUniqueModeRequiresTrack": "To use unique inventory mode, enable “inventory control” first",
"reorderPoint": "Reorder point",
"reorderPointRepeat": "Reorder point",
"minOrderQty": "Minimum order quantity",
"leadTimeDays": "Lead time (days)",
"pricing": "Pricing",
"productName": "Product name",
"barcode": "Barcode",
"productGeneralBarcodes": "General barcodes",
"productGeneralBarcodesHint": "Enter multiple codes separated by commas (English or Persian comma). Used for quick product lookup on invoices and optional PDF labels.",
"printGeneralBarcodeLabels": "Print general barcode labels (PDF)",
"generalBarcodeLabelsTitle": "General barcode labels",
"generalBarcodeLabelsNoneSelected": "No general barcodes found on selected products.",
"labelPdfDialogTitle": "Print labels",
"labelPdfContentSection": "Label content",
"labelPdfLinearBarcode": "Linear barcode",
"labelPdfQrCode": "QR code",
"labelPdfBarcodeAsText": "Barcode value as text",
"labelPdfProductName": "Product name",
"labelPdfSerialLine": "Serial line",
"labelPdfPaperLayoutSection": "Paper & layout",
"labelPdfPaperSize": "Paper size",
"labelPdfLandscape": "Landscape",
"labelPdfColumns": "Columns",
"labelPdfPageMarginPts": "Page margin (pt)",
"labelPdfPreview": "Preview",
"labelPdfSave": "Save PDF",
"labelPdfShare": "Share",
"labelPdfClose": "Close",
"labelPdfSaved": "PDF file saved",
"labelPdfSaveFailed": "Could not save PDF",
"labelPdfShareFailed": "Share failed",
"labelPdfBuildError": "Could not build PDF",
"labelPdfPreviewHintDesktop": "Zoom and scroll using the preview toolbar",
"labelPdfPreviewHintWeb": "On web: preview uses your browser PDF viewer (zoom via menu or Ctrl±)",
"labelPdfOrientationLandscape": "Landscape",
"labelPdfOrientationPortrait": "Portrait",
"generalInformation": "General information",
"imageNotAvailable": "Image not available",
"salesPrice": "Sales price",
"salesPriceNote": "Sales price note",
"purchasePrice": "Purchase price",
"purchasePriceNote": "Purchase price note",
"pricesInPriceLists": "Prices in price lists",
"addPrice": "Add price",
"price": "Price",
"currency": "Currency",
"noPriceListsTitle": "No price list",
"noPriceListsMessage": "To add a price, first create a price list.",
"noPriceListsHint": "Use \"Manage price lists\" button in Products page to create one.",
"gotIt": "Got it",
"unitsTitle": "Units",
"mainUnit": "Main unit",
"secondaryUnit": "Secondary unit",
"unitConversionFactor": "Unit conversion factor",
"itemType": "Type",
"type": "Type",
"productPhysicalDesc": "Physical products",
"serviceDesc": "Services",
"taxTitle": "Tax",
"taxCode": "Tax code",
"isSalesTaxable": "Sales taxable",
"salesTaxRate": "Sales tax rate (%)",
"isPurchaseTaxable": "Purchase taxable",
"purchaseTaxRate": "Purchase tax rate (%)",
"taxType": "Tax type",
"taxTypeId": "Tax type id",
"taxUnit": "Tax unit",
"taxUnitId": "Tax unit id",
"vatColumn": "VAT",
"taxVatPercent": "{value}%",
"@taxVatPercent": {
"description": "Formatted VAT percent value",
"placeholders": {
"value": {}
}
},
"taxVatUnknown": "Not specified",
"bulkPriceUpdateTitle": "Bulk price update",
"bulkPriceUpdateSubtitle": "Increase or decrease prices with advanced filters",
"bulkPriceUpdateApplyScopeTitle": "Apply to",
"bulkPriceUpdateScopeBase": "Base prices only",
"bulkPriceUpdateScopePriceLists": "Price lists only",
"bulkPriceUpdateScopeBoth": "Base prices and price lists",
"bulkPriceUpdateStatsTitle": "Summary stats",
"bulkPriceUpdateListOnlyTargetHint": "Only sale prices inside price lists will change.",
"bulkPriceUpdatePriceListsHint": "If none selected, all price lists (matching currency filter) apply.",
"bulkPriceUpdatePreviewListChanges": "Price list",
"bulkPriceUpdatePreviewListRowsCount": "{count} rows",
"@bulkPriceUpdatePreviewListRowsCount": {"placeholders": {"count": {"type": "int"}}},
"bulkPriceUpdateSummaryListRows": "Price list rows",
"bulkPriceUpdateSummaryListDelta": "Total price list delta",
"bulkProductPricesSheetTitle": "Bulk price sheet",
"bulkProductPricesSheetSubtitle": "Edit base and list prices in a spreadsheet. Product columns stay pinned; save applies to this page only.",
"bulkProductPricesSheetSave": "Save this page",
"bulkProductPricesSheetNext": "Next page",
"bulkProductPricesSheetPrev": "Previous page",
"bulkProductPricesSheetSearch": "Search",
"bulkProductPricesSheetClearSearch": "Clear",
"bulkProductPricesSheetNoChanges": "Nothing to save",
"bulkProductPricesSheetCode": "Code",
"bulkProductPricesSheetName": "Name",
"bulkProductPricesSheetPriceListsForColumns": "Price list columns",
"bulkProductPricesSheetSelectListsHint": "Select one or more price lists to show and edit list prices, then load the page.",
"bulkProductPricesSheetExportExcel": "Download Excel",
"bulkProductPricesSheetImportExcel": "Upload Excel",
"bulkProductPricesSheetExcelHint": "All products matching this search are exported. After editing prices, upload the file. Keep the worksheet name «BulkPrices»; pi_* columns are price-item IDs.",
"bulkProductPricesSheetGuideTitle": "Guide & Excel",
"bulkProductPricesSheetSearchSection": "Search & price lists",
"bulkProductPricesSheetTableSection": "Price grid",
"bulkProductPricesSheetMoreActions": "More actions",
"bulkProductPricesSheetNoRows": "No products on this page",
"bulkProductPricesSheetNoRowsHint": "Try another search or switch page.",
"bulkProductPricesSheetPageLabel": "Page",
"bulkProductPricesSheetPriceListPrices": "List prices",
"bulkProductPricesSheetUnsavedTitle": "Unsaved price changes",
"bulkProductPricesSheetUnsavedMessage": "This page has edits that are not saved yet. Discard them and continue?",
"bulkProductPricesSheetDiscardChanges": "Discard",
"bulkProductPricesSheetDirtyCount": "{count} unsaved",
"@bulkProductPricesSheetDirtyCount": {"placeholders": {"count": {"type": "int"}}},
"bulkProductPricesSheetNoPriceLists": "No price lists yet",
"bulkProductPricesSheetHelpTooltip": "Excel import and export help",
"preview": "Preview",
"applyChanges": "Apply changes",
"changeTypeAndDirection": "Change type & direction",
"changeTarget": "Target",
"changeAmount": "Change amount",
"filters": "Filters",
"previewChanges": "Preview changes",
"percentage": "Percentage",
"amount": "Amount",
"samplePercent": "e.g. 10%",
"sampleAmount": "e.g. 1,000,000",
"increase": "Increase",
"decrease": "Decrease",
"both": "Both",
"allCurrencies": "All currencies",
"priceList": "Price list",
"allPriceLists": "All lists",
"itemTypeLabel": "Item type",
"allTypes": "All types",
"productsWithInventoryOnly": "Only products with inventory",
"productsWithInventoryOnlySubtitle": "Only products with inventory control",
"productsWithBasePriceOnly": "Only products with base price",
"productsWithBasePriceOnlySubtitle": "Only products that have a base price",
"confirmChangesTitle": "Confirm changes",
"confirmApplyChangesForNProducts": "Apply changes to {count} products?",
"irreversibleWarning": "This action is irreversible.",
"summary": "Summary",
"totalProducts": "Total products",
"affectedProducts": "Affected products",
"salesPriceChanges": "Sales price changes",
"purchasePriceChanges": "Purchase price changes",
"codeLabel": "Code",
"salesLabel": "Sales",
"purchaseLabel": "Purchase",
"managePriceLists": "Manage price lists",
"noProductsReadAccess": "You do not have permission to view products & services",
"productId": "Product ID",
"invalid": "Invalid",
"unit": "Unit",
"minQty": "Minimum quantity",
"addPriceTitle": "Add price",
"editPriceTitle": "Edit price",
"productDeletedSuccessfully": "Product or service deleted successfully",
"productsDeletedSuccessfully": "Selected items deleted successfully",
"personsDeletedSuccessfully": "Selected persons deleted successfully",
"bulkDeleteResultTitle": "Bulk delete result",
"bulkDeleteDeletedLabel": "Deleted:",
"bulkDeleteSkippedLabel": "Could not delete:",
"bulkDeleteSkippedDetails": "Items that could not be deleted:",
"bulkDeletePartialSnack": "{deleted} deleted; {skipped} could not be deleted",
"@bulkDeletePartialSnack": {
"placeholders": {
"deleted": {"type": "int"},
"skipped": {"type": "int"}
}
},
"bulkDeleteFailedSnack": "No items could be deleted",
"bulkDeletePartialWithSample": "{deleted} deleted; {skipped} could not be deleted: {sample}",
"@bulkDeletePartialWithSample": {
"placeholders": {
"deleted": {"type": "int"},
"skipped": {"type": "int"},
"sample": {"type": "String"}
}
},
"bulkDeleteFailedWithSample": "No items could be deleted: {sample}",
"@bulkDeleteFailedWithSample": {
"placeholders": {
"sample": {"type": "String"}
}
},
"bulkDeleteAndMore": "... and {count} more",
"@bulkDeleteAndMore": {
"placeholders": {
"count": {"type": "int"}
}
},
"noRowsSelectedError": "No rows selected"
,
"deleteSelected": "Delete Selected",
"deletedSuccessfully": "Deleted successfully",
"comingSoon": "Coming soon",
"code": "Code",
"currency": "Currency",
"isDefault": "Default",
"description": "Description",
"actions": "Actions",
"yes": "Yes",
"no": "No",
"pettyCash": "Petty Cash",
"pettyCashManagement": "Petty Cash Management",
"addPettyCash": "Add Petty Cash",
"editPettyCash": "Edit Petty Cash",
"deletePettyCash": "Delete Petty Cash",
"viewPettyCash": "View Petty Cash",
"pettyCashName": "Petty Cash Name",
"pettyCashCode": "Petty Cash Code",
"pettyCashDescription": "Petty Cash Description",
"pettyCashCurrency": "Currency",
"pettyCashIsActive": "Active",
"pettyCashIsDefault": "Default",
"pettyCashCreatedSuccessfully": "Petty cash created successfully",
"pettyCashUpdatedSuccessfully": "Petty cash updated successfully",
"pettyCashDeletedSuccessfully": "Petty cash deleted successfully",
"pettyCashNotFound": "Petty cash not found",
"pettyCashNameRequired": "Petty cash name is required",
"duplicatePettyCashCode": "Duplicate petty cash code",
"invalidPettyCashCode": "Invalid petty cash code",
"pettyCashBulkDeleted": "Petty cash items deleted successfully",
"pettyCashListFetched": "Petty cash list fetched",
"pettyCashDetails": "Petty cash details",
"pettyCashExportExcel": "Export petty cash to Excel",
"pettyCashExportPdf": "Export petty cash to PDF",
"pettyCashReport": "Petty Cash Report"
,
"accountTypeBank": "Bank",
"accountTypeCashRegister": "Cash Register",
"accountTypePettyCash": "Petty Cash",
"accountTypeCheck": "Check",
"accountTypePerson": "Person",
"accountTypeProduct": "Product",
"accountTypeService": "Service",
"accountTypeAccountingDocument": "Accounting Document",
"printTemplatePublished": "Print template (Published)",
"noCustomTemplate": "— No custom template —",
"reload": "Reload",
"presetInvoicesList": "Invoices/List",
"presetInvoicesDetail": "Invoices/Detail",
"presetInvoicesReceipt": "Invoices/Receipt printer",
"presetReceiptsPaymentsList": "ReceiptsPayments/List",
"presetReceiptsPaymentsDetail": "ReceiptsPayments/Detail",
"presetExpenseIncomeList": "ExpenseIncome/List",
"presetDocumentsList": "Documents/List",
"presetDocumentsDetail": "Documents/Detail",
"presetTransfersList": "Transfers/List",
"presetTransfersDetail": "Transfers/Detail",
"presetWarehousePostalLabel": "Warehouse / postal label",
"reportTemplatesScopeAll": "All report types",
"reportTemplatesScopeCustom": "Custom (technical keys)",
"reportTemplateNewVisual": "قالب جدید — استودیو",
"reportTemplateNewHtml": "New — HTML (advanced)",
"reportTemplateMoreMenu": "More tools",
"reportTemplateExportJson": "Export JSON…",
"reportTemplateImportJson": "Import JSON…",
"reportTemplatePickExport": "Choose a template to export",
"reportTemplateImportDoneOpenHtml": "Form filled. Use \"New — HTML\" to review and save.",
"reportTemplatesLoadError": "Failed to load templates: {error}",
"@reportTemplatesLoadError": {"placeholders": {"error": {"type": "String"}}},
"reportTemplatePreviewTitle": "Template preview",
"reportTemplatePreviewHtmlTab": "HTML",
"reportTemplatePreviewPdfTab": "PDF",
"reportTemplatePreviewPdfBytes": "Generated PDF size: {bytes} bytes",
"@reportTemplatePreviewPdfBytes": {"placeholders": {"bytes": {"type": "String"}}},
"reportTemplateCopyPlaceholder": "Copy placeholder",
"reportTemplateCopied": "Copied to clipboard",
"reportTemplateStatusPublished": "Published",
"reportTemplateStatusDraft": "Draft",
"reportTemplateDefaultBadge": "Default",
"reportTemplateRowActions": "Actions",
"reportTemplatePublish": "Publish",
"reportTemplateUnpublish": "Unpublish",
"reportTemplatePreview": "Preview",
"reportTemplateEdit": "Edit",
"reportTemplateSetDefault": "Set as default",
"reportTemplateDelete": "Delete",
"reportTemplateExportThis": "Export JSON",
"reportTemplatesFilterScopeLabel": "Report scope",
"reportTemplateStatusFilterHint": "All statuses",
"reportTemplatePlaceholdersTitle": "Available placeholders",
"reportTemplateVariablesHelpButton": "Placeholder help",
"reportTemplatesSchemaFetchError": "Failed to load placeholder schema: {error}",
"@reportTemplatesSchemaFetchError": {"placeholders": {"error": {"type": "String"}}},
"reportTemplatesEmptyList": "No templates found",
"reportTemplateDeleteConfirmTitle": "Delete template",
"reportTemplateDeleteConfirmMessage": "Are you sure you want to delete this template? This cannot be undone.",
"reportTemplateSetDefaultTitle": "Confirm",
"reportTemplateSetDefaultMessage": "Use this template as the default for its module and subtype?",
"reportTemplateEditSaveError": "Could not save template: {error}",
"@reportTemplateEditSaveError": {"placeholders": {"error": {"type": "String"}}},
"reportTemplatePreviewError": "Preview failed: {error}",
"@reportTemplatePreviewError": {"placeholders": {"error": {"type": "String"}}},
"reportTemplateInvalidJsonError": "Invalid JSON: {error}",
"@reportTemplateInvalidJsonError": {"placeholders": {"error": {"type": "String"}}},
"reportTemplatePdfDownloadStarted": "PDF download started",
"reportTemplatePdfSavedToPath": "Saved to: {path}",
"@reportTemplatePdfSavedToPath": {"placeholders": {"path": {"type": "String"}}},
"reportTemplatePdfSavedGeneric": "File saved",
"reportTemplateDownload": "Download",
"reportTemplateOpenInNewTab": "Open in new tab",
"reportTemplatePdfInlineFailedHint": "In-page PDF preview failed; use the HTML tab.",
"reportTemplateBuilderDesignEmpty": "Visual builder design is empty.",
"reportTemplatePaperCustomLabel": "Custom paper size (optional)",
"reportTemplatePaperCustomHelper": "If set, this replaces the selected paper size (max 32 characters).",
"reportTemplateEditorTabCss": "CSS",
"reportTemplateEditorTabHeader": "Header",
"reportTemplateEditorTabFooter": "Footer",
"reportTemplatePageSettingsSection": "Page settings",
"reportTemplateFieldName": "Template name",
"reportTemplateFieldDescription": "Description",
"reportTemplateModuleKeyLabel": "module_key",
"reportTemplateSubtypeLabel": "subtype",
"reportTemplateModuleKeyTooltip": "API report module identifier.",
"reportTemplateSubtypeTooltip": "API report subtype (e.g. list or detail).",
"reportTemplateHintHtmlBody": "HTML body (Jinja2 placeholders allowed)",
"reportTemplateHintCss": "Optional CSS",
"reportTemplateHintHeaderHtml": "Optional header HTML",
"reportTemplateHintFooterHtml": "Optional footer HTML",
"printPdf": "Print PDF",
"generating": "Generating...",
"pdfSuccess": "PDF generated successfully",
"pdfError": "Error generating PDF",
"printTemplate": "Print template",
"templateStandard": "Standard template",
"templateCompact": "Compact template",
"templateDetailed": "Detailed template",
"templateCustom": "Custom template"
,
"invoicesListManage": "Manage invoices list",
"all": "All",
"invoiceTypeSales": "Sales",
"invoiceTypePurchase": "Purchase",
"invoiceTypeSalesReturn": "Sales return",
"invoiceTypePurchaseReturn": "Purchase return",
"invoiceTypeProduction": "Production",
"invoiceTypeDirectConsumption": "Direct consumption",
"invoiceTypeWaste": "Waste",
"documentDate": "Document date",
"totalAmount": "Total amount",
"invoicePaidAmount": "Invoice paid amount",
"invoiceRemainingAmount": "Invoice remaining amount",
"unknown": "Unknown",
"noInvoicesFound": "No invoices found",
"loadingInvoices": "Loading invoices...",
"errorLoadingInvoices": "Error loading invoices",
"proforma": "Proforma",
"finalized": "Finalized",
"clearDateFilter": "Clear date filter",
"deleteConfirmTitle": "Confirm delete",
"deleteInvoiceConfirm": "Are you sure you want to delete invoice {code}? This action is irreversible.",
"@deleteInvoiceConfirm": {"placeholders": {"code": {"type": "String"}}},
"deletedInvoiceSuccess": "Invoice {code} deleted successfully",
"@deletedInvoiceSuccess": {"placeholders": {"code": {"type": "String"}}},
"deleteInvoiceError": "Failed to delete invoice",
"deleteInvoiceErrorWithMessage": "Failed to delete invoice: {error}",
"@deleteInvoiceErrorWithMessage": {"placeholders": {"error": {"type": "String"}}},
"deleteInvoiceTaxWorkspaceError": "This invoice is in the tax workspace and cannot be deleted",
"deleteInvoiceReceiptPaymentsWarning": "Related receipt/payment documents:",
"deleteInvoiceWarehouseWarning": "Related finalized warehouse documents:",
"deleteInvoiceInstallmentsWarning": "This invoice has {count} installments that will be deleted",
"@deleteInvoiceInstallmentsWarning": {"placeholders": {"count": {"type": "String"}}}
,
"saveInvoice": "Save invoice",
"invoiceInfoTab": "Invoice info",
"productsServicesTab": "Products & services",
"transactionsTab": "Transactions",
"settingsTab": "Settings",
"invoiceCreatedSuccess": "Invoice created successfully",
"saveInvoiceErrorWithMessage": "Failed to save invoice: {error}",
"@saveInvoiceErrorWithMessage": {"placeholders": {"error": {"type": "String"}}}
,
"noRowsAdded": "No rows added",
"quantityUnit": "Quantity/Unit",
"unitPrice": "Unit price"
,
"installmentsTitle": "Installment sale",
"installmentsSubtitle": "If enabled, an installment plan will be saved with the invoice",
"installmentsSettingsSubtitle": "Manage installment plans and sales conditions",
"installmentsCount": "Number of installments",
"downPayment": "Down payment",
"interestRatePercent": "Total period interest (%)",
"installmentsPeriod": "Installment period",
"installmentsMonthly": "Monthly (30 days)",
"installmentsDaysBased": "By days",
"installmentDaysLength": "Length of each installment (days)",
"firstInstallmentDueDate": "First due date",
"invalidInstallmentsCount": "Invalid number of installments"
,
"unitPricePickHint": "Unit price (pick from list or enter manually)",
"unitPriceReadOnlyFieldHint": "No permission to edit unit price — use the list icon or product base price",
"lineTotalAmount": "Line total amount",
"lineDescription": "Line description",
"descriptionOptional": "Description (optional)",
"discountTypeAndValue": "Discount (type and value)",
"taxPercentAndAmount": "Tax (percent and amount)",
"selectUnitTitle": "Select unit",
"mainUnitLabel": "Main unit",
"secondaryUnitLabel": "Secondary unit",
"noUnitsDefined": "No units defined for this product",
"discountType": "Discount type",
"percent": "Percent",
"amount": "Amount",
"pricePickFromList": "Pick from price list",
"noPricesFound": "No prices to show",
"baseEstimatedPrice": "Estimated base price",
"priceListLabel": "Price list",
"productsAndServices": "Products/Services"
,
"kardexDocuments": "Kardex documents",
"documentCode": "Document code",
"documentType": "Document type",
"movementDirection": "Movement",
"movementIn": "Incoming",
"movementOut": "Outgoing",
"debit": "Debit",
"credit": "Credit",
"quantity": "Quantity",
"runningAmount": "Running amount",
"runningQuantity": "Running quantity",
"viewDocument": "View document",
"totalsDebit": "Total debit",
"totalsCredit": "Total credit",
"totalsQuantity": "Total quantity",
"totalsRunningAmount": "Running amount",
"totalsRunningQuantity": "Running quantity",
"addFilter": "Add filter",
"presetsTitle": "Presets",
"applyPreset": "Apply preset",
"deleteSelectedPreset": "Delete selected preset",
"savePreset": "Save preset",
"savePresetTitle": "Save preset",
"presetNameHint": "Enter preset name",
"presetSaved": "Preset saved",
"presetSaveError": "Error saving preset: {error}",
"@presetSaveError": {"placeholders": {"error": {"type": "String"}}},
"presetDeleteError": "Error deleting preset: {error}",
"@presetDeleteError": {"placeholders": {"error": {"type": "String"}}},
"presetApplyError": "Error applying preset: {error}",
"@presetApplyError": {"placeholders": {"error": {"type": "String"}}},
"fiscalYear": "Fiscal year",
"fiscalYears": "Fiscal years",
"addFilterPersons": "Add filter: People",
"addFilterProduct": "Add filter: Product/Service",
"addFilterBank": "Add filter: Bank",
"addFilterCash": "Add filter: Cash register",
"addFilterPetty": "Add filter: Petty cash",
"addFilterAccount": "Add filter: Ledger account",
"addFilterCheck": "Add filter: Check",
"matchModeAny": "Any",
"matchModeSameLine": "Same line",
"matchModeDocumentAnd": "Same document",
"resultScopeLinesMatching": "Only matching lines",
"resultScopeLinesOfDocument": "All lines of document",
"includeRunningBalance": "Include running balance",
"applyManually": "Apply manually",
"ledgerAccount": "Account",
"reportsGeneralSection": "General reports",
"reportsPeopleSection": "People reports",
"reportsProductsSection": "Products & services reports",
"reportsBankingSection": "Banking & cash reports",
"reportsSalesSection": "Sales reports",
"reportsPurchasesSection": "Purchase reports",
"reportsProductionSection": "Production reports",
"reportsBasicAccountingSection": "Basic accounting",
"reportsProfitLossSection": "Profit & loss",
"reportsKardexSubtitle": "Detailed transactions by person/product/bank/account/check with date filters",
"reportsDebtorsTitle": "Debtors list",
"reportsDebtorsSubtitle": "People with debit balances",
"reportsCreditorsTitle": "Creditors list",
"reportsCreditorsSubtitle": "People with credit balances",
"reportsPeopleTransactionsTitle": "Party subsidiary ledger",
"reportsPeopleTransactionsSubtitle": "Invoice line items with receipts and payments per person",
"reportsItemMovementsTitle": "Item movements",
"reportsItemMovementsSubtitle": "In, out and balance over a period",
"reportsInventoryKardexTitle": "Inventory kardex",
"reportsInventoryKardexSubtitle": "Per-item movement details (FIFO/LIFO/average)",
"reportsInventoryStockTitle": "Inventory stock report",
"reportsInventoryStockSubtitle": "Product inventory by warehouse and date",
"reportsSalesByProductTitle": "Sales by product",
"reportsSalesByProductSubtitle": "Performance of each product in time range",
"reportsBankAccountsTurnoverTitle": "Bank accounts turnover",
"reportsBankAccountsTurnoverSubtitle": "Withdrawals and deposits by account",
"reportsCashPettyTurnoverTitle": "Cash and petty cash turnover",
"reportsCashPettyTurnoverSubtitle": "Detailed cash in/out",
"reportsChecksTitle": "Checks",
"reportsChecksSubtitle": "Receivable, payable, due dates and statuses",
"reportsDailySalesTitle": "Daily sales",
"reportsDailySalesSubtitle": "Daily sales performance and trends",
"reportsMonthlySalesTitle": "Monthly sales",
"reportsMonthlySalesSubtitle": "Monthly comparison and sales growth",
"reportsTopCustomersTitle": "Top customers",
"reportsTopCustomersSubtitle": "Ranking by amount or count",
"reportsDailyPurchasesTitle": "Daily purchases",
"reportsDailyPurchasesSubtitle": "Daily purchase performance and trends",
"reportsTopSuppliersTitle": "Top suppliers",
"reportsTopSuppliersSubtitle": "Suppliers ranked by purchases",
"reportsMaterialsConsumptionTitle": "Materials consumption",
"reportsMaterialsConsumptionSubtitle": "Raw material consumption per product",
"reportsProductionTitle": "Production report",
"reportsProductionSubtitle": "Production volume and waste",
"reportsTrialBalanceTitle": "Trial balance",
"reportsTrialBalanceSubtitle": "2/4/6/8-column balance at multiple levels",
"reportsGeneralLedgerTitle": "General ledger",
"reportsGeneralLedgerSubtitle": "Account movements over a period",
"reportsJournalLedgerTitle": "Journal Ledger",
"reportsJournalLedgerSubtitle": "All financial transactions in chronological order",
"debitAccount": "Debit Account",
"creditAccount": "Credit Account",
"reportsPnlPeriodTitle": "Period profit and loss",
"reportsPnlPeriodSubtitle": "Revenue, expenses, and net profit/loss",
"reportsPnlCumulativeTitle": "Cumulative profit and loss",
"reportsAccountsReviewTitle": "Accounts review report",
"reportsAccountsReviewSubtitle": "Account tree structure with balances and transaction details",
"reportsBalanceSheetTitle": "Balance sheet",
"reportsBalanceSheetSubtitle": "Statement of financial position — assets, liabilities and equity",
"reportsFinancialPackageTitle": "Financial reports package",
"reportsFinancialPackageSubtitle": "Trial balance, balance sheet and P&L in one view",
"exportFinancialPackagePdf": "Combined PDF (financial package)",
"exportFinancialPackageExcel": "Combined Excel (financial package)",
"reportsPnlCumulativeSubtitle": "Periodical comparison and cumulative view",
"reportsComingSoonMessage": "This report will be available soon.",
"reportsSearchHint": "Search reports…",
"reportsSearchResults": "Results ({count})",
"reportsSearchNoResults": "No reports matched your search.",
"reportsFavoritesTitle": "Favorites",
"reportsFavoritesEmptyMessage": "For quick access, tap the star next to a report.",
"reportsRecentTitle": "Recently used",
"reportsRecentEmptyMessage": "Reports you open will show up here.",
"reportsWarehouseSection": "Warehouse reports",
"reportsSystemSection": "System reports",
"reportsActivityLogsTitle": "User activity logs",
"reportsActivityLogsSubtitle": "View the history of user activity in the system",
"reportsSectionCount": "{count} reports",
"reportsAddToFavorites": "Add to favorites",
"reportsRemoveFromFavorites": "Remove from favorites",
"reportsInstallmentsSubtitle": "Installment status, due dates, and remaining balance",
"reportsStockCountTitle": "Stock count report",
"reportsStockCountSubtitle": "Stock count history and adjustment documents",
"reportsWarehouseDocumentsSummaryTitle": "Warehouse documents summary",
"reportsWarehouseDocumentsSummarySubtitle": "Summary by document type with inbound/outbound stats",
"reportsSlowMovingItemsTitle": "Slow-moving items",
"reportsSlowMovingItemsSubtitle": "Items with no movement during the selected time range",
"reportsCriticalStockTitle": "Critical stock items",
"reportsCriticalStockSubtitle": "Items with stock below the defined threshold",
"reportsInterWarehouseTransfersTitle": "Inter-warehouse transfers",
"reportsInterWarehouseTransfersSubtitle": "Details of transfers between warehouses",
"reportsAdjustmentDocumentsTitle": "Adjustment documents",
"reportsAdjustmentDocumentsSubtitle": "Analysis of adjustment documents and inventory differences",
"reportsWarehousePerformanceTitle": "Warehouse performance",
"reportsWarehousePerformanceSubtitle": "Compare warehouse performance",
"reportsProductMovementHistoryTitle": "Product movement history",
"reportsProductMovementHistorySubtitle": "Full movement history of a product across all warehouses",
"reportsInventoryValuationTitle": "Inventory valuation",
"reportsInventoryValuationSubtitle": "Monetary valuation of warehouse inventories",
"reportsPendingDocumentsTitle": "Pending documents",
"reportsPendingDocumentsSubtitle": "Draft or pending-approval documents",
"reportsInventoryTurnoverTitle": "Inventory turnover",
"reportsInventoryTurnoverSubtitle": "Inventory turnover rate for products",
"reportsSortTooltip": "Sort",
"reportsSortDefault": "Default",
"reportsSortAlphabetical": "Alphabetical",
"operationSuccessful": "Operation successful",
"notificationsSettingsTitle": "Notification Settings",
"notificationsSettingsSubtitle": "Enable delivery channels, send test messages, and manage service credentials.",
"notificationsChannelsSectionTitle": "Delivery channels",
"notificationsChannelsSectionSubtitle": "Any enabled channel may be used for system notifications and operational alerts.",
"notificationsChannelTelegram": "Telegram",
"notificationsChannelTelegramDescription": "Send messages through a connected Telegram bot for operators.",
"notificationsChannelBale": "Bale",
"notificationsChannelBaleDescription": "Send messages through Bale messenger (connected bot).",
"notificationsBaleAdvancedTitle": "Bale advanced settings",
"notificationsBaleAdvancedSubtitle": "Configure Bale bot for notifications",
"notificationsFieldBaleToken": "Bale bot token",
"notificationsFieldBaleTokenHint": "Bot token from @BotFather in Bale",
"notificationsFieldBaleUsername": "Bale bot username",
"notificationsFieldBaleWebhookSecret": "Bale webhook secret",
"notificationsBaleConnected": "Connected",
"notificationsBaleNotConnected": "Not connected",
"notificationsBaleConnectButton": "Connect Bale",
"notificationsBaleDisconnectButton": "Disconnect Bale",
"notificationsBaleConnecting": "Connecting...",
"notificationsBaleConnectionWarning": "To enable Bale notifications, please connect first.",
"notificationsBaleLinkInstructions": "Click the link below or open the bot in Bale and send /start {token}.",
"notificationsBaleLinkExpired": "Connection link expired. Please create a new link.",
"notificationsBaleConnectedSince": "Connected since {date}",
"@notificationsBaleConnectedSince": {
"placeholders": {
"date": {"type": "String"}
}
},
"@notificationsBaleLinkInstructions": {
"placeholders": {
"token": {"type": "String"}
}
},
"notificationsBaleConnectionSuccess": "Bale connected successfully.",
"notificationsBaleConnectionError": "Error connecting Bale.",
"notificationsBaleDisconnectSuccess": "Bale disconnected.",
"notificationsBaleDisconnectError": "Error disconnecting Bale.",
"notificationsChannelEmail": "Email",
"notificationsChannelEmailDescription": "Send emails using the server configured in system settings.",
"notificationsChannelSms": "SMS",
"notificationsChannelSmsDescription": "Send SMS via your configured provider for sensitive events.",
"notificationsChannelInApp": "In-app",
"notificationsChannelInAppDescription": "Display notifications inside Hesabix web and mobile in real time.",
"notificationsSaveSuccess": "Notification settings saved.",
"notificationsSaveError": "Failed to save notification settings.",
"notificationsTestSectionTitle": "Send test message",
"notificationsTestSectionSubtitle": "After any change, use the selected channel to send a test.",
"notificationsTestButton": "Test {channel}",
"@notificationsTestButton": {
"placeholders": {
"channel": {
"type": "String",
"description": "Localized channel title."
}
}
},
"notificationsTestSuccess": "Test message sent via {channel}.",
"@notificationsTestSuccess": {
"placeholders": {
"channel": {
"type": "String",
"description": "Localized channel title."
}
}
},
"notificationsTestError": "Failed to send test message via {channel}.",
"@notificationsTestError": {
"placeholders": {
"channel": {
"type": "String",
"description": "Localized channel title."
}
}
},
"notificationsWebsocketInfoTitle": "Realtime in-app notifications",
"notificationsWebsocketInfoDescription": "Users connect with a valid API key to the websocket endpoint {endpoint}. Web and mobile apps establish this connection automatically.",
"@notificationsWebsocketInfoDescription": {
"placeholders": {
"endpoint": {
"type": "String",
"description": "Websocket URL."
}
}
},
"notificationsAdvancedSectionTitle": "Advanced configuration (admin)",
"notificationsAdvancedSectionSubtitle": "Manage Telegram and SMS validation here. Requires system_settings access.",
"notificationsAdvancedTelegramHeader": "Telegram bot setup",
"notificationsFieldTelegramToken": "Bot token",
"notificationsFieldTelegramUsername": "Bot username",
"notificationsFieldTelegramWebhookSecret": "Webhook secret",
"notificationsFieldTelegramSecretHeader": "Secret header name",
"notificationsFieldTelegramTokenHint": "Issued by BotFather (format: 123456789:ABC...).",
"notificationsFieldTelegramWebhookSecretHint": "Optional; used to validate incoming requests.",
"notificationsAdvancedSmsHeader": "SMS gateway",
"notificationsFieldSmsProvider": "Provider name",
"notificationsFieldSmsApiKey": "API key",
"notificationsFieldSmsApiKeyHint": "Provided by your SMS vendor; rotate periodically.",
"notificationsFieldSmsSender": "Sender/Number",
"notificationsFieldSmsSenderHint": "Exactly as registered in your vendor panel.",
"notificationsProxySectionTitle": "Telegram proxy",
"notificationsProxySectionSubtitle": "When servers are hosted inside Iran, enable the proxy to route Telegram traffic through an external relay.",
"notificationsProxyEnableLabel": "Enable Telegram proxy",
"notificationsFieldTelegramProxyBaseUrl": "Proxy base URL",
"notificationsFieldTelegramProxyApiKey": "Proxy access key",
"notificationsAdvancedRestartHint": "After changes, restart the notification service during low traffic if needed.",
"notificationsAdvancedSave": "Save advanced settings",
"notificationsAdvancedSaveSuccess": "Advanced notification settings saved.",
"notificationsAdvancedSaveError": "Failed to save advanced notification settings.",
"notificationsTelegramConnectionStatus": "Connection status",
"notificationsTelegramConnected": "Connected",
"notificationsTelegramNotConnected": "Not connected",
"notificationsTelegramConnectButton": "Connect Telegram",
"notificationsTelegramDisconnectButton": "Disconnect",
"notificationsTelegramConnecting": "Connecting...",
"notificationsTelegramConnectionWarning": "To enable Telegram notifications, please connect first.",
"notificationsTelegramConnectionSuccess": "Telegram connection established successfully.",
"notificationsTelegramConnectionError": "Failed to connect Telegram.",
"notificationsTelegramDisconnectSuccess": "Telegram connection disconnected.",
"notificationsTelegramDisconnectError": "Failed to disconnect Telegram.",
"notificationsTelegramLinkExpired": "Connection link expired. Please create a new link.",
"notificationsTelegramLinkInstructions": "Click the link below or open the bot in Telegram and send /start {token}.",
"notificationsTelegramLinkExpiresIn": "This link expires in {minutes} minutes.",
"notificationsTelegramConnectedSince": "Connected since {date}",
"@notificationsTelegramLinkExpiresIn": {
"placeholders": {
"minutes": {
"type": "int",
"format": "decimalPattern"
}
}
},
"@notificationsTelegramConnectedSince": {
"placeholders": {
"date": {
"type": "String"
}
}
},
"@notificationsTelegramLinkInstructions": {
"placeholders": {
"token": {
"type": "String"
}
}
},
"templateBuilderNew": "Visual Builder (New)",
"templateBuilderEdit": "Visual Builder (Edit)",
"undo": "Undo",
"redo": "Redo",
"header": "Header",
"body": "Body",
"footer": "Footer",
"globalCssOptional": "Global CSS (optional)",
"previewPdf": "Preview PDF",
"previewHtmlOutput": "Preview HTML (render output)",
"empty": "(empty)",
"createTemplateBuilder": "Create template (Builder)",
"saveChanges": "Save changes",
"createdWithId": "Created (ID: {id})",
"@createdWithId": {
"placeholders": {
"id": {
"type": "int"
}
}
},
"previewError": "Preview error: {error}",
"@previewError": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"createError": "Create error: {error}",
"@createError": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"templateCreatedWithId": "Template created (ID: {id})",
"@templateCreatedWithId": {
"placeholders": {
"id": {
"type": "int"
}
}
},
"addText": "Add text",
"divider": "Divider",
"spacer": "Spacer",
"addImage": "Add image",
"addQr": "Add QR",
"partyInfo": "Party info",
"addTotals": "Add totals",
"stampSignature": "Stamp/Signature",
"watermark": "Watermark",
"addTable": "Add table",
"textWithVariable": "Text (variable)",
"alignment": "Alignment",
"left": "Left",
"center": "Center",
"right": "Right",
"showIfCondition": "Show if (condition)",
"blockType": "Block {type}",
"@blockType": {
"placeholders": {
"type": {
"type": "String"
}
}
},
"pageSize": "Page size",
"orientation": "Orientation",
"portrait": "Portrait",
"landscape": "Landscape",
"marginTop": "Top margin (mm)",
"marginRight": "Right (mm)",
"marginBottom": "Bottom (mm)",
"marginLeft": "Left (mm)",
"create": "Create",
"walletBusinessTitle": "Business wallet",
"walletAvailableBalance": "Available balance",
"walletPendingBalance": "Pending balance",
"walletRequestPayout": "Request payout",
"walletTopUp": "Top up",
"walletLast30Days": "Last 30 days report",
"walletGrossIn": "Gross in",
"walletFeesIn": "Fees in",
"walletNetIn": "Net in",
"walletGrossOut": "Gross out",
"walletFeesOut": "Fees out",
"walletNetOut": "Net out",
"walletRecentTransactions": "Recent transactions",
"walletTransactions": "Transactions",
"moneyAmount": "Amount",
"feeAmount": "Fee",
"document": "Document",
"walletTypeTopUp": "Top up",
"walletTypeCustomerPayment": "Customer payment",
"walletTypePayoutRequest": "Payout request",
"walletTypePayoutSettlement": "Payout settlement",
"walletTypeRefund": "Refund",
"walletTypeFee": "Fee",
"statusApproved": "Approved",
"statusProcessing": "Processing",
"statusSucceeded": "Succeeded",
"statusFailed": "Failed",
"statusCanceled": "Canceled",
"walletPayoutRequestTitle": "Payout request",
"walletSelectBankAccountHint": "Select bank account",
"walletPaymentGateway": "Payment gateway",
"walletPayoutRequested": "Payout request submitted",
"settingsWalletPayoutsAdmin": "Wallet payout management",
"settingsWalletPayoutsAdminDescription": "Review wallet payout requests and record bank settlement details",
"walletPayoutsAdminTitle": "Wallet payout requests",
"walletPayoutsAdminSubtitle": "Monitor pending payout requests, review bank account details, and register settlement information after transfers are completed.",
"walletPayoutsAdminEmpty": "No payout requests to show.",
"walletPayoutsAdminSettleDialogTitle": "Record settlement information",
"walletPayoutsAdminSettleAction": "Record & settle",
"walletPayoutsAdminSuccess": "Settlement information saved successfully.",
"walletPayoutsAdminFormRequired": "This field is required",
"walletPayoutsAdminSettlementDate": "Settlement date",
"walletPayoutsAdminFeeHint": "If the bank charged a fee, enter the amount here",
"walletPayoutsAdminApproveRequest": "Approve payout request",
"walletPayoutsAdminApproveSuccess": "Payout request approved.",
"walletPayoutOpenRequestsSection": "Open payout requests",
"walletPayoutApproveForPayout": "Approve for bank transfer",
"walletPayoutCancelRequest": "Cancel payout request",
"walletPayoutApproveSuccess": "Request approved. Settlement will be completed after the transfer is processed.",
"walletPayoutCancelSuccess": "Payout request canceled.",
"walletPayoutCancelConfirm": "Cancel this payout request and return the amount to your available balance?",
"bankTrackingCode": "Bank tracking code",
"walletTopUpTitle": "Top up",
"walletTopUpInitializing": "Submitting request and preparing payment gateway...",
"walletRedirectingToGateway": "Redirecting to payment gateway...",
"walletTopUpNoPaymentLink": "Top-up request submitted, but no payment link received. Please try again later or check gateway settings.",
"walletGatewayInitFailed": "Error connecting to gateway. Please check settings or try again later.",
"walletInvalidGatewayConfig": "Gateway configuration is incomplete. Please check merchant ID and callback URL.",
"walletGatewayDisabled": "This gateway is disabled.",
"walletGatewayNotFound": "Payment gateway not found.",
"walletGatewayServerError": "Server error connecting to gateway. Please try again later.",
"walletOpenGatewayDialogTitle": "Redirect to payment gateway",
"walletOpenGatewayDialogInstructions": "To continue, open the link below:",
"walletPaymentResultTitle": "Wallet payment result",
"walletPaymentSuccess": "Payment completed successfully",
"walletPaymentFailed": "Payment failed",
"transactionId": "Transaction ID",
"paymentReference": "Payment reference",
"walletStatusCheckErrorPrefix": "Error checking status:",
"walletBackToWallet": "Back to wallet",
"walletSettingsTitle": "Wallet settings",
"walletBaseCurrency": "Wallet base currency",
"walletCurrencyRequired": "Currency selection is required",
"saved": "Saved",
"savedSuccessfully": "Saved successfully",
"currencyToman": "Toman",
"creditSettingsTitle": "Customer credit",
"creditSettingsSubtitle": "Configure credit limits and delay policies",
"creditEnableTitle": "Enable credit",
"creditEnableSubtitle": "Check customer credit limit during sales",
"creditDefaultLimit": "Default credit limit",
"creditGraceDays": "Grace period (days)",
"creditLateFeeRatePercent": "Late fee (%)",
"creditAutoBlockAfterDays": "Auto block after (days)",
"creditStrategy": "Strategy",
"creditStrategySingleDefault": "Single default limit",
"creditStrategyByGroup": "By group/role",
"creditStrategyPerUser": "Per-user limit",
"installmentPlansTitle": "Installment plans",
"newInstallmentPlan": "New plan",
"editPlan": "Edit",
"deletePlan": "Delete",
"deletePlanConfirm": "Delete plan \"{name}\"?",
"@deletePlanConfirm": {"placeholders": {"name": {"type": "String"}}},
"installmentPlanCreateTitle": "New installment plan",
"installmentPlanEditTitle": "Edit installment plan",
"planName": "Plan name",
"planMethod": "Calculation method",
"planMethodFlat": "Flat",
"planMethodAmortized": "Amortized",
"planNumInstallments": "Number of installments",
"planPeriodDays": "Interval (days)",
"planDownPaymentPercent": "Down payment (%)",
"planInterestRate": "Total interest (%)",
"planLateFeeRate": "Late fee (%)",
"planIssueFee": "Issue fee (toman)",
"planIsActive": "Active",
"creditTabTitle": "Credit",
"personOpeningBalanceTabTitle": "Opening balance",
"personOpeningBalanceSectionTitle": "Opening balance (opening document)",
"personOpeningBalanceAmountLabel": "Balance amount",
"personOpeningBalanceTypeLabel": "Balance type",
"personOpeningBalanceTypeDebit": "Debit (person owes the business)",
"personOpeningBalanceTypeCredit": "Credit (business owes the person)",
"personOpeningBalanceHint": "The balance is recorded in the fiscal year opening document, not on the person profile.",
"personOpeningBalanceFiscalYear": "Fiscal year",
"personOpeningBalanceAmountRequired": "Opening balance amount must be greater than zero",
"personOpeningBalanceSaved": "Balance recorded in the opening document",
"personOpeningBalanceNotEligiblePosted": "Opening balance is finalized; initial balance cannot be set from this form.",
"personOpeningBalanceNotEligibleOtherDocs": "Other documents exist in this fiscal year; use invoice, receipt/payment, or manual entry.",
"personOpeningBalanceNotEligibleNoPermission": "Editing opening balance permission is required to set an opening balance.",
"personOpeningBalanceReadonlyBanner": "Opening balance is read-only and cannot be edited.",
"personOpeningBalanceClearHint": "To remove the opening balance line, clear the amount and save.",
"personOpeningBalanceUpdated": "Opening balance updated in the opening document",
"personOpeningBalanceRemoved": "Opening balance removed from the opening document",
"creditPersonPolicyTitle": "Person credit policy",
"creditCheckModeLabel": "Credit check mode",
"creditCheckModeInherit": "Inherit from business settings",
"creditCheckModeEnabled": "Credit check enabled",
"creditCheckModeDisabled": "Credit check disabled",
"creditLimitLabel": "Custom credit limit",
"creditLimitHint": "Leave empty to use business default",
"creditTipText": "Leaving empty or choosing inherit uses the business default credit settings.",
"selectInstallmentPlan": "Select installment plan",
"applyPlan": "Apply plan",
"taxWorkspaceMenu": "Tax workspace",
"taxWorkspaceTitle": "Tax workspace",
"taxWorkspaceSubtitle": "Review invoices before sending them to the tax system.",
"taxTestConnectionButton": "Test connection",
"taxTestConnectionResultTitle": "Connection test result",
"taxTestConnectionDone": "Connection test completed",
"taxTestConnectionSuccess": "Connected to Modian successfully",
"taxTestConnectionWithWarnings": "Connected, but configuration warnings exist",
"taxTestConnectionIdentityFailed": "Possible key/certificate mismatch with Modian memory (error 4103)",
"taxTestConnectionJwtTitle": "Modian token claims",
"taxTestConnectionJwtSub": "Memory ID (sub)",
"taxTestConnectionJwtTaxpayer": "Taxpayer ID",
"taxTestConnectionMemoryMismatch": "Token memory ID does not match settings",
"taxTestConnectionEconomicMismatch": "Token taxpayer ID does not match economic code in settings",
"taxConfigurationWarningsTitle": "Modian configuration warnings",
"taxIdentityCheckTitle": "Signature identity check",
"taxSandboxModeActive": "Sandbox mode is enabled",
"taxIntegrationTitle": "Tax system integration",
"taxIntegrationSubtitle": "Manage credentials and keys required to connect to the national tax platform.",
"moadianPluginInactiveTitle": "Modian add-on is not active",
"moadianPluginInactiveMessage": "To use the tax workspace and submit invoices to the national platform, activate or purchase the Modian integration add-on from the marketplace.",
"moadianPluginGoToMarketplace": "Go to add-on marketplace",
"moadianPermissionView": "View Modian workspace",
"moadianPermissionOperate": "Send and operate Modian workspace",
"moadianPermissionManageSettings": "Manage Modian connection settings",
"moadianPermissionExportReports": "Export Modian submission reports",
"moadianMenuSection": "Modian tax system",
"taxSettingsTabConnection": "Connection & basics",
"taxSettingsTabKeys": "Keys & certificates",
"taxSettingsTabDataQuality": "Data quality",
"taxSettingsTabGuide": "Guide",
"taxGuideIntroTitle": "How to complete the Tax System setup?",
"taxGuideIntroDescription": "This guide walks through the entire integration flow with the Iranian Taxpayers System in the new Hesabix version—from key generation to data quality checks and invoice submission.",
"taxGuidePrereqTitle": "Prerequisites before you begin",
"taxGuidePrereqItem1": "Access to the “Tax System” menu as a business admin",
"taxGuidePrereqItem2": "Accurate registration data (national ID, economic code, corporate email)",
"taxGuidePrereqItem3": "Active access to your taxpayer workspace on my.tax.gov.ir",
"taxGuideStep1Title": "1) Generate keys inside Hesabix",
"taxGuideStep1Description": "Use the “Generate new keys” card to create the private/public key pair and CSR.",
"taxGuideStep1Bullet1": "Open the Keys & Certificates tab and tap the generate button.",
"taxGuideStep1Bullet2": "Provide the exact taxpayer type and national ID.",
"taxGuideStep1Bullet3": "Persian/English names and email must match the tax records.",
"taxGuideStep2Title": "2) Download and store securely",
"taxGuideStep2Description": "Keys are shown only once; store them safely.",
"taxGuideStep2Bullet1": "Download the key files and keep them in offline, encrypted storage.",
"taxGuideStep2Bullet2": "Never share the private key outside the tax integration team.",
"taxGuideStep2Bullet3": "If the private key is lost you must regenerate the entire pair.",
"taxGuideStep3Title": "3) Register the public key on my.tax.gov.ir",
"taxGuideStep3Description": "You must upload the Public Key to obtain the tax memory ID.",
"taxGuideStep3Bullet1": "Log into my.tax.gov.ir and navigate to Case Access > Enrollment > Tax Memory ID.",
"taxGuideStep3Bullet2": "Select “By taxpayer” and upload the generated Public Key file.",
"taxGuideStep3Bullet3": "Copy the issued memory ID and paste it back into Hesabix.",
"taxGuideStep4Title": "4) Complete the connection form in Hesabix",
"taxGuideStep4Description": "Tax memory ID, economic code and private key are mandatory under the Connection tab.",
"taxGuideStep4Bullet1": "Enter the ID and economic code without extra spaces.",
"taxGuideStep4Bullet2": "Use Generate new keys to create private key, public key, and CSR; register the CSR with your CA and save the issued certificate (.crt) here.",
"taxGuideStep4Bullet3": "Enable sandbox mode only for staging/testing environments.",
"taxGuideStep5Title": "5) Request the intermediate certificate via CSR",
"taxGuideStep5Description": "Legal entities must submit the CSR to the national certificate authority.",
"taxGuideStep5Bullet1": "Visit gica.ir and choose the CSR-based request option.",
"taxGuideStep5Bullet2": "Fill in the company details and pay the issuance fee.",
"taxGuideStep5Bullet3": "After in-person verification upload the issued certificate into Hesabix.",
"taxGuideStep6Title": "6) Assign product/service tax codes",
"taxGuideStep6Description": "Invoices will be rejected if items lack tax code and unit.",
"taxGuideStep6Bullet1": "Edit each item under Products & Services and add the 13-digit tax code.",
"taxGuideStep6Bullet2": "Use the public code list from stuffid.tax.gov.ir or request dedicated codes.",
"taxGuideStep6Bullet3": "Service codes can be obtained from portal.gs1-ir.org.",
"taxGuideStep7Title": "7) Run data quality checks before submission",
"taxGuideStep7Description": "Review the Data Quality tab and the tax workspace before sending invoices.",
"taxGuideStep7Bullet1": "The Data Quality tab highlights missing fields for products, customers and invoices.",
"taxGuideStep7Bullet2": "Add invoices to the tax workspace first and fix validation errors inline.",
"taxGuideStep7Bullet3": "Send single or bulk invoices only after the checklist is green.",
"taxGuideResourcesTitle": "Shortcuts and resources",
"taxGuideResourcesWorkspace": "Tax workspace: available under Sales > Tax Workspace.",
"taxGuideResourcesProducts": "Products & Services: update tax codes via the same menu or Excel import.",
"taxGuideResourcesSupport": "For integration issues review the Tax Settings logs or open a support ticket.",
"taxMemoryIdLabel": "Tax memory ID",
"taxEconomicCodeLabel": "Economic code",
"taxSandboxModeLabel": "Sandbox mode",
"taxSandboxModeSubtitle": "When enabled, requests are sent to the sandbox environment.",
"taxPrivateKeyLabel": "Private key (PEM)",
"taxPublicKeyLabel": "Public key (optional)",
"taxCertificateLabel": "Digital certificate (optional)",
"taxCertificateRequestLabel": "Certificate request (CSR)",
"taxGenerateKeys": "Generate new keys",
"taxMemoryIdRequired": "Tax memory ID is required",
"taxEconomicCodeRequired": "Economic code is required",
"taxPrivateKeyRequired": "Private key is required",
"taxKeysGenerated": "Keys generated successfully",
"taxSettingsSaved": "Tax integration settings saved",
"taxLastUpdated": "Last updated: {date}",
"@taxLastUpdated": {
"placeholders": {
"date": {
"type": "String"
}
}
},
"taxPersonTypeLabel": "Taxpayer type",
"taxPersonTypeNatural": "Individual",
"taxPersonTypeLegal": "Legal entity",
"taxNationalIdLabel": "National ID (10 digits)",
"taxNationalIdLegalLabel": "Company national ID (11 digits)",
"taxNationalIdNaturalInvalid": "National ID must be 10 digits",
"taxNationalIdLegalInvalid": "Company national ID must be 11 digits",
"taxNaturalNameFaLabel": "Full name (Persian)",
"taxLegalNameFaLabel": "Persian company name",
"taxGenerateKeysCsrMissing": "CSR was not generated. Check taxpayer type and identity fields.",
"taxGenerateKeysCsrHint": "After generation, submit the CSR to your certificate authority and upload the issued certificate to the Modian portal.",
"taxLegalNameEnLabel": "English company name",
"taxLegalEmailLabel": "Corporate email",
"taxDataQualityTitle": "Data quality check",
"taxDataQualitySubtitle": "Review missing tax data before submitting invoices.",
"taxDataQualityReload": "Refresh report",
"taxDataQualityProductsHeader": "Products & services",
"taxDataQualityPersonsHeader": "Persons & customers",
"taxDataQualityMissingTaxCode": "Items missing tax code",
"taxDataQualityMissingTaxUnit": "Items missing tax unit",
"taxDataQualityMissingNationalId": "Persons missing national ID",
"taxDataQualityMissingEconomicId": "Persons missing economic ID",
"taxDataQualitySamples": "Samples",
"taxDataQualityNoSamples": "No samples available.",
"taxDataQualityNoIssues": "All good! No pending data issues.",
"taxDataQualityNoData": "No report to display.",
"taxDataQualityFetchError": "Failed to fetch quality report: {error}",
"@taxDataQualityFetchError": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"taxDataQualityTaxCodeLabel": "Tax code",
"taxDataQualityTaxUnitLabel": "Tax unit",
"taxDataQualityNationalIdLabel": "National ID",
"taxDataQualityEconomicIdLabel": "Economic ID",
"taxValidationIssuesTitle": "Tax validation issues",
"taxValidationIssuesDescription": "Resolve the following items before sending invoices to the tax platform.",
"taxValidationIssuesEmpty": "No issue details provided.",
"taxValidationIssuesCategoryPerson": "Person Issues",
"taxValidationIssuesCategoryProduct": "Product/Service Issues",
"taxValidationIssuesCategoryOther": "Other Issues",
"taxValidationIssuesEditInvoice": "Edit Invoice",
"taxValidationIssuesLineNumber": "Line",
"taxSubmissionFailedTitle": "Tax submission failed",
"taxSubmissionFailedDescription": "The tax authority rejected this invoice. Error details and the authority response are shown below.",
"taxViewFailureDetails": "View error details",
"taxErrorMessageColumn": "Error message",
"taxMoadianResponseTitle": "Tax authority response",
"taxTechnicalDetailsTitle": "Technical details (raw response)",
"taxNoErrorDetails": "No error details recorded.",
"taxErrorCodeLabel": "Error code",
"taxCancelInModian": "Cancel in Modian",
"taxCancelInModianDialogTitle": "Cancel in tax system",
"taxCancelInModianDialogMessage": "Cancel invoice {code} in Modian?",
"@taxCancelInModianDialogMessage": {
"placeholders": {
"code": {"type": "String"}
}
},
"taxCancelInModianSuccess": "Cancellation request sent to Modian.",
"taxSendCorrective": "Send corrective",
"taxSendCorrectiveDialogTitle": "Send corrective invoice",
"taxSendCorrectiveDialogMessage": "Send corrective invoice for {code} to Modian?",
"@taxSendCorrectiveDialogMessage": {
"placeholders": {
"code": {"type": "String"}
}
},
"taxSendCorrectiveSuccess": "Corrective invoice sent to Modian.",
"taxLinkReference": "Link reference invoice",
"taxLinkReferenceDialogTitle": "Select sales reference invoice",
"taxLinkReferenceSuccess": "Reference invoice linked.",
"taxLinkReferenceEmpty": "No submitted sales invoice found to link.",
"taxReferenceInvoiceColumn": "Reference invoice",
"taxCancelledInModianBadge": "Cancelled in Modian",
"taxAddToWorkspaceSingle": "Add to tax workspace",
"taxRemoveFromWorkspaceSingle": "Remove from tax workspace",
"taxStatus": "Tax status",
"taxInWorkspace": "In tax workspace",
"taxNotInWorkspace": "Not in tax workspace",
"taxStatusPending": "Pending",
"taxStatusSent": "Sent",
"taxStatusFinalized": "Finalized",
"taxStatusFailed": "Failed",
"installmentColumn": "Installment",
"documentDetailsInstallmentsTab": "Installments",
"documentDetailsInstallmentsEmptySchedule": "No installment rows were found for this invoice.",
"documentDetailsInstallmentsAmountsNote": "All amounts are in {currency}.",
"@documentDetailsInstallmentsAmountsNote": {
"placeholders": {
"currency": {
"type": "String"
}
}
},
"documentDetailsInstallmentReceive": "Record receipt",
"documentDetailsInstallmentReceiptTypeOnly": "Installment allocation is only available with a receipt for this invoice type.",
"documentDetailsInstallmentDocCodeColumn": "Document",
"documentDetailsInstallmentPaymentDateColumn": "Document date",
"taxStatusNotSent": "Not sent",
"taxAddToWorkspaceNotAllowed": "This invoice cannot be added to the tax workspace.",
"taxAddToWorkspaceDialogTitle": "Add to tax workspace",
"taxAddToWorkspaceDialogMessage": "Add invoice {code} to tax workspace?",
"@taxAddToWorkspaceDialogMessage": {
"placeholders": {
"code": {
"type": "String"
}
}
},
"taxAddToWorkspaceSuccess": "Invoice {code} added to tax workspace.",
"@taxAddToWorkspaceSuccess": {
"placeholders": {
"code": {
"type": "String"
}
}
},
"taxAddToWorkspaceError": "Failed to add to tax workspace.",
"taxAddToWorkspaceErrorWithMessage": "Failed to add to tax workspace: {error}",
"@taxAddToWorkspaceErrorWithMessage": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"taxRemoveFromWorkspaceDialogTitle": "Remove from tax workspace",
"taxRemoveFromWorkspaceDialogMessage": "Remove invoice {code} from tax workspace?",
"@taxRemoveFromWorkspaceDialogMessage": {
"placeholders": {
"code": {
"type": "String"
}
}
},
"taxRemoveFromWorkspaceSuccess": "Invoice removed from tax workspace.",
"taxRemoveFromWorkspaceError": "Failed to remove from tax workspace.",
"taxRemoveFromWorkspaceErrorWithMessage": "Failed to remove from tax workspace: {error}",
"@taxRemoveFromWorkspaceErrorWithMessage": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"taxWorkspaceEmpty": "No invoices in tax workspace.",
"taxWorkspaceLoading": "Loading tax workspace...",
"taxWorkspaceError": "Error loading tax workspace.",
"taxSendSingle": "Send to tax system",
"taxTrackingCode": "Tracking code",
"taxLastSendAt": "Last sent at",
"taxSendSingleDialogTitle": "Send to tax system",
"taxSendSingleDialogMessage": "Send invoice {code} to tax system?",
"@taxSendSingleDialogMessage": {
"placeholders": {
"code": {
"type": "String"
}
}
},
"taxSendSuccess": "Sent to tax system.",
"taxSendErrorWithMessage": "Failed to send to tax system: {error}",
"@taxSendErrorWithMessage": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"taxSendSelectedTooltip": "Send selected invoices to tax system",
"taxSendSelectedButton": "Send selected ({count})",
"@taxSendSelectedButton": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"taxRemoveSelectedTooltip": "Remove selected invoices from tax workspace",
"taxRemoveSelectedButton": "Remove selected ({count})",
"@taxRemoveSelectedButton": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"taxSendSelectedDialogTitle": "Send selected to tax system",
"taxSendSelectedDialogMessage": "Send {count} selected invoices to tax system?",
"@taxSendSelectedDialogMessage": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"taxSendSelectedSuccess": "Selected invoices sent to tax system.",
"taxSendSelectedAllAlreadySent": "All selected invoices have already been sent.",
"taxSendSelectedSomeAlreadySent": "{skipped} invoice(s) have already been sent. Send {count} remaining invoice(s)?",
"@taxSendSelectedSomeAlreadySent": {
"placeholders": {
"skipped": {
"type": "int"
},
"count": {
"type": "int"
}
}
},
"taxSendSelectedErrorWithMessage": "Failed to send selected invoices: {error}",
"@taxSendSelectedErrorWithMessage": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"taxSendSelectedPartialTitle": "{success} sent, {failed} failed",
"@taxSendSelectedPartialTitle": {
"placeholders": {
"success": {
"type": "int"
},
"failed": {
"type": "int"
}
}
},
"taxBatchFailedRow": "Invoice {id}",
"@taxBatchFailedRow": {
"placeholders": {
"id": {
"type": "String"
}
}
},
"taxInquireSelectedTooltip": "Inquire status for selected invoices",
"taxInquireSelectedButton": "Inquire status ({count})",
"@taxInquireSelectedButton": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"taxInquireSelectedDialogTitle": "Inquire status",
"taxInquireSelectedDialogMessage": "Inquire status for {count} selected invoices?",
"@taxInquireSelectedDialogMessage": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"taxInquireSelectedErrorWithMessage": "Failed to inquire status: {error}",
"@taxInquireSelectedErrorWithMessage": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"taxInquiryResultTitle": "Status inquiry result",
"taxInquiryResultEmpty": "No results to display.",
"taxInquiryStatusUnknown": "Unknown status",
"taxRemoveSelectedDialogTitle": "Remove selected from tax workspace",
"taxRemoveSelectedDialogMessage": "Remove {count} selected invoices from tax workspace?",
"taxRemoveSelectedSuccess": "Selected invoices removed from tax workspace.",
"taxRemoveSelectedAllAlreadySent": "All selected invoices have already been sent and cannot be removed from workspace.",
"taxRemoveSelectedSomeAlreadySent": "{skipped} invoice(s) have already been sent. Remove {count} remaining invoice(s) from workspace?",
"@taxRemoveSelectedSomeAlreadySent": {
"placeholders": {
"skipped": {
"type": "int"
},
"count": {
"type": "int"
}
}
},
"taxRemoveSelectedErrorWithMessage": "Failed to remove selected invoices: {error}",
"@taxRemoveSelectedDialogMessage": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"taxRemoveSelectedSuccess": "Selected invoices removed from tax workspace.",
"taxRemoveSelectedErrorWithMessage": "Failed to remove selected invoices: {error}",
"@taxRemoveSelectedErrorWithMessage": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"taxQuickActionSendAllPending": "Send all pending",
"taxQuickActionInquireAllSent": "Inquire all sent",
"taxQuickActionRetryAllFailed": "Retry all failed",
"taxHelpTooltip": "Help",
"taxHelpTitle": "Tax workspace guide",
"taxHelpSectionStatuses": "Invoice statuses",
"taxHelpStatusNotSent": "Not sent: Invoice has not been sent yet",
"taxHelpStatusPending": "Pending: Currently being sent",
"taxHelpStatusSent": "Sent: Sent and awaiting confirmation",
"taxHelpStatusFinalized": "Finalized: Finalized by the tax system",
"taxHelpStatusFailed": "Failed: Sending failed",
"taxHelpSectionQuickActions": "Quick actions",
"taxHelpQuickActionSendPending": "Send all pending: Send all pending invoices",
"taxHelpQuickActionInquireSent": "Inquire all sent: Check status of sent invoices",
"taxHelpQuickActionRetryFailed": "Retry all failed: Retry failed invoices",
"taxHelpSectionImportantNotes": "Important notes",
"taxHelpNoteValidateBeforeSend": "Validate invoices before sending; validation errors prevent platform rejection",
"taxHelpNoteFailedInDLQ": "Failed invoices show actionable error details on this page",
"taxHelpNoteTimeline": "Submission window is usually about 12 days from issue date; do not recreate old invoices unless the tax authority extends the window",
"taxHelpNoteExport": "Each product VAT rate must match its stuffid code (e.g. 10%, not 0 unless exempt)",
"taxHelpNoteType1vs2": "Type 1 needs full buyer identity (valid economic code, or natural national ID plus postal code); otherwise the invoice is sent automatically as type 2 without buyer fields",
"taxHelpNoteConnection": "If connection is down, check Moadian settings and run a connection test first",
"taxKpiAll": "All",
"taxKpiQueue": "Ready to send",
"taxKpiPending": "Queued",
"taxKpiFailed": "Failed",
"taxKpiSuccess": "Submitted",
"taxHealthChecking": "Checking connection…",
"taxHealthConnected": "Moadian connected",
"taxHealthDisconnected": "Moadian disconnected",
"taxHealthUnknown": "Connection status",
"taxSettingsOpen": "Moadian settings",
"taxEmptyStateTitle": "Workspace is empty",
"taxEmptyStateHint": "Add sales invoices from the invoice list to this workspace, then review and submit here.",
"taxEmptyStateGoInvoices": "Go to invoices",
"taxStickySelected": "{count} selected",
"@taxStickySelected": {
"placeholders": {
"count": {"type": "int"}
}
},
"taxStickySend": "Send",
"taxFixNow": "Fix now",
"taxErrorPlaybookWhat": "What does this mean?",
"taxErrorPlaybookHow": "What should you do?",
"taxPreflightTitle": "Preflight check",
"taxPreflightChecking": "Validating invoices…",
"taxPreflightOk": "All selected invoices are ready to send.",
"taxPreflightIssues": "{count} invoices have issues and will not be sent until fixed.",
"@taxPreflightIssues": {
"placeholders": {
"count": {"type": "int"}
}
},
"taxPreflightContinueValid": "Send valid ones ({count})",
"@taxPreflightContinueValid": {
"placeholders": {
"count": {"type": "int"}
}
},
"taxPreflightCancel": "Cancel",
"taxMobileQuickActions": "Quick actions",
"taxOpenInvoice": "Open invoice",
"taxStatusCancelled": "Cancelled",
"taxHealthDetailsTitle": "Moadian connection status",
"taxHealthGoSettings": "Open settings",
"taxHealthRetry": "Retry test",
"taxOperationSuccess": "Operation completed successfully",
"taxOperationError": "Error performing operation: {error}",
"@taxOperationError": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"taxSendingInvoices": "Sending invoices...",
"taxSendingWithError": "Sending encountered an error",
"taxSentCountFailedCount": "Sent: {sentCount} | Failed: {failedCount}",
"@taxSentCountFailedCount": {
"placeholders": {
"sentCount": {
"type": "int"
},
"failedCount": {
"type": "int"
}
}
},
"taxProcessing": "Processing...",
"taxUnknownError": "Unknown error",
"taxFailedInvoicesCount": "{count} invoices encountered errors",
"@taxFailedInvoicesCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"taxRetryFailed": "Retry",
"taxErrorCategoryValidation": "Validation errors",
"taxErrorCategoryNetwork": "Network errors",
"taxErrorCategoryAccess": "Access errors",
"taxErrorCategoryStatus": "Status errors",
"taxErrorCategoryOther": "Other errors",
"taxErrorItemsCount": "{count} items",
"@taxErrorItemsCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"taxInvoiceNumber": "Invoice #{invoiceId}",
"@taxInvoiceNumber": {
"placeholders": {
"invoiceId": {
"type": "int"
}
}
},
"taxCurrencyRial": "Rial",
"documentMonetizationTitle": "Packages and Tariffs",
"documentMonetizationSubtitle": "Packages, per-document fees and volume settlement",
"subscriptionPackages": "Subscription Packages",
"noActivePackage": "No active package has been registered for this business.",
"noPackageAvailable": "Currently no package is available for purchase.",
"activePackage": "Active Package",
"status": "Status",
"autoRenewActive": "Auto-renewal is active",
"periodAmount": "Period Amount",
"expiryDate": "Expiry Date",
"duration": "Duration",
"month": "month",
"amount": "Amount",
"free": "Free",
"active": "Active",
"activate": "Activate",
"activating": "Activating...",
"activatePackage": "Activate {name}",
"@activatePackage": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"packageDuration": "Package Duration",
"packagePrice": "Price",
"autoRenewAtEnd": "Auto-renewal at end of period",
"cancel": "Cancel",
"confirmAndActivate": "Confirm and Activate",
"invalidPackageId": "Invalid package ID",
"packageActivatedSuccess": "Package activated successfully",
"packageActivationError": "Package activation failed",
"activePolicies": "Active Policies",
"noPolicyDefined": "No policy has been defined",
"type": "Type",
"priority": "Priority",
"invoices": "Invoices",
"noInvoice": "No invoice exists",
"chargeType": "Type",
"pay": "Pay",
"paymentSuccess": "Payment completed",
"paymentError": "Payment failed",
"finalizeVolume": "Finalize Volume Period",
"volumeFinalized": "Volume calculations finalized",
"volumeFinalizeError": "Volume period calculation failed",
"refresh": "Refresh",
"statusActive": "Active",
"statusPending": "Pending",
"statusExpired": "Expired",
"statusCancelled": "Cancelled",
"statusAwaitingPayment": "Awaiting Payment",
"statusPaid": "Paid",
"statusInvoiced": "Invoiced",
"chargeTypePerDocument": "Per Document",
"chargeTypeVolumeCycle": "Volume Cycle",
"chargeTypeSubscriptionFee": "Subscription Fee",
"policyTypeFree": "Free",
"policyTypeSubscription": "Unlimited Package",
"policyTypeVolume": "Volume",
"policyTypePerDocument": "Per Document",
"policyTypeHybrid": "Hybrid",
"warehouseDocuments": "Warehouse Documents",
"relatedWarehouseDocuments": "Related warehouse documents",
"warehouseDocumentPostSuccess": "Warehouse document posted.",
"warehouseDocumentPostFailed": "Could not post warehouse document: {error}",
"@warehouseDocumentPostFailed": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"warehouseDocument": "Warehouse Document",
"warehouseDocumentCode": "Document Code",
"warehouseDocumentType": "Document Type",
"warehouseDocumentStatus": "Status",
"warehouseDocumentDate": "Document Date",
"warehouseDocumentFrom": "From Warehouse",
"warehouseDocumentTo": "To Warehouse",
"warehouseDocumentTotalQuantity": "Total Quantity",
"warehouseDocumentTotalAmount": "Total Amount",
"docTypeReceipt": "Receipt",
"docTypeIssue": "Issue",
"docTypeTransfer": "Transfer",
"docTypeAdjustment": "Adjustment",
"docTypeProductionIn": "Production In",
"docTypeProductionOut": "Production Out",
"statusDraft": "Draft",
"statusPosted": "Posted",
"createWarehouseDocument": "Create Manual Document",
"postWarehouseDocument": "Post Document",
"cancelWarehouseDocument": "Cancel Document",
"deleteWarehouseDocument": "Delete Document",
"viewWarehouseDocument": "View Details",
"printWarehouseDocument": "Print PDF",
"warehousePostalLabelTooltip": "Postal consignment label (PDF)",
"warehousePostalLabelDialogTitle": "Postal consignment label",
"warehousePostalLabelPaperSize": "Paper size",
"warehousePostalLabelOrientation": "Orientation",
"warehousePostalLabelPortrait": "Portrait",
"warehousePostalLabelLandscape": "Landscape",
"warehousePostalLabelCustomPaperHint": "Custom size (max 32 chars, e.g. 120mm 80mm)",
"warehousePostalLabelTemplate": "Print template",
"warehousePostalLabelNoTemplate": "— System default —",
"warehousePostalLabelFieldsSection": "Fields on label",
"warehousePostalLabelShowSender": "Sender",
"warehousePostalLabelShowReceiver": "Recipient",
"warehousePostalLabelShowWarehouse": "Warehouse names",
"warehousePostalLabelShowLines": "Items summary",
"warehousePostalLabelShowDelivery": "Shipping / notes",
"warehousePostalLabelShowTracking": "Tracking number",
"warehousePostalLabelShowSource": "Source document code",
"warehousePostalLabelDownload": "Download PDF",
"applicationName": "Application Name",
"applicationVersion": "Application Version",
"defaultLanguage": "Default Language",
"defaultTheme": "Default Theme",
"enableUserRegistration": "Enable User Registration",
"enableEmailVerification": "Enable Email Verification",
"sessionTimeout": "Session Timeout",
"sessionTimeoutMinutes": "Session Timeout (minutes)",
"maxFileSize": "Max File Size",
"maxFileSizeMB": "Max File Size (MB)",
"maxUsers": "Max Users",
"maintenanceMode": "Maintenance Mode",
"supportTicketsUserSectionTitle": "User support tickets",
"supportTicketsAllowUsersLabel": "Allow normal users to create and view tickets",
"supportTicketsAllowUsersDescription": "When disabled, the message below is shown to users. Support operators still have access.",
"supportTicketsDisabledNoticeLabel": "Notice text for users (when disabled)",
"supportTicketsDisabledNoticeHint": "Leave blank to use the built-in default message.",
"supportTicketsUnavailableBody": "Support tickets are temporarily unavailable.",
"legacyApiImportSectionTitle": "Import from previous Hesabix",
"legacyApiImportAllowUsersLabel": "Allow users to import from previous Hesabix",
"legacyApiImportAllowUsersDescription": "When disabled, the import option is hidden on the new-business page and related API calls are blocked.",
"legacyApiImportDisabledNoticeLabel": "Notice text for users (when disabled)",
"legacyApiImportDisabledNoticeHint": "Leave blank to use the built-in default message.",
"legacyApiImportUnavailableBody": "Import from previous Hesabix is temporarily unavailable.",
"unlimited": "Unlimited",
"errorLoadingSettings": "Error loading settings",
"errorSavingSettings": "Error saving settings",
"settingsSavedSuccessfully": "Settings saved successfully",
"persian": "Persian",
"english": "English",
"system": "System",
"light": "Light",
"dark": "Dark",
"zeroMeansUnlimited": "0 = Unlimited",
"otpLogin": "OTP Login",
"otpLoginTitle": "Login with OTP",
"otpLoginSubtitle": "Login code will be sent to your email, mobile number or Telegram",
"otpLoginIdentifierHint": "Enter your email or mobile number",
"otpLoginIdentifierRequired": "Email or mobile number is required",
"otpCodeSent": "Code sent",
"otpChannelSelectionTitle": "Receive code via:",
"otpChannelSms": "SMS",
"otpChannelEmail": "Email",
"otpChannelTelegram": "Telegram",
"otpSendCodeButton": "Send login code",
"otpChangeChannelTitle": "Change delivery method:",
"otpChangeIdentifier": "Change identifier",
"otpSelectChannelError": "Please select a delivery channel",
"otpCaptchaError": "Error loading captcha",
"otpCodeSentMessage": "Login code sent to your {channel}",
"@otpCodeSentMessage": {
"placeholders": {
"channel": {
"type": "String"
}
}
},
"otpCodeResentMessage": "Login code resent",
"otpSendError": "Error sending login code",
"otpEnterCaptchaError": "Please enter captcha code",
"workflows": "Automations",
"workflow": "Automation",
"newWorkflow": "New Workflow",
"editWorkflow": "Edit Workflow",
"workflowSaved": "Workflow saved",
"workflowDeleted": "Workflow deleted",
"workflowDuplicated": "Workflow duplicated",
"workflowCopy": "Copy",
"workflowUndo": "Undo",
"workflowSave": "Save",
"workflowCancel": "Cancel",
"workflowClose": "Close",
"workflowValidationError": "Validation Error",
"workflowErrorLoading": "Error loading data",
"workflowErrorSaving": "Error saving",
"workflowStatusUpdated": "Workflow status updated",
"workflowExecuted": "Workflow executed",
"workflowErrorExecuting": "Error executing workflow",
"workflowNoAccess": "You do not have access to workflows.",
"workflowNoAccessEditor": "You do not have access to workflow editor.",
"workflowNoWorkflows": "No workflows yet.",
"workflowCreateFirst": "Use the button below to create your first automation.",
"workflowCreate": "Create Workflow",
"workflowRefresh": "Refresh",
"workflowRunNow": "Run now",
"workflowTestRun": "Test run (live status)",
"workflowFixValidationBeforeTestRun": "Fix validation errors on the canvas before running a test.",
"workflowExecutionHistory": "Execution history",
"workflowHistoryClearCanvasHighlight": "Clear highlight on canvas",
"workflowEdit": "Edit",
"workflowLastUpdate": "Last update",
"workflowAvailableTriggers": "Available triggers",
"workflowAvailableActions": "Available actions",
"workflowFilters": "Filters",
"workflowStatus": "Status",
"workflowSearch": "Search",
"workflowAllStatuses": "All statuses",
"workflowOnlyActive": "Only active",
"workflowInactive": "Inactive",
"workflowDraft": "Draft",
"workflowActive": "Active",
"workflowNodeDeleted": "Node deleted",
"workflowNodeDuplicated": "Node duplicated",
"workflowNodeSettings": "Settings",
"workflowNodeNoSettings": "This node does not require any special settings.",
"workflowBasalamPluginInactiveHint": "The Basalam add-on is inactive. Enable it from the plugin marketplace for this node to run.",
"workflowBasalamPluginInactivePalette": "Basalam add-on inactive — enable from the plugin marketplace.",
"workflowBasalamOpenPluginMarketplace": "Open plugin marketplace",
"workflowBasalamRefreshPluginStatus": "Refresh Basalam add-on status",
"workflowBasalamRefreshPluginFailed": "Could not refresh add-on status. Try again.",
"workflowNodeFieldRequired": "This field is required",
"workflowNodeArrayType": "Array",
"workflowNodeObjectType": "Object",
"workflowConfigUsePreviousNode": "Use previous node",
"workflowConfigSelectFromNodes": "Select from previous nodes",
"workflowConfigValueUsesNode": "This value uses a previous node",
"workflowConfigSelectDate": "Select date",
"workflowConfigToday": "Today",
"workflowConfigDateHelper": "Select date (ISO: YYYY-MM-DD)",
"workflowConfigNoNodesToSelect": "No nodes available to select",
"workflowConfigNoTelegramUsers": "No users connected to Telegram bot. Please connect users first.",
"workflowConfigNoBaleUsers": "No users connected to Bale bot. Please connect users first.",
"workflowConfigOwner": "Owner",
"workflowConfigSearchSelectPerson": "Search and select person",
"workflowConfigPersonIdLabel": "Person ID",
"workflowConfigPersonIdHelper": "Enter ID or use previous node: $node_id.person_id",
"workflowConfigSearchSelectProduct": "Search and select product/service",
"workflowConfigProductIdLabel": "Product ID",
"workflowConfigProductIdHelper": "Product/service ID",
"workflowConfigType": "Type",
"workflowConfigPercent": "Percent",
"workflowConfigFixedAmount": "Fixed amount",
"workflowConfigDiscountPercent": "Discount %",
"workflowConfigDiscountAmount": "Discount amount",
"workflowConfigItemN": "Item {n}",
"@workflowConfigItemN": {
"placeholders": {
"n": {
"type": "int"
}
}
},
"workflowConfigAddItem": "Add item",
"workflowConfigAddLineItem": "Add line item",
"workflowConfigProduct": "Product",
"workflowConfigQuantity": "Quantity",
"workflowConfigUnitPrice": "Unit price",
"workflowConfigTaxPercent": "Tax %",
"workflowConfigDescription": "Description",
"workflowConfigPaymentMethod": "Payment method",
"workflowConfigAmount": "Amount",
"workflowConfigAccountSelect": "Bank account / Cash register",
"workflowConfigAddPayment": "Add payment",
"workflowConfigNoPaymentsYet": "No payments added yet. Use the button below to add.",
"workflowConfigPaymentN": "Payment {n}",
"@workflowConfigPaymentN": {
"placeholders": {
"n": {
"type": "int"
}
}
},
"workflowConfigNotSelected": "Not selected",
"workflowConfigSelectWarehouse": "Select warehouse",
"workflowConfigSelectAccount": "Select account",
"workflowConfigSelectFiscalYear": "Select fiscal year",
"workflowConfigInvalidJson": "Invalid JSON",
"workflowConfigJsonHint": "'{\"key\": \"value\"}'",
"workflowConfigCash": "Cash",
"workflowConfigBank": "Bank",
"workflowConfigCheck": "Check",
"workflowConfigCard": "Card",
"workflowConfigSelectTelegramUser": "Select user connected to Telegram bot",
"workflowConfigSelectBaleUser": "Select user connected to Bale bot",
"workflowConfigSelectAtLeastOne": "Select at least one item",
"workflowConfigReferenceTitle": "Select from previous nodes",
"workflowConfigNoNodesAvailable": "No nodes available to select",
"workflowConfigStep1Node": "Step 1: Select node",
"workflowConfigStep2Data": "Step 2: Select data",
"workflowConfigSelectDataFrom": "Select data from \"{label}\"",
"@workflowConfigSelectDataFrom": {
"placeholders": {
"label": {
"type": "String"
}
}
},
"workflowConfigOrSelectField": "Or select a specific field:",
"workflowConfigUseFullNodeOutput": "Use full node output",
"workflowConfigFullNodeOutputDesc": "All output data from the node",
"workflowConfigBack": "Back",
"workflowConfigCancel": "Cancel",
"workflowConfigGroupFilters": "Filters",
"workflowConfigGroupScheduling": "Scheduling",
"workflowConfigGroupErrorManagement": "Error management",
"workflowConfigGroupMainSettings": "Main settings",
"workflowConfigGroupAdvanced": "Advanced settings",
"workflowConfigUserDefault": "User",
"workflowConfigFiscalYearDefault": "Fiscal year",
"workflowConfigJsonLabel": "JSON",
"workflowPaletteSearch": "Search...",
"workflowPaletteAll": "All",
"workflowPaletteTriggers": "Triggers",
"workflowPaletteActions": "Actions",
"workflowPaletteLoops": "Loops",
"workflowPaletteConditions": "Conditions",
"workflowNodeUnknown": "Unknown node",
"workflowConfigEnumRequiredForMultiSelect": "Error: enum values required for multi-select",
"workflowConfigFieldEnabled": "Enabled",
"workflowConfigFieldTo": "To",
"workflowConfigFieldSubject": "Subject",
"workflowConfigFieldBody": "Body",
"workflowConfigFieldMessage": "Message",
"workflowConfigFieldMinAmount": "Minimum amount",
"workflowConfigFieldMaxAmount": "Maximum amount",
"workflowConfigFieldStatusFilter": "Status filter",
"workflowConfigFieldPersonType": "Person type",
"workflowConfigFieldCurrency": "Currency",
"workflowConfigFieldPersonId": "Person ID",
"workflowConfigFieldProductId": "Product ID",
"workflowConfigFieldWarehouseId": "Warehouse ID",
"workflowConfigFieldAccountId": "Account ID",
"workflowConfigFieldRetryCount": "Retry count",
"workflowConfigFieldRetryDelay": "Retry delay",
"workflowConfigFieldOnError": "On error",
"workflowConfigFieldBreakOnError": "Break on error",
"workflowConfigFieldContinueOnError": "Continue on error",
"workflowConfigFieldTriggerType": "Trigger type",
"workflowConfigFieldActionType": "Action type",
"workflowConfigFieldLoopType": "Loop type",
"workflowConfigFieldItemsSource": "Items source",
"workflowConfigFieldItemVariable": "Item variable",
"workflowConfigFieldIndexVariable": "Index variable",
"workflowConfigFieldMaxIterations": "Max iterations",
"workflowConfigFieldStart": "Start",
"workflowConfigFieldEnd": "End",
"workflowConfigFieldStep": "Step",
"workflowConfigFieldConditionLeft": "Left value",
"workflowConfigFieldConditionOperator": "Comparison operator",
"workflowConfigFieldConditionRight": "Right value",
"workflowConfigFieldTimeout": "Timeout",
"workflowConfigFieldCooldown": "Cooldown",
"workflowConfigFieldSchedule": "Schedule",
"workflowConfigFieldDelay": "Delay",
"workflowConfigFieldDocumentType": "Document type",
"workflowConfigFieldFiscalYearFilter": "Fiscal year filter",
"workflowConfigFieldFiscalYearId": "Fiscal year",
"workflowConfigFieldUserIdFilter": "User filter",
"workflowConfigFieldDescriptionContains": "Description contains",
"workflowConfigFieldCooldownSeconds": "Cooldown (seconds)",
"workflowConfigFieldTimeoutSeconds": "Timeout (seconds)",
"workflowConfigFieldInvoiceType": "Invoice type",
"workflowConfigFieldPersonTypeFilter": "Person type filter",
"workflowConfigFieldCurrencyId": "Currency",
"workflowConfigFieldIncludeTaxDetails": "Include tax details",
"workflowConfigFieldIncludePaymentStatus": "Include payment status",
"workflowConfigFieldAccountIdFilter": "Account filter",
"workflowConfigFieldPaymentMethodFilter": "Payment method filter",
"workflowConfigFieldIncludeBalance": "Include balance",
"workflowConfigFieldCheckDuplicate": "Check duplicate",
"workflowConfigFieldTypeFilter": "Type filter",
"workflowConfigFieldCheckType": "Check type",
"workflowConfigFieldDaysBefore": "Days before due",
"workflowConfigFieldReferenceCode": "Reference code",
"workflowConfigFieldExtraInfo": "Extra info",
"workflowConfigFieldIsProforma": "Proforma invoice",
"workflowConnectionHelpTitle": "How to Connect Nodes",
"workflowConnectionHelpMethod1": "Method 1: Drag & Drop (Recommended)",
"workflowConnectionHelpMethod1Step1": "1. Click and hold on the output point of a node",
"workflowConnectionHelpMethod1Step2": "2. Drag your mouse - a temporary line will appear",
"workflowConnectionHelpMethod1Step3": "3. Release on the input point of another node",
"workflowConnectionHelpMethod2": "Method 2: Click & Click",
"workflowConnectionHelpMethod2Step1": "1. Click on the output point of a node",
"workflowConnectionHelpMethod2Step2": "2. Click on the input point of another node",
"workflowConnectionHelpTips": "Tips",
"workflowConnectionHelpTipsText": "• Trigger nodes only have output points\n• Action nodes have both input and output points\n• To delete connection: click on it and press Delete",
"workflowConnectionHelpGotIt": "Got it",
"workflowEditNameDescription": "Edit name and description",
"workflowExecutionHistory": "Execution history",
"workflowNameRequired": "Workflow name *",
"workflowNameHint": "e.g. Invoice approval process",
"workflowDescription": "Description",
"workflowDescriptionHint": "Optional description for this workflow...",
"workflowSaveWorkflow": "Save workflow",
"workflowEnterName": "Please enter workflow name",
"workflowInfoUpdated": "Info updated. For permanent save, click the Save button.",
"workflowNoteComment": "Note / Comment",
"workflowNoteHint": "Note or comment for this node...",
"workflowNoteDeleted": "Note deleted",
"workflowNoteCleared": "Note cleared",
"workflowNoteSaved": "Note saved",
"workflowSaveAsTemplate": "Save as template",
"workflowTemplateName": "Template name",
"workflowTemplateNameHint": "e.g. Invoice process",
"workflowTemplateSaved": "Template \"{name}\" saved",
"@workflowTemplateSaved": {"placeholders": {"name": {"type": "String"}}},
"workflowTemplateLoaded": "Template \"{name}\" loaded",
"@workflowTemplateLoaded": {"placeholders": {"name": {"type": "String"}}},
"workflowSelectTemplate": "Select template",
"workflowBuiltinTemplates": "Built-in templates",
"workflowSavedTemplates": "Saved templates",
"workflowNoSavedTemplates": "No saved templates",
"workflowTemplateDefault": "Template",
"workflowTemplateN": "Template {n}",
"@workflowTemplateN": {"placeholders": {"n": {"type": "int"}}},
"workflowCreatedAt": "Created: {date}",
"@workflowCreatedAt": {"placeholders": {"date": {"type": "String"}}},
"workflowErrorAddNode": "Error adding node",
"workflowErrorSaveTemplate": "Error saving template",
"workflowErrorLoadTemplate": "Error loading template",
"workflowTimelineTitle": "Execution timeline",
"workflowTimelineRefresh": "Refresh",
"workflowAnalyticsTitle": "Analytics",
"workflowPerformance": "Performance",
"workflowNoData": "No data available",
"workflowErrorLoadTimeline": "Error loading timeline",
"workflowAllLogs": "All logs",
"workflowAllNodes": "All nodes",
"workflowErrors": "Errors",
"workflowNodeStats": "Node stats",
"workflowColumnNode": "Node",
"workflowColumnType": "Type",
"workflowColumnExecutions": "Executions",
"workflowColumnAvgTime": "Avg. time",
"workflowErrorLoadAnalytics": "Error loading analytics",
"workflowErrorLoadErrorStats": "Error loading error stats",
"workflowTotalExecutions": "Total executions",
"workflowSuccessful": "Successful",
"workflowFailed": "Failed",
"workflowAvgTime": "Avg. time",
"workflowSuccessRate": "Success rate",
"workflowNoErrorsRecorded": "No errors recorded!",
"workflowTotalErrors": "Total errors",
"workflowErrorTypes": "Error types",
"workflowErrorLoadHistory": "Error loading history",
"workflowErrorLoadLogs": "Error loading logs",
"workflowDeleteWorkflow": "Delete workflow",
"workflowDeleteConfirm": "Are you sure you want to delete workflow \"{name}\"?",
"@workflowDeleteConfirm": {"placeholders": {"name": {"type": "String"}}},
"workflowDeletedSuccess": "Workflow deleted successfully",
"workflowErrorDelete": "Error deleting workflow",
"workflowStatusActive": "Active",
"workflowStatusInactive": "Inactive",
"workflowStatusDraft": "Draft",
"workflowNoNodesDefined": "No nodes defined",
"workflowEmpty": "This workflow is empty",
"workflowErrorDisplay": "Error displaying workflow",
"workflowExecutionLogs": "Execution logs",
"workflowExecutionLogCopyOne": "Copy this log",
"workflowExecutionLogsCopyAll": "Copy all logs",
"workflowNoLogs": "No logs found",
"workflowNoExecutions": "No executions yet",
"workflowStarted": "Started",
"workflowCompleted": "Completed",
"workflowLogs": "Logs",
"workflowErrorLoadingLogs": "Error loading logs",
"workflowErrorUpdatingStatus": "Error updating status",
"workflowHierarchicalLayoutApplied": "Hierarchical layout applied",
"workflowForceDirectedLayoutApplied": "Force-directed layout applied",
"workflowValidationSuccess": "Validation successful",
"workflowAllNodesValid": "All nodes are valid!",
"workflowNodesWithErrors": "{count} nodes have errors",
"@workflowNodesWithErrors": {"placeholders": {"count": {"type": "int"}}},
"workflowToolbarOpenPalette": "Open node palette",
"workflowToolbarZoomOut": "Zoom out",
"workflowToolbarZoomIn": "Zoom in",
"workflowToolbarResetZoom": "Reset zoom",
"workflowToolbarConnectionHelp": "Connection help",
"workflowToolbarHideGrid": "Hide Grid",
"workflowToolbarShowGrid": "Show Grid",
"workflowToolbarDisableSnapToGrid": "Disable Snap to Grid",
"workflowToolbarEnableSnapToGrid": "Enable Snap to Grid",
"workflowToolbarAlignmentTools": "Alignment tools",
"workflowToolbarAlignLeft": "Align left",
"workflowToolbarAlignRight": "Align right",
"workflowToolbarAlignTop": "Align top",
"workflowToolbarAlignBottom": "Align bottom",
"workflowToolbarDistributeHorizontally": "Distribute horizontally",
"workflowToolbarDistributeVertically": "Distribute vertically",
"workflowToolbarAlignToGrid": "Align to grid",
"workflowToolbarClearAll": "Clear all",
"workflowToolbarAutoLayout": "Auto layout",
"workflowToolbarTemplates": "Templates",
"workflowToolbarLoadTemplate": "Load template",
"workflowToolbarSelectLayoutType": "Select layout type",
"workflowToolbarHierarchical": "Hierarchical",
"workflowToolbarForceDirected": "Force-directed",
"workflowToolbarShowValidationErrors": "Show validation errors",
"workflowToolbarUndo": "Undo",
"workflowToolbarRedo": "Redo",
"workflowToolbarNodes": "Nodes",
"workflowToolbarConnections": "Connections",
"workflowNoSuggestedFields": "No suggested fields for this node",
"workflowTypeFieldManually": "You can type the field manually: {nodeId}.field_name",
"@workflowTypeFieldManually": {"placeholders": {"nodeId": {"type": "String"}}},
"workflowFieldInvoiceId": "Invoice ID",
"workflowFieldDescInvoiceId": "Numeric invoice ID",
"workflowFieldInvoiceCode": "Invoice code",
"workflowFieldDescInvoiceCode": "Unique invoice code",
"workflowFieldInvoiceNumber": "Invoice number",
"workflowFieldDescInvoiceNumber": "Invoice number",
"workflowFieldInvoiceDate": "Invoice date",
"workflowFieldDescInvoiceDate": "Invoice issue date",
"workflowFieldTotalAmount": "Total amount",
"workflowFieldDescTotalAmount": "Total amount",
"workflowFieldDiscountAmount": "Discount amount",
"workflowFieldDescDiscountAmount": "Total discounts",
"workflowFieldTaxAmount": "Tax amount",
"workflowFieldDescTaxAmount": "Total tax",
"workflowFieldFinalAmount": "Final amount",
"workflowFieldDescFinalAmount": "Payable amount",
"workflowFieldCustomerName": "Customer name",
"workflowFieldDescCustomerName": "Counterparty name",
"workflowFieldCustomerId": "Customer ID",
"workflowFieldDescCustomerId": "Counterparty ID",
"workflowFieldDescription": "Description",
"workflowFieldDescDescription": "Description",
"workflowFieldInvoiceDescription": "Invoice description",
"workflowFieldStatus": "Status",
"workflowFieldDescStatus": "Status",
"workflowFieldInvoiceStatus": "Invoice status",
"workflowFieldPaymentId": "Payment ID",
"workflowFieldDescPaymentId": "Numeric payment ID",
"workflowFieldAmount": "Amount",
"workflowFieldDescAmount": "Amount",
"workflowFieldPaymentAmount": "Payment amount",
"workflowFieldPaymentDate": "Payment date",
"workflowFieldDescPaymentDate": "Payment date",
"workflowFieldPaymentMethod": "Payment method",
"workflowFieldDescPaymentMethod": "Payment method type",
"workflowFieldPaymentStatus": "Payment status",
"workflowFieldReferenceCode": "Reference code",
"workflowFieldDescReferenceCode": "Transaction reference code",
"workflowFieldDocumentId": "Document ID",
"workflowFieldDescDocumentId": "Numeric document ID",
"workflowFieldDocumentType": "Document type",
"workflowFieldDescDocumentType": "Accounting document type",
"workflowFieldDocTotalAmount": "Document total",
"workflowFieldDescDocTotalAmount": "Document total amount",
"workflowFieldDocDescription": "Document description",
"workflowFieldDescDocDescription": "Document description",
"workflowFieldReceiptPaymentId": "Receipt/Payment ID",
"workflowFieldDescReceiptPaymentId": "Numeric ID",
"workflowFieldType": "Type",
"workflowFieldDescType": "Receipt or payment",
"workflowFieldPersonId": "ID",
"workflowFieldDescPersonId": "Counterparty ID",
"workflowFieldPersonName": "Name",
"workflowFieldDescPersonName": "Counterparty name",
"workflowFieldEmail": "Email",
"workflowFieldDescEmail": "Email address",
"workflowFieldPhone": "Phone",
"workflowFieldDescPhone": "Phone number",
"workflowFieldMobile": "Mobile",
"workflowFieldDescMobile": "Mobile number",
"workflowFieldPersonType": "Type",
"workflowFieldDescPersonType": "Counterparty type",
"workflowFieldProductId": "Product ID",
"workflowFieldDescProductId": "Numeric product ID",
"workflowFieldProductName": "Product name",
"workflowFieldDescProductName": "Product name",
"workflowFieldProductCode": "Product code",
"workflowFieldDescProductCode": "Product code",
"workflowFieldPrice": "Price",
"workflowFieldDescPrice": "Sale price",
"workflowFieldQuantity": "Quantity",
"workflowFieldDescQuantity": "Stock quantity",
"workflowFieldId": "ID",
"workflowFieldDescId": "Record ID",
"workflowFieldName": "Name",
"workflowFieldDescName": "Name",
"workflowFieldTitle": "Title",
"workflowFieldDescTitle": "Title",
"workflowFieldGenDescription": "Description",
"workflowFieldDescGenDescription": "Description",
"workflowFieldGenStatus": "Status",
"workflowFieldDescGenStatus": "Status",
"workflowFieldCreatedAt": "Created date",
"workflowFieldDescCreatedAt": "Creation date and time",
"workflowFieldInvoiceType": "Invoice type",
"workflowFieldDescInvoiceType": "Invoice document type (e.g. sales/purchase)",
"workflowFieldLeadId": "Lead ID",
"workflowFieldDescLeadId": "CRM lead record ID",
"workflowFieldDealId": "Deal ID",
"workflowFieldDescDealId": "CRM deal/opportunity record ID",
"workflowFieldProcessDefinitionId": "Process definition ID",
"workflowFieldDescProcessDefinitionId": "Sales process definition",
"workflowFieldStageId": "Stage ID",
"workflowFieldDescStageId": "Current stage in the process",
"workflowFieldOldStageId": "Previous stage ID",
"workflowFieldDescOldStageId": "Stage before the change",
"workflowFieldNewStageId": "New stage ID",
"workflowFieldDescNewStageId": "Stage after the change",
"workflowFieldIsWin": "Won deal",
"workflowFieldDescIsWin": "Whether the deal was closed as won",
"workflowFieldPersonTypesList": "Person types",
"workflowFieldDescPersonTypesList": "Assigned person types list (on create)",
"workflowFieldSuccess": "Success",
"workflowFieldDescSuccess": "Whether the action succeeded",
"workflowFieldWorkflowUserId": "User ID",
"workflowFieldDescWorkflowUserId": "User ID in action output",
"workflowFieldSentMessage": "Sent message",
"workflowFieldDescSentMessage": "Message text after send (e.g. Telegram/Bale)",
"workflowFieldTelegramChatId": "Telegram chat ID",
"workflowFieldDescTelegramChatId": "Recipient Telegram chat ID",
"workflowFieldBaleChatId": "Bale chat ID",
"workflowFieldDescBaleChatId": "Recipient Bale chat ID",
"workflowFieldFileStorageId": "File ID (storage)",
"workflowFieldDescFileStorageId": "UUID of the file on the file server; use in Bale attachment_file_id as $node_id.file_id",
"workflowFieldAttachmentFileId": "Attachment file ID",
"workflowFieldDescAttachmentFileId": "Same as file_id on backup success; alias for referencing in Bale",
"workflowFieldStoredFilename": "Stored filename",
"workflowFieldDescStoredFilename": "Original filename of the backup or attachment on the file server",
"workflowFieldSendFileAttachment": "Send file attachment",
"workflowFieldDescSendFileAttachment": "Whether the Bale action sent a document from file storage",
"workflowFieldCrmChatConversationId": "Chat conversation ID",
"workflowFieldDescCrmChatConversationId": "CRM web chat conversation record ID in trigger_data",
"workflowFieldCrmChatWidgetId": "Chat widget ID",
"workflowFieldDescCrmChatWidgetId": "Web chat widget linked to this conversation",
"workflowFieldCrmChatMessageId": "Chat message ID",
"workflowFieldDescCrmChatMessageId": "Recorded web chat message ID",
"workflowFieldCrmChatBody": "Message body",
"workflowFieldDescCrmChatBody": "Visitor or agent message text in web chat",
"workflowFieldCrmChatSenderRole": "Sender role",
"workflowFieldDescCrmChatSenderRole": "visitor or agent depending on the message",
"workflowFieldCrmChatVisitorFirstName": "Visitor first name",
"workflowFieldDescCrmChatVisitorFirstName": "First name from the chat widget form",
"workflowFieldCrmChatVisitorLastName": "Visitor last name",
"workflowFieldDescCrmChatVisitorLastName": "Last name from the chat widget form",
"workflowFieldCrmChatPageUrl": "Page URL",
"workflowFieldDescCrmChatPageUrl": "Site page URL when the event occurred (if present)",
"workflowFieldCrmChatConversationStatus": "Conversation status",
"workflowFieldDescCrmChatConversationStatus": "e.g. open or resolved",
"workflowFieldCrmChatAssignedToUserId": "Assigned user ID",
"workflowFieldDescCrmChatAssignedToUserId": "Responsible agent user when assigned",
"workflowFieldCrmChatAgentUserId": "Agent user ID",
"workflowFieldDescCrmChatAgentUserId": "Sending user for agent-role messages (agent reply trigger)",
"workflowFieldAutomationSource": "Automation source",
"workflowFieldDescAutomationSource": "e.g. workflow when the message was sent by automation",
"workflowFieldOperatorRelay": "Operator relay",
"workflowFieldDescOperatorRelay": "When sent via operator bridge (Telegram/Bale)",
"workflowFieldCrmChatOldAssignedUserId": "Previous assignee ID",
"workflowFieldDescCrmChatOldAssignedUserId": "Before assignment changed",
"workflowFieldCrmChatNewAssignedUserId": "New assignee ID",
"workflowFieldDescCrmChatNewAssignedUserId": "After assignment changed",
"workflowFieldCrmChatOldStatus": "Previous conversation status",
"workflowFieldDescCrmChatOldStatus": "Before status update",
"workflowFieldCrmChatNewStatus": "New conversation status",
"workflowFieldDescCrmChatNewStatus": "After status update",
"workflowFieldEmailTo": "To",
"workflowFieldDescEmailTo": "Recipient email address (resolved after send)",
"workflowFieldEmailSubject": "Subject",
"workflowFieldDescEmailSubject": "Email subject line (resolved after send)",
"workflowFieldHttpStatusCode": "HTTP status code",
"workflowFieldDescHttpStatusCode": "Response status code (e.g. 200)",
"workflowFieldHttpResponse": "HTTP response",
"workflowFieldDescHttpResponse": "Response body or payload",
"workflowFieldVariableName": "Variable name",
"workflowFieldDescVariableName": "Name of variable stored in context",
"workflowFieldVariableValue": "Variable value",
"workflowFieldDescVariableValue": "Stored value for the variable",
"workflowFieldWebhookPayload": "Webhook payload",
"workflowFieldDescWebhookPayload": "Parsed webhook payload data",
"workflowFieldWebhookBody": "Request body",
"workflowFieldDescWebhookBody": "Raw HTTP request body",
"workflowFieldScheduledAt": "Scheduled run time",
"workflowFieldDescScheduledAt": "When the scheduled trigger ran",
"workflowFieldWarehouseId": "Warehouse ID",
"workflowFieldDescWarehouseId": "Warehouse related to inventory event",
"workflowFieldCurrentQuantity": "Current quantity",
"workflowFieldDescCurrentQuantity": "Current stock quantity",
"workflowFieldMinQuantity": "Minimum quantity",
"workflowFieldDescMinQuantity": "Low-stock threshold",
"workflowFieldCheckId": "Check ID",
"workflowFieldDescCheckId": "Check record ID",
"workflowFieldCheckNumber": "Check number",
"workflowFieldDescCheckNumber": "Printed check number",
"workflowFieldDueDate": "Due date",
"workflowFieldDescDueDate": "Maturity/due date",
"workflowFieldLogLevel": "Log level",
"workflowFieldDescLogLevel": "Level recorded in workflow log",
"workflowTemplateInvoiceSalesName": "Invoice sales notification",
"workflowTemplateInvoiceSalesDesc": "After creating sales invoice, email and Telegram are sent",
"workflowCategoryInvoice": "Invoice",
"workflowTemplateInventoryLowName": "Low inventory alert",
"workflowTemplateInventoryLowDesc": "When product stock is low, notification is sent",
"workflowCategoryInventory": "Inventory",
"workflowTemplateReceiptPaymentName": "Receipt/Payment log",
"workflowTemplateReceiptPaymentDesc": "After recording receipt/payment, log is created",
"workflowCategoryFinancial": "Financial",
"workflowTemplatePersonWelcomeName": "New person welcome",
"workflowTemplatePersonWelcomeDesc": "After creating new person, welcome message is sent",
"workflowCategoryPersons": "Persons",
"workflowCategoryCrm": "CRM",
"workflowTemplateCrmNewLeadNotifyName": "New lead in-app notification",
"workflowTemplateCrmNewLeadNotifyDesc": "When a lead is created, an in-app notification is recorded",
"workflowTemplateCrmDealWonLogName": "Log won deal closure",
"workflowTemplateCrmDealWonLogDesc": "Only won deals; writes an info log entry",
"workflowTemplateReceiptUpdatedNotifyName": "Notify on receipt/payment edit",
"workflowTemplateReceiptUpdatedNotifyDesc": "After a receipt or payment is edited, an in-app notification is created",
"workflowTemplateInvoiceAmountBranchName": "Sales invoice: high vs low amount",
"workflowTemplateInvoiceAmountBranchDesc": "If amount is at least 10M, high-priority in-app notice; otherwise only a log (simple If example)",
"workflowTestRunCompletedDry": "Dry run succeeded (no real sends or writes).",
"settingsCategoriesCount": "Categories",
"settingsCount": "Settings",
"expandAllCategories": "Expand All",
"collapseAllCategories": "Collapse All",
"categoryTreeShowProductsInCategory": "Show products in this category",
"categoryTreeActionsMenuTooltip": "Actions",
"categoryTreeMoreActionsTooltip": "More",
"categoryLoadProductsError": "Error loading products: {error}",
"@categoryLoadProductsError": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"categoryTreeNoProductsInCategory": "No products in this category",
"categoryTreeIncludeSubcategoriesLabel": "Include subcategories",
"categoryTreeDirectMembersOnlyLabel": "Direct members only",
"categoryTreeIncludesSubcategoriesHint": "Includes products from subcategories",
"categoryTreeDirectMembersOnlyHint": "Only products in this category",
"categoryDescriptionHint": "Optional category description",
"categorySortOrderLabel": "Display order",
"categorySortOrderHint": "Sort number (lower appears first)",
"categorySortOrderRequired": "Display order is required",
"categorySortOrderInvalidNumber": "Please enter a valid number",
"categoryParentFieldLabel": "Parent category",
"productCategoryFilterBrowseAll": "All categories",
"productCategorySubcategoriesLabel": "Subcategories",
"categoryPickerSearchEmpty": "No categories found",
"categoryTreeAllCategoriesOption": "All categories",
"noSettingsFound": "No settings found",
"searchResults": "Search Results",
"searchResultCount": "{count} result",
"@searchResultCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"noSearchResults": "No results found for \"{query}\"",
"@noSearchResults": {
"placeholders": {
"query": {
"type": "String"
}
}
},
"searchSettingsPlaceholder": "Search settings...",
"noSettingsInCategory": "No settings found in this category",
"settingsCategoryCoreConfiguration": "Core & Configuration",
"settingsCategoryCoreConfigurationDescription": "Basic system settings and configuration",
"settingsCategoryStorageFiles": "Storage & Files",
"settingsCategoryStorageFilesDescription": "File storage and storage plan management",
"settingsCategoryFinancialPayment": "Financial & Payment",
"settingsCategoryFinancialPaymentDescription": "Wallet and payment gateway settings",
"settingsCategoryUsersBusinesses": "Users & Businesses",
"settingsCategoryUsersBusinessesDescription": "User and business management",
"settingsCategoryCommunications": "Communications",
"settingsCategoryCommunicationsDescription": "Email, notifications and announcements",
"settingsCategoryAI": "Artificial Intelligence",
"settingsCategoryAIDescription": "AI settings, plans and prompts",
"aiStatusSending": "Sending…",
"aiStatusConnecting": "Connecting…",
"aiStatusThinking": "Thinking…",
"aiStatusPreparingContext": "Preparing context…",
"aiStatusLoadingPrompt": "Loading instructions…",
"aiStatusLoadingInsights": "Loading business insights…",
"aiStatusLoadingMemory": "Loading memory…",
"aiStatusLoadingAttachments": "Loading attachments…",
"aiStatusLoadingKnowledge": "Searching knowledge base…",
"aiStatusLoadingConnectors": "Loading connectors…",
"aiStatusPlanningTools": "Planning next move…",
"aiStatusWriting": "Writing response…",
"aiStatusSaving": "Saving…",
"aiStatusRunningTool": "Running {toolName}…",
"@aiStatusRunningTool": {
"placeholders": {
"toolName": { "type": "String" }
}
},
"aiVoiceStatusConnecting": "Starting voice chat…",
"aiVoiceStatusListening": "Listening…",
"aiVoiceStatusProcessing": "Processing speech…",
"aiVoiceStatusSpeaking": "Playing response…",
"aiVoiceTextBlockedWhileActive": "Text input is disabled during an active voice session.",
"aiChatApprovalNeedsOpenSession": "To approve this action, open the same conversation where the assistant asked for confirmation.",
"aiChatWriteApprovalNotFound": "No active conversation or pending write was found. Open the conversation where the assistant requested approval.",
"aiChatSendFailed": "Could not send the message: {error}",
"@aiChatSendFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatComposerHint": "Message the assistant…",
"aiChatComposerHintDesktop": "Message the assistant… (Enter to send, Shift+Enter for a new line)",
"aiChatComposerSemanticsLabel": "Assistant message field",
"aiChatStopGenerating": "Stop generating",
"aiChatAttachFile": "Attach file",
"aiChatSendMessage": "Send message",
"aiChatSendingMessage": "Sending message",
"aiChatSendDisabledHint": "Write a message first",
"aiChatAssistantTitle": "AI assistant",
"aiChatConversationFallbackTitle": "Chat",
"aiChatHistoryTooltip": "Conversations",
"aiChatNewConversation": "New chat",
"aiChatStop": "Stop",
"aiChatResponding": "Responding…",
"aiChatClose": "Close",
"aiChatEmptyAssistantReply": "No reply was received from the assistant. This is often an AI service or account-credit issue.",
"aiChatCopied": "Copied",
"aiChatGenerationStopped": "Response generation stopped",
"aiChatFeedbackSaved": "Feedback saved",
"aiChatFeedbackThanks": "Thanks for the positive feedback",
"aiChatFeedbackFailed": "Could not save feedback: {error}",
"@aiChatFeedbackFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatSessionsLoadFailed": "Could not load conversations: {error}",
"@aiChatSessionsLoadFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatStartConversationFailed": "Could not start the conversation: {error}",
"@aiChatStartConversationFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatMessagesLoadFailed": "Could not load messages: {error}",
"@aiChatMessagesLoadFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatEmptyFile": "The file is empty or could not be read",
"aiChatAttachmentAdded": "Attachment added",
"aiChatAttachmentUploadFailed": "Could not upload the attachment: {error}",
"@aiChatAttachmentUploadFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatConversationDeleted": "Conversation deleted",
"aiChatDeleteConversationFailed": "Could not delete the conversation: {error}",
"@aiChatDeleteConversationFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatMessageUpdated": "Message updated",
"aiChatEditFailed": "Could not edit: {error}",
"@aiChatEditFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatForkOpened": "Conversation branch opened",
"aiChatForkFailed": "Could not branch the conversation: {error}",
"@aiChatForkFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatExportEmpty": "The conversation is empty",
"aiChatExportFailed": "Could not export: {error}",
"@aiChatExportFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatRegenerateNeedsAssistant": "The last message must be from the assistant",
"aiChatRegenerateFailed": "Could not regenerate: {error}",
"@aiChatRegenerateFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatActionFailed": "{label} failed: {error}",
"@aiChatActionFailed": {
"placeholders": {
"label": { "type": "String" },
"error": { "type": "String" }
}
},
"aiChatErrorLabelReply": "Reply",
"aiChatErrorLabelEdit": "Edit",
"aiChatErrorLabelRegenerate": "Regenerate",
"aiChatErrorLabelSend": "Send message",
"aiChatUnknownError": "Unknown error",
"aiChatVoiceStartFailed": "Could not start voice chat: {error}",
"@aiChatVoiceStartFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatVoiceTimeout": "The voice session closed after a timeout. Please try again.",
"aiChatVoiceSttFailed": "Speech recognition failed: {error}",
"@aiChatVoiceSttFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatVoiceEmptyTranscript": "No speech was recognized. Please try again.",
"aiChatVoiceForbidden": "You do not have access to this business.",
"aiChatVoiceError": "Error: {error}",
"@aiChatVoiceError": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiVoiceFeedbackTitle": "AI voice quality",
"aiVoiceFeedbackBody": "Rate the quality of the spoken reply so it can improve over time.",
"aiVoiceFeedbackCommentLabel": "Comment (optional)",
"aiVoiceFeedbackLater": "Later",
"aiVoiceFeedbackSubmit": "Submit",
"aiVoiceSettingsTitle": "Settings",
"aiVoiceImproveQualityTitle": "Improve voice quality",
"aiVoiceImproveQualitySubtitle": "Help improve the voice experience by sending anonymous data.",
"aiMemoryTitle": "Assistant memory",
"aiMemoryIntro": "The assistant keeps lasting context between chats. Standing policies are yours; identity and preferences are learned quietly. Live numbers always come from your books.",
"aiMemoryUpdatedAt": "Last updated: {when}",
"@aiMemoryUpdatedAt": {
"placeholders": {
"when": { "type": "String" }
}
},
"aiMemoryInstructionsTitle": "Standing instructions",
"aiMemoryInstructionsHint": "Things the assistant should always keep in mind.",
"aiMemoryInstructionsExample": "Example: speak amounts in toman; keep reports short and tabular…",
"aiMemoryMaxChars": "Maximum {count} characters",
"@aiMemoryMaxChars": {
"placeholders": {
"count": { "type": "int" }
}
},
"aiMemorySaveInstructions": "Save instructions",
"aiMemoryLearnedTitle": "What I have learned",
"aiMemoryLearnedIntro": "Learned across conversations. Edit or delete anything — you own this memory.",
"aiMemoryLearnedEmpty": "Nothing lasting has been learned yet. After a few chats, names, preferences and work context appear here.",
"aiMemoryClearAll": "Clear all",
"aiMemoryLoadFailed": "Could not load memory: {error}",
"@aiMemoryLoadFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiMemorySaved": "Instructions saved",
"aiMemoryCleared": "Memory cleared",
"aiMemoryItemUpdated": "Item updated",
"aiMemoryDeleted": "Deleted",
"aiMemoryError": "Error: {error}",
"@aiMemoryError": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiMemoryClearTitle": "Clear memory",
"aiMemoryClearBody": "Standing instructions and everything the assistant has learned will be removed. Continue?",
"aiMemoryClearConfirm": "Clear",
"aiMemoryEditTitle": "Edit memory",
"aiMemoryEditHint": "Learned fact text",
"aiMemoryDeleteItemTitle": "Delete this item?",
"aiMemorySourceAuto": "Automatic learning",
"aiMemorySourceAssistant": "Saved by the assistant",
"aiMemorySourceFeedback": "From your feedback",
"aiMemorySourceUser": "Edited by you",
"aiMemorySourceProfile": "From your account",
"aiMemorySourceCurator": "Remembered from chat",
"aiMemoryKindIdentity": "Identity",
"aiMemoryKindPreference": "Preference",
"aiMemoryKindContext": "Context",
"aiMemoryKindGoal": "Goal",
"aiMemoryKindConstraint": "Constraint",
"aiMemoryLearnedCount": "{count} remembered items",
"@aiMemoryLearnedCount": {
"placeholders": {
"count": { "type": "int" }
}
},
"aiMemoryPinToMemory": "Remember this",
"aiMemoryPinned": "Saved to assistant memory",
"aiMemoryPoliciesCardTitle": "Your policies",
"aiKnowledgeTitle": "Business knowledge base",
"aiKnowledgeIntro": "Related documents are searched and added to context when answering your question.",
"aiKnowledgeNewDocument": "New document",
"aiKnowledgeTitleLabel": "Title",
"aiKnowledgeBodyLabel": "Body",
"aiKnowledgeUntitled": "Untitled",
"aiKnowledgeAdded": "Document added",
"aiKnowledgeUploaded": "File uploaded",
"aiKnowledgeReindexResult": "Reindexed: {documents} documents, {chunks} chunks",
"@aiKnowledgeReindexResult": {
"placeholders": {
"documents": { "type": "Object" },
"chunks": { "type": "Object" }
}
},
"aiKnowledgeEmpty": "No documents have been added yet.",
"aiKnowledgeText": "Text",
"aiKnowledgeFile": "File",
"aiKnowledgeReindex": "Reindex",
"aiKnowledgeDocSubtitle": "{chars} characters · {status}",
"@aiKnowledgeDocSubtitle": {
"placeholders": {
"chars": { "type": "int" },
"status": { "type": "String" }
}
},
"aiKnowledgeSemantic": "Semantic search",
"aiKnowledgeSemanticChunks": "Semantic search ({chunks} chunks)",
"@aiKnowledgeSemanticChunks": {
"placeholders": {
"chunks": { "type": "int" }
}
},
"aiKnowledgeIndexFailed": "Index failed — keyword search",
"aiKnowledgeKeyword": "Keyword search",
"aiKnowledgeKeywordChunks": "Keyword search ({chunks} chunks)",
"@aiKnowledgeKeywordChunks": {
"placeholders": {
"chunks": { "type": "int" }
}
},
"aiKnowledgeLoadFailed": "Error: {error}",
"@aiKnowledgeLoadFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiChatApprovalTitle": "Confirm action",
"aiChatApprovalDismiss": "Reject",
"aiChatApprovalConfirm": "Approve and run",
"aiChatApprovalSending": "Sending…",
"aiChatApprovalBannerLabel": "Write approval required",
"aiChatApprovalSecurityNote": "Only the operations listed here will run; parameters cannot change without another confirmation.",
"aiChatApprovalBodySingle": "The assistant wants to change business data.",
"aiChatApprovalBodyMultiple": "{count} operations are waiting for your approval.",
"@aiChatApprovalBodyMultiple": {
"placeholders": {
"count": { "type": "int" }
}
},
"aiVoiceDummyTtsWarning": "Server TTS is in test mode; you may not hear spoken responses.",
"aiVoiceActiveHint": "Voice chat active",
"aiVoiceInputHint": "Voice input",
"aiVoiceEndCall": "End voice call",
"aiVoiceStartMic": "Start voice chat",
"aiVoiceStartCall": "Start voice call",
"aiVoiceDictate": "Dictate",
"aiVoiceDictateStop": "Stop dictation",
"aiVoiceReadAloud": "Read aloud",
"aiVoiceStopReading": "Stop reading",
"aiVoicePickStt": "Speech recognition",
"aiVoicePickTts": "Voice",
"aiVoiceCloudDisabled": "Cloud audio is disabled for this business.",
"aiVoiceDictationFailed": "Could not transcribe audio: {error}",
"@aiVoiceDictationFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiVoiceListeningDictate": "Listening… tap to insert text",
"settingsAIVoiceModels": "AI Voice models",
"settingsAIVoiceModelsDescription": "Manage STT/TTS engines (local and API providers)",
"aiVoiceAdminEdit": "Edit voice model",
"aiVoiceAdminNew": "New voice model",
"aiVoiceAdminCode": "Code",
"aiVoiceAdminName": "Display name",
"aiVoiceAdminKind": "Kind",
"aiVoiceAdminProvider": "Provider",
"aiVoiceAdminModelId": "API / local model id",
"aiVoiceAdminApiBaseUrl": "API base URL",
"aiVoiceAdminApiKey": "API key",
"aiVoiceAdminApiKeyHint": "Leave empty to keep the current key. Saved in provider credentials, not in the model row.",
"aiVoiceAdminAudioEndpoint": "Speech API",
"aiVoiceAdminAudioAuto": "Auto (transcriptions, then translations)",
"aiVoiceAdminAudioTranscriptions": "transcriptions (keep language)",
"aiVoiceAdminAudioTranslations": "translations (ParsPack / OpenAI sample)",
"aiVoiceAdminCloudHint": "Cloud STT/TTS need a base URL and API key. Local Whisper does not.",
"aiVoiceAdminVoiceId": "Voice id",
"aiVoiceAdminDescription": "Description",
"aiVoiceAdminDefault": "Default",
"aiVoiceAdminActive": "Active",
"aiVoiceAdminCancel": "Cancel",
"aiVoiceAdminSave": "Save",
"aiVoiceAdminCreate": "Create",
"aiVoiceAdminSeed": "Seed from server settings",
"aiVoiceAdminEmpty": "No voice models yet",
"aiVoiceAdminAllowCloud": "Allow sending audio to cloud providers",
"aiVoiceAdminAllowCloudHint": "Businesses must still opt in. Local Whisper/Piper stay available.",
"aiVoiceAdminTest": "Test",
"aiVoiceAdminTestOk": "Voice adapter test succeeded",
"aiVoiceAdminRequired": "Required",
"aiVoiceKindStt": "Speech to text",
"aiVoiceKindTts": "Text to speech",
"aiVoiceBusinessAllowCloud": "Allow cloud speech for this business",
"aiVoiceBusinessAllowCloudHint": "Audio is sent to a cloud provider. The system-wide policy must also be on.",
"aiVoiceDictationEmpty": "No speech was recognized. Try again.",
"aiVoiceReadAloudFailed": "Could not play audio: {error}",
"@aiVoiceReadAloudFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiStatusElapsed": "{seconds}s",
"@aiStatusElapsed": {
"placeholders": {
"seconds": { "type": "int" }
}
},
"aiToolGeneric": "Running tool",
"aiToolSpawnSubagent": "Spawn subagent",
"aiToolAwaitSubagent": "Await subagent",
"aiToolCancelSubagent": "Cancel subagent",
"aiSubagentLabel": "Subagent",
"aiSubagentStatusRunning": "Running",
"aiSubagentStatusCompleted": "Completed",
"aiSubagentStatusCancelled": "Cancelled",
"aiSubagentStatusFailed": "Failed",
"aiSubagentWorking": "Starting work…",
"aiToolGetBusinessInfo": "Business info",
"aiToolSearchInvoices": "Search invoices",
"aiToolGetInvoiceDetails": "Invoice details",
"aiToolGetInvoicesCount": "Count invoices",
"aiToolCreateInvoice": "Create invoice",
"aiToolSearchProducts": "Search products",
"aiToolGetProductInfo": "Product info",
"aiToolGetInventoryStatus": "Inventory status",
"aiToolGetProductKardex": "Product kardex",
"aiToolGetCustomerInfo": "Customer info",
"aiToolSearchPersons": "Search persons",
"aiToolGetPersonBalance": "Person balance",
"aiToolCreatePerson": "Create person",
"aiToolUpdatePerson": "Update person",
"aiToolGetFinancialSummary": "Financial summary",
"aiToolGetDebtorsReport": "Debtors report",
"aiToolGetCreditorsReport": "Creditors report",
"aiToolSearchReceiptsPayments": "Search receipts/payments",
"aiToolCreateReceiptPayment": "Create receipt/payment",
"aiToolGetSalesReport": "Sales report",
"aiToolGetPurchaseReport": "Purchase report",
"aiToolGetInventoryValuation": "Inventory valuation",
"aiToolGetCashFlow": "Cash flow",
"aiToolSearchLeads": "Search leads",
"aiToolGetLeadDetails": "Lead details",
"aiToolSearchDeals": "Search deals",
"aiToolGetDealDetails": "Deal details",
"aiToolSearchActivities": "Search activities",
"aiToolGetCrmSummary": "CRM summary",
"aiToolGetPipelineReport": "Pipeline report",
"aiToolGetLeadFunnelReport": "Lead funnel report",
"aiToolInvokeConnector": "Invoke connector",
"aiToolQueryBusinessData": "Query business data",
"aiToolListQueryableFields": "Queryable fields",
"aiToolResolveDateRange": "Resolve date range",
"aiToolSearchWarehouseDocuments": "Search warehouse documents",
"aiToolGetWarehouseDocumentDetails": "Warehouse document details",
"aiToolListWarehouses": "List warehouses",
"aiToolGetWarehouseStockSummary": "Warehouse stock summary",
"aiToolSearchChecks": "Search checks",
"aiToolGetCheckDetails": "Check details",
"aiToolSearchTransfers": "Search transfers",
"aiToolSearchExpenseIncome": "Search expense/income",
"aiToolSearchDocuments": "Search documents",
"aiToolGetDocumentDetails": "Document details",
"aiToolListBankAccounts": "List bank accounts",
"aiToolListCashRegisters": "List cash registers",
"aiToolListFiscalYears": "List fiscal years",
"aiToolGetCurrentFiscalYear": "Current fiscal year",
"aiToolGetBusinessDashboard": "Business dashboard",
"aiToolGetPersonTransactions": "Comprehensive person ledger",
"aiToolSearchProjects": "Search projects",
"aiToolGetProjectSummary": "Project summary",
"aiToolListBoms": "List BOMs",
"aiToolGetBomDetails": "BOM details",
"aiToolSearchProductionDocuments": "Production documents",
"aiToolSearchRepairOrders": "Repair orders",
"aiToolGetRepairOrderDetails": "Repair order details",
"aiToolGetTaxSettings": "Tax settings",
"aiToolSearchTaxWorkspace": "Tax workspace",
"aiToolGetTaxDataQuality": "Tax data quality",
"aiToolListWorkflows": "List workflows",
"aiToolListWorkflowExecutions": "Workflow executions",
"aiToolListDistributionRoutes": "Distribution routes",
"aiToolSearchWarrantyCodes": "Warranty codes",
"aiToolListPettyCash": "Petty cash",
"aiToolGetCustomerClubSettings": "Customer club settings",
"aiToolListCustomerClubTiers": "Customer club tiers",
"aiToolListCustomerClubLedger": "Customer club ledger",
"aiToolGetCustomerClubRfmSummary": "RFM summary",
"aiToolSearchCustomerClubRfmPersons": "RFM customer search",
"aiToolGetQuickSalesSettings": "Quick sales settings",
"aiToolListPriceLists": "Price lists",
"aiToolSearchActivityLogs": "Activity logs",
"aiToolGetOpeningBalance": "Opening balance",
"aiToolGetBusinessCreditSettings": "Credit settings",
"aiToolListCreditInstallmentPlans": "Installment plans",
"aiToolGetPersonCredit": "Customer credit",
"aiToolListWooCommerceOrders": "WooCommerce orders",
"aiToolListWooCommerceProducts": "WooCommerce products",
"aiToolListBasalamSyncedInvoices": "Basalam invoices",
"aiToolListBasalamProductConflicts": "Basalam product conflicts",
"aiTraceStepsHeader": "Execution steps ({count})",
"@aiTraceStepsHeader": {
"placeholders": { "count": { "type": "int" } }
},
"aiTraceStepsActive": "{count} active",
"@aiTraceStepsActive": {
"placeholders": { "count": { "type": "int" } }
},
"aiActionCopy": "Copy",
"aiActionRegenerate": "Regenerate",
"aiActionThumbsUp": "Helpful",
"aiActionThumbsDown": "Not helpful",
"aiActionShare": "Share",
"aiActionApplyHScript": "Apply to HScript studio",
"aiActionEditResend": "Edit and resend",
"aiActionEditAssistantText": "Edit reply text",
"aiActionEditAndRegenerate": "Edit and regenerate",
"aiActionFork": "Branch from here",
"aiStatusAgentProgress": "Step {iteration} of {max}",
"@aiStatusAgentProgress": {
"placeholders": {
"iteration": { "type": "int" },
"max": { "type": "int" }
}
},
"aiTracePlanningAction": "Planning action",
"aiTracePlanningNext": "Planning next step…",
"aiTraceRetrying": "Retrying ({attempt} of {max})…",
"@aiTraceRetrying": {
"placeholders": {
"attempt": { "type": "String" },
"max": { "type": "String" }
}
},
"aiTraceNeedMoreExploration": "More analysis needed before final answer",
"aiReasoningPanelTitle": "Reasoning & analysis steps",
"aiReasoningBudgetTitle": "Analysis budget",
"aiReasoningToolsUsedTitle": "Tools used",
"aiTraceReasoning": "Thinking…",
"aiConfidenceHigh": "High confidence",
"aiConfidenceMedium": "Needs review",
"aiConfidenceLow": "Insufficient data",
"aiStatusAwaitingApproval": "Waiting for your approval to proceed",
"aiAnswerPanelTitle": "Final answer",
"aiErrorRecoveryTitle": "Could not complete the response",
"aiErrorRecoveryRetry": "Try again",
"aiErrorRecoveryDismiss": "Dismiss",
"aiContinueAnalysis": "Continue analysis",
"aiContinueAnalysisHint": "The analysis stopped early. Continue from the same run without repeating completed tools.",
"aiContinueAnalysisDismiss": "Not now",
"aiStreamStallError": "The connection dropped. Your reply so far is saved.",
"aiStreamEmptyError": "The reply did not finish because the connection closed.",
"aiStreamAvailabilityCheckFailed": "Cannot send right now: {error}",
"@aiStreamAvailabilityCheckFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"aiContinueAfterRefreshHint": "The previous analysis was left unfinished. You can continue from the same point.",
"aiResumingPreviousRun": "Resuming the previous reply...",
"aiCrmAssistantTitle": "Smart assistant",
"aiCrmSummarizeAction": "Summary and next step",
"aiCrmStopAction": "Stop",
"aiTicketAssistantTitle": "AI assistance",
"aiTicketAssistantHintExpanded": "The assistant is ready. Get a suggestion or send an automatic reply.",
"aiTicketAssistantHintCollapsed": "Tap to show the assistant and AI actions.",
"aiTicketSuggestReply": "Suggest a reply",
"aiTicketAutoReply": "Automatic reply",
"aiTicketAutoReplyConfirmTitle": "Automatic reply",
"aiTicketAutoReplyConfirmBody": "Should the assistant reply to this ticket automatically?",
"aiTicketSuggestionLabel": "AI suggestion",
"aiTicketUseSuggestion": "Use this reply",
"aiTicketSuggestFailed": "Could not get a suggestion: {error}",
"@aiTicketSuggestFailed": {
"placeholders": { "error": { "type": "String" } }
},
"aiConversationNavTitle": "Messages ({count})",
"@aiConversationNavTitle": {
"placeholders": {
"count": { "type": "int" }
}
},
"aiConversationNavUser": "Your message",
"aiConversationNavAssistant": "Assistant reply",
"aiTraceRunningTool": "Running {toolName}",
"@aiTraceRunningTool": {
"placeholders": { "toolName": { "type": "String" } }
},
"aiTraceObservation": "Result: {toolName}",
"@aiTraceObservation": {
"placeholders": { "toolName": { "type": "String" } }
},
"aiTraceComposingAnswer": "Composing final answer",
"aiTraceExploring": "Exploring…",
"aiTraceExploringDone": "Exploration complete",
"aiTraceExploringTarget": "Exploring: {target}",
"@aiTraceExploringTarget": {
"placeholders": { "target": { "type": "String" } }
},
"aiTraceExploredTarget": "Explored: {target}",
"@aiTraceExploredTarget": {
"placeholders": { "target": { "type": "String" } }
},
"aiTraceExplored": "Reviewed · {title} ({count} sources)",
"@aiTraceExplored": {
"placeholders": {
"title": { "type": "String" },
"count": { "type": "String" }
}
},
"aiTraceThought": "Key findings · {count}",
"@aiTraceThought": {
"placeholders": { "count": { "type": "String" } }
},
"settingsCategoryExternalServices": "External Services",
"settingsCategoryExternalServicesDescription": "External service integrations",
"settingsCategoryMonitoringLogs": "Monitoring & Logs",
"settingsCategoryMonitoringLogsDescription": "System monitoring and logging",
"settingsShareLinks": "Share Links",
"settingsShareLinksDescription": "Configure public share link destinations",
"personShareLinkActive": "Active link",
"personShareCopyAndSendLink": "Copy and share link",
"personShareRevokeLink": "Revoke link",
"personShareRevoking": "Revoking...",
"personShareRefreshStatus": "Refresh status",
"personShareLinkHint": "This short link is ready to share via SMS or social networks.",
"personShareStatus": "Status",
"personShareExpiry": "Expiry",
"personShareViews": "Views",
"personShareLastView": "Last view",
"personShareCreateNew": "Create new link",
"personShareCreateWarning": "Creating a new link will deactivate the previous one (if any).",
"personShareExpiryLabel": "Link validity",
"personShareExpiry7Days": "7 days (default)",
"personShareExpiry14Days": "14 days",
"personShareExpiry30Days": "30 days",
"personShareExpiryNone": "No expiry",
"personShareMaxViewsLabel": "Max views allowed",
"personShareMaxViewsHint": "1–1000 or empty (unlimited). e.g. 5",
"personShareDocumentsLimit": "Account card row count",
"personShareIncludeLedger": "Show account card",
"personShareIncludeLedgerSubtitle": "Person account transactions including invoice line items",
"personShareIncludeInvoices": "Show invoice list",
"personShareIncludeInvoicesSubtitle": "Latest invoices for this person",
"personShareCreateButton": "Create link",
"personShareCreateButtonNew": "Create new link",
"personShareCreating": "Creating...",
"personShareRefresh": "Refresh",
"personShareValidationAtLeastOne": "At least one of “Show account card” or “Show invoice list” must be enabled.",
"personSharePermissionHint": "You need edit permission on people to create or revoke links.",
"personShareLinkCopied": "Link copied to clipboard",
"personShareLinkCopiedAndShare": "Link copied; you can share it via SMS or social networks.",
"personShareRetry": "Retry",
"personShareNoExpiry": "No expiry",
"personShareNotSet": "Not set",
"personShareLinkCreated": "Share link created successfully",
"personShareLinkRevoked": "Share link revoked",
"personShareLinkCreateError": "Failed to create link",
"personShareLinkRevokeError": "Failed to revoke link",
"personShareSendLinkBySms": "Send link via SMS",
"personShareSendingSms": "Sending...",
"personShareNoMobileHint": "Mobile number is not set for this customer.",
"personShareNoTemplateHint": "No approved template found for account card link. Create and approve a template for the “Send account card link” event in Notification Templates.",
"personShareSmsSent": "SMS sent successfully.",
"personShareCreateLinkFirst": "Create a link first.",
"personShareSendToNumberLabel": "Send to another number (optional)",
"personShareSendToNumberHint": "Leave empty to use the number saved for this customer",
"quickSalesAutoCreateReceiptSwitch": "Create receipt document",
"quickSalesAutoCreateReceiptSwitchHint": "Record cash, bank, or check receipts with the invoice. Any remainder stays on the customer account.",
"quickSalesPayCashRegister": "Cash register",
"quickSalesPayCashRegisterHint": "Select cash register",
"quickSalesPayBank": "Bank",
"quickSalesPayBankHint": "Select bank account",
"quickSalesPayCheck": "Check",
"quickSalesPayCheckHint": "Select or add a received check",
"quickSalesPayAmount": "Amount",
"quickSalesPayAddCash": "+ Cash",
"quickSalesPayAddBank": "+ Bank",
"quickSalesPayAddCheck": "+ Check",
"quickSalesPayFillRemaining": "Fill remaining",
"quickSalesPayRemoveLine": "Remove this payment",
"quickSalesPayPaidLabel": "Paid",
"quickSalesPayRemainingLabel": "Remaining",
"quickSalesPaySettled": "Fully settled",
"quickSalesPayPartialStatus": "Remainder stays on the customer account",
"quickSalesPayOverpaid": "Payments exceed the invoice total",
"quickSalesPayRemainingCustomerHint": "The remainder is recorded as credit on this customer.",
"quickSalesPayRemainingAnonymousHint": "The remainder will be on the walk-in customer. Choose a real customer for credit sales.",
"quickSalesPayShareRemaining": "Send a link for the remainder",
"quickSalesPayShareRemainingHint": "Send an online payment link only for the unpaid amount",
"quickSalesPaySelectCashRegister": "Select a cash register for the cash payment",
"quickSalesPaySelectBank": "Select a bank account for the bank payment",
"quickSalesPaySelectCheck": "Select or add a check for the check payment",
"quickSalesPayOverpaidError": "Payments exceed the invoice total. Adjust the amounts.",
"quickSalesPayNeedDestination": "Each payment line needs a cash register, bank, or check",
"quickSalesPaySameTypeHint": "You can add several receipts of the same type, for example two bank or card payments. Each line creates its own receipt document.",
"quickSalesCheckoutDetails": "Document details",
"quickSalesCheckoutWarehouseRequired": "A warehouse is required to post stock",
"quickSalesShareSectionTitle": "Share",
"quickSalesShareSectionHint": "Send the invoice with an online payment link to the customer",
"quickSalesShareOnlinePayment": "Online payment on link",
"quickSalesShareOnlinePaymentHint": "Customer is redirected to your payment gateway from the link",
"quickSalesShareGatewayLabel": "Payment gateway",
"quickSalesShareNoGateway": "No payment gateway is configured for this business",
"quickSalesShareChannelSms": "SMS",
"quickSalesShareChannelEmail": "Email",
"quickSalesShareChannelNative": "Share (copy / other apps)",
"quickSalesShareNoPhoneHint": "Customer mobile is missing — SMS is disabled",
"quickSalesShareNoEmailHint": "Customer email is missing — email is disabled",
"quickSalesShareNoInvoiceEditPermission": "You do not have permission to create invoice share links",
"quickSalesShareNoNotificationPermission": "No permission to send notifications — link was created",
"quickSalesShareGatewayRequired": "Select a payment gateway for online payment",
"quickSalesShareLinkCreated": "Invoice link created",
"quickSalesShareLinkFailed": "Invoice saved but share link creation failed",
"quickSalesShareSmsSkippedNoPhone": "SMS not sent (customer mobile missing)",
"quickSalesShareEmailSkippedNoEmail": "Email not sent (customer email missing)",
"quickSalesShareNoTemplateHint": "No approved template for invoice share link. Create and approve a template for event \"Invoice share link\" in notification templates.",
"quickSalesShareEmailSent": "Email sent successfully.",
"quickSalesSettingsShareDefaultsTitle": "Default invoice share settings",
"quickSalesSettingsShareDefaultsHint": "Used on the quick sales page when receipt is off, or when sharing a remaining balance",
"quickSalesSettingsShareExpiryLabel": "Link expiry",
"quickSalesSettingsShareExpiry7Days": "7 days",
"quickSalesSettingsShareExpiry14Days": "14 days",
"quickSalesSettingsShareExpiry30Days": "30 days",
"quickSalesParkedNewSale": "New sale",
"quickSalesParkedNewSaleTooltip": "Hold the current cart and start another sale (Ctrl+N)",
"quickSalesParkedNewSaleAlreadyEmpty": "The current cart is already empty. Add items or choose a customer first.",
"quickSalesParkedMaxReached": "You can keep at most {count} open sales. Finish or discard one first.",
"@quickSalesParkedMaxReached": {"placeholders": {"count": {"type": "int"}}},
"quickSalesParkedSaleFallback": "Sale {index}",
"@quickSalesParkedSaleFallback": {"placeholders": {"index": {"type": "int"}}},
"quickSalesParkedSaleEmpty": "Empty",
"quickSalesParkedSaleSubtitle": "{count} items · {amount}",
"@quickSalesParkedSaleSubtitle": {
"placeholders": {
"count": {"type": "int"},
"amount": {"type": "String"}
}
},
"quickSalesParkedDiscardTooltip": "Discard this sale",
"quickSalesParkedDiscardTitle": "Discard this sale?",
"quickSalesParkedDiscardBody": "This held sale and its items will be removed. This cannot be undone.",
"quickSalesParkedDiscardConfirm": "Discard",
"quickSalesParkedAnonymousCustomer": "Walk-in customer",
"settingsRedisCache": "Redis Cache",
"settingsRedisCacheDescription": "Configure Redis cache for improved performance",
"settingsFirewall": "Application firewall",
"settingsFirewallDescription": "IP allow/deny, per-path rate limits (database), temporary bans, logs and reports",
"firewallTabRules": "Rules",
"firewallTabRatePolicies": "Path rate limits",
"firewallTabBlockLogs": "Blocked requests",
"firewallTabAudit": "Audit log",
"firewallTabReports": "Reports",
"firewallAddRatePolicy": "Add rate policy",
"firewallEditRatePolicy": "Edit rate policy",
"firewallRatePolicyPathRequired": "Path prefix (e.g. /api/v1/public/crm-chat)",
"firewallRateMaxRequests": "Max requests per window",
"firewallRateWindowSeconds": "Window size (seconds)",
"firewallNoRatePolicies": "No rate policies. Use this for per-IP limits on public API paths (e.g. web chat).",
"firewallDeleteRatePolicyTitle": "Delete rate policy?",
"firewallDeleteRatePolicyBody": "The rate limit for this path will be removed.",
"firewallEnabled": "Enabled",
"firewallAddRule": "Add rule",
"firewallEditRule": "Edit rule",
"firewallActionLabel": "Action",
"firewallActionAllow": "Allow",
"firewallActionDeny": "Deny",
"firewallIpCidr": "IP or CIDR",
"firewallPathPrefixOptional": "Path prefix (optional)",
"firewallHttpMethodsOptional": "HTTP methods e.g. GET,POST (optional)",
"firewallPriority": "Priority (lower = evaluated first)",
"firewallNoteOptional": "Note (optional)",
"firewallSaved": "Saved",
"firewallBanIp": "Ban IP",
"firewallDurationMinutesHint": "Duration in minutes (empty = permanent until removed)",
"firewallBanDone": "Ban applied",
"firewallActiveOnlyFilter": "Active rules only",
"firewallRefresh": "Refresh",
"firewallNoRules": "No rules",
"firewallDeleteConfirmTitle": "Delete rule?",
"firewallDeleteConfirmBody": "This cannot be undone.",
"firewallNoExpiry": "No expiry",
"firewallFilterByIp": "Filter by IP",
"firewallReportsPeriod": "Period",
"firewallReportsDays": "days",
"firewallReportsTotalBlocks": "Blocked requests (period)",
"firewallReportsActiveDenyRules": "Active deny rules",
"firewallReportsTopIps": "Top blocked IPs",
"firewallReportsByDay": "Blocks by day",
"settingsStoragePlans": "Storage Plans",
"settingsStoragePlansDescription": "Manage storage plans and pricing",
"settingsDocumentMonetization": "Document Monetization",
"settingsDocumentMonetizationDescription": "Manage document revenue scenarios and packages",
"settingsMarketplacePlugins": "Marketplace Plugins Management",
"settingsMarketplacePluginsDescription": "Manage plugins and plans for the marketplace",
"settingsWalletSettings": "Wallet Settings",
"settingsWalletSettingsDescription": "Set base currency and policies",
"settingsCurrenciesAdmin": "Currency management",
"settingsCurrenciesAdminDescription": "Decimal places, rounding, add or remove currencies",
"settingsFxProvidersAdmin": "FX rate providers",
"settingsFxProvidersAdminDescription": "API keys and centralized rate fetch (BRS, Mesghal, …)",
"settingsPaymentGateways": "Payment Gateways",
"settingsPaymentGatewaysDescription": "Manage and configure payment gateways",
"settingsBusinessesManagement": "Businesses Management",
"settingsBusinessesManagementDescription": "View and manage all system businesses",
"settingsAnnouncements": "Announcements",
"settingsAnnouncementsDescription": "Create/edit/publish system announcements",
"settingsNotifications": "Notifications",
"settingsNotificationsDescription": "Enable/disable channels and send test messages",
"settingsNotificationTemplates": "Notification Templates",
"settingsNotificationTemplatesDescription": "Manage templates for channels and languages",
"settingsSupportOperators": "Support operators",
"settingsSupportOperatorsDescription": "Grant or revoke support operator access for users",
"settingsNotificationModeration": "Notification template moderation",
"settingsNotificationModerationDescription": "Approve or reject notification templates submitted by businesses",
"settingsNotificationSmsPricing": "Notification SMS pricing",
"settingsNotificationSmsPricingDescription": "Set the price per SMS for business notifications",
"settingsSystemScripts": "System scripts",
"settingsSystemScriptsDescription": "Run global corrective operations for all businesses",
"supportOperatorsPageTitle": "Support operators",
"supportOperatorsRemoveOperatorTitle": "Remove operator",
"supportOperatorsRemoveOperatorConfirm": "Are you sure you want to revoke operator access for {email}?",
"@supportOperatorsRemoveOperatorConfirm": {
"placeholders": {
"email": {"type": "String"}
}
},
"supportOperatorsAccessRevokedSuccess": "Operator access revoked successfully",
"supportOperatorsEmpty": "No support operators found",
"supportOperatorsEmptyHint": "To add an operator, use the User Management page.",
"supportOperatorsTelegramConnected": "Telegram linked",
"supportOperatorsTelegramNotConnected": "Not linked",
"supportOperatorsStatusInactive": "Inactive",
"settingsAISettings": "AI Settings",
"settingsAISettingsDescription": "Configure Provider, model and API Key",
"settingsAIPlans": "AI Plans",
"settingsAIPlansDescription": "Manage AI usage plans and pricing",
"settingsAIModels": "AI Models",
"settingsAIModelsDescription": "Manage available AI models catalog",
"settingsAIProviderCredentials": "AI Provider Credentials",
"settingsAIProviderCredentialsDescription": "Separate API keys per OpenAI, Anthropic, Local",
"settingsAIPrompts": "AI Prompts",
"settingsAIPromptsDescription": "Manage default prompts for different roles",
"settingsAISkills": "AI Skills",
"settingsAISkillsDescription": "Review and approve skills published to the marketplace",
"settingsAIMarketplace": "AI Marketplace",
"settingsAIMarketplaceDescription": "Configure publisher revenue share for skill sales",
"settingsZohalServices": "Zohal Services",
"settingsZohalServicesDescription": "Manage Zohal inquiry services and API settings",
"settingsZohalSettings": "Zohal Settings",
"settingsZohalSettingsDescription": "Set API Key and configure Zohal service",
"settingsTaxProductCodes": "Tax Product Codes",
"settingsTaxProductCodesDescription": "Search and import new list from XML file",
"settingsSystemMonitoring": "System Monitoring",
"settingsSystemMonitoringDescription": "Check system status, hardware resources and services",
"settingsServiceLogs": "Service Logs",
"settingsServiceLogsDescription": "View logs for hesabix-api, hesabix-rq-worker, and hesabix-notification-moderation and manage services",
"settingsBusinessActivityLogs": "Business Activity Logs",
"settingsBusinessActivityLogsDescription": "View activity logs across all businesses with filters by date, business, user, and action type",
"serviceLogsPauseAutoRefreshTooltip": "Pause auto-refresh",
"serviceLogsResumeAutoRefreshTooltip": "Resume auto-refresh",
"serviceLogsRefreshTooltip": "Refresh",
"serviceLogsFollowTailOnTooltip": "Follow latest log line is on; turn off to read older entries",
"serviceLogsFollowTailOffTooltip": "Follow latest log line is off",
"serviceLogsLinesLabel": "Line count",
"serviceLogsSearchHint": "Search log text…",
"serviceLogsFilterAll": "All",
"serviceLogsFilterErrors": "Errors",
"serviceLogsFilterWarnings": "Warn+",
"serviceLogsActive": "Active",
"serviceLogsInactive": "Inactive",
"serviceLogsEnabled": "Enabled at boot",
"serviceLogsDisabled": "Disabled at boot",
"serviceLogsRestart": "Restart",
"serviceLogsRestartConfirmTitle": "Confirm restart",
"serviceLogsRestartConfirmBody": "Service «{serviceName}» may be briefly unavailable. Type the exact service name to continue.",
"@serviceLogsRestartConfirmBody": {
"placeholders": {
"serviceName": {"type": "String"}
}
},
"serviceLogsRestartTypeHint": "Service name",
"serviceLogsStatusDetails": "systemctl status details",
"serviceLogsNoStatusOutput": "No status output available.",
"serviceLogsErrorTitle": "Failed to load logs",
"serviceLogsRetry": "Retry",
"serviceLogsEmpty": "No log entries",
"serviceLogsLogCount": "Log lines: {count}",
"@serviceLogsLogCount": {
"placeholders": {
"count": {"type": "int"}
}
},
"serviceLogsFilteredCount": "Showing {shown} of {total}",
"@serviceLogsFilteredCount": {
"placeholders": {
"shown": {"type": "int"},
"total": {"type": "int"}
}
},
"serviceLogsLegendError": "Error",
"serviceLogsLegendWarn": "Warning",
"serviceLogsLegendInfo": "Info",
"serviceLogsFetchError": "Failed to fetch logs: {error}",
"@serviceLogsFetchError": {
"placeholders": {
"error": {"type": "String"}
}
},
"serviceLogsRestartError": "Restart failed: {error}",
"@serviceLogsRestartError": {
"placeholders": {
"error": {"type": "String"}
}
},
"serviceLogsRestartSuccessDefault": "Service restarted successfully",
"serviceLogsFollowTailChip": "Follow tail",
"serviceLogsEmptyAllowedList": "The server returned an empty allowed-service list.",
"serviceLogsNoFilterMatches": "No lines match the current filters or search",
"serviceLogsAllowedServicesFetchFailed": "Could not refresh the service list from the server; using defaults. {error}",
"@serviceLogsAllowedServicesFetchFailed": {
"placeholders": {
"error": {"type": "String"}
}
},
"serviceLogsStatusLoadFailed": "Could not load service status: {error}",
"@serviceLogsStatusLoadFailed": {
"placeholders": {
"error": {"type": "String"}
}
},
"settingsDatabaseBackup": "Database Backup",
"settingsDatabaseBackupDescription": "Create full database backup and send to email, FTP or download directly",
"warranty": "Warranty",
"warrantyManagement": "Warranty Management",
"warrantySettings": "Warranty Settings",
"warrantyCodes": "Warranty Codes",
"warrantyCode": "Warranty Code",
"warrantySerial": "Warranty Serial",
"generateWarrantyCodes": "Generate Warranty Codes",
"warrantyActivation": "Warranty Activation",
"warrantyTracking": "Warranty Tracking",
"warrantyStatus": "Warranty Status",
"warrantyGenerated": "Generated",
"warrantyActivated": "Activated",
"warrantyExpired": "Expired",
"warrantyUsed": "Used",
"warrantyRevoked": "Revoked",
"warrantyDuration": "Warranty Duration",
"warrantyDurationDays": "Warranty Duration (Days)",
"warrantyExpiresAt": "Expires At",
"warrantyGeneratedAt": "Generated At",
"warrantyActivatedAt": "Activated At",
"warrantyProduct": "Warranty Product",
"warrantyCustomer": "Customer",
"warrantyCustomerName": "Customer Name",
"warrantyCustomerPhone": "Customer Phone",
"warrantyCustomerEmail": "Customer Email",
"warrantyProductSerial": "Product Serial",
"activateWarranty": "Activate Warranty",
"trackWarranty": "Track Warranty",
"warrantyTrackingLink": "Warranty Tracking Link",
"warrantyCodeFormat": "Code Format",
"warrantyCodePrefix": "Code Prefix",
"warrantySerialFormat": "Serial Format",
"warrantySerialLength": "Serial Length",
"warrantyRandom": "Random",
"warrantySequential": "Sequential",
"warrantyCustom": "Custom",
"warrantySecuritySettings": "Security Settings",
"warrantyRequireSerialVerification": "Require Product Serial Verification",
"warrantyRequireProductInstanceMatch": "Require Product Instance Match",
"warrantyMaxActivationAttempts": "Max Activation Attempts",
"warrantyActivationLockoutDuration": "Lockout Duration (Minutes)",
"warrantyAutoLinkToPerson": "Auto Link to Person",
"warrantyEnableTrackingLink": "Enable Tracking Link",
"warrantyTrackingLinkExpiresDays": "Tracking Link Expires (Days)",
"warrantyEnableSmsNotification": "Send SMS on Activation",
"warrantyEnableEmailNotification": "Send Email on Activation",
"warrantyCodeNotFound": "Warranty code not found",
"warrantyInvalidSerial": "Invalid warranty serial",
"warrantyAlreadyActivated": "This warranty has already been activated",
"warrantyExpired": "This warranty has expired",
"warrantyRevoked": "This warranty has been revoked",
"warrantyActivationSuccess": "Warranty activated successfully",
"warrantyActivationFailed": "Warranty activation failed",
"warrantyTooManyAttempts": "Too many activation attempts",
"warrantyProductSerialRequired": "Product serial is required",
"warrantyProductSerialNotFound": "Product serial not found",
"warrantyLinkNotFound": "Tracking link not found",
"warrantyLinkExpired": "Tracking link has expired",
"warrantyLinkInactive": "Tracking link is inactive",
"warrantyPluginNotActive": "Warranty plugin is not active for this business",
"warrantyGenerateCodes": "Generate Warranty Codes",
"warrantyQuantity": "Quantity",
"warrantyCustomSerials": "Custom Serials",
"warrantyCustomCodes": "Custom Codes",
"warrantyListCodes": "List Warranty Codes",
"warrantyFilterByStatus": "Filter by Status",
"warrantyFilterByProduct": "Filter by Product",
"warrantyEvents": "Warranty Events",
"warrantyEventActivation": "Activation",
"warrantyEventRepairRequest": "Repair Request",
"warrantyEventRepairCompleted": "Repair Completed",
"warrantyEventReplacement": "Replacement",
"warrantyEventExpired": "Expired",
"warrantyEventRevoked": "Revoked",
"warrantyManage": "Manage Warranty",
"customerClubTitle": "Customer Club",
"customerClubMenu": "Customer Club",
"payrollTitle": "Payroll",
"payrollMenu": "Payroll",
"payrollPluginNotActive": "The payroll add-on is not active for this business. Activate it from the plugin marketplace.",
"businessSettingsPayroll": "Payroll",
"businessSettingsPayrollDescription": "Payroll items, account mapping, and calculation rules",
"payrollPermissionManage": "Manage payroll settings and items",
"payrollPermissionOperate": "Create and edit payroll documents and runs",
"payrollPermissionPost": "Post payroll accounting documents",
"payrollPermissionApprove": "Approve and finalize payroll runs",
"payrollDashboardActiveEmployees": "Active employees",
"payrollDashboardDraftRuns": "Draft payroll runs",
"payrollItemsTab": "Payroll items",
"payrollEmployeesTab": "Employees",
"payrollRunsTab": "Payroll documents",
"payrollSettingsTab": "Payroll settings",
"payrollNoRunsYet": "No payroll documents yet.",
"payrollNoItemsYet": "No payroll items defined.",
"payrollNoEmployeesYet": "No employees registered.",
"payrollItemKindEarning": "Earnings",
"payrollItemKindDeduction": "Deductions",
"payrollItemKindEmployerCost": "Employer cost",
"payrollSettingsEnabled": "Enable payroll module",
"payrollSettingsEnabledDescription": "When disabled, new payroll documents cannot be created.",
"payrollSettingsItemsDescription": "The items below can be used in payroll documents. Map each item to a chart of accounts entry.",
"payrollItemCategories": "Item categories",
"payrollSystemItem": "System",
"payrollDefaultAccounts": "Default accounts",
"payrollDefaultAccountsHint": "Used when an item has no dedicated account mapping.",
"payrollAccountWagesPayable": "Wages payable",
"payrollAccountExpense": "Payroll expense",
"payrollAccountTaxPayable": "Payroll tax payable",
"payrollAccountInsurancePayable": "Insurance payable",
"payrollAddItem": "Add payroll item",
"payrollEditItem": "Edit payroll item",
"payrollItemName": "Item name",
"payrollItemKindLabel": "Item type",
"payrollSelectAccount": "Select chart of accounts entry",
"payrollCalculationType": "Calculation type",
"payrollCalcManual": "Manual",
"payrollCalcFixed": "Fixed amount",
"payrollCalcPercentBase": "Percent of base salary",
"payrollDefaultAmount": "Default amount",
"payrollPercentValue": "Percent",
"payrollShowOnPayslip": "Show on payslip",
"payrollAddEmployee": "Add employee",
"payrollEditEmployee": "Edit employee",
"payrollEmployeeCode": "Employee code",
"payrollJobTitle": "Job title",
"payrollBaseSalary": "Base salary",
"payrollEmploymentType": "Employment type",
"payrollEmploymentFullTime": "Full-time",
"payrollEmploymentPartTime": "Part-time",
"payrollEmploymentContract": "Contract",
"payrollInsuranceNumber": "Insurance number",
"payrollTaxId": "Tax ID",
"payrollHireDate": "Hire date",
"payrollTerminationDate": "Termination date",
"payrollPeriodStartDate": "Period start date",
"payrollPeriodEndDate": "Period end date",
"payrollEmployeePersonHint": "Only persons marked as employee are listed.",
"payrollEmployeeDepartment": "Department",
"payrollNewRun": "New payroll document",
"payrollEditRun": "Edit payroll document",
"payrollRunTitle": "Document title",
"payrollRunDate": "Document date",
"payrollPeriod": "Payroll period",
"payrollSelectEmployees": "Select at least one employee.",
"payrollFinalizeRun": "Finalize",
"payrollRunFinalized": "Payroll document finalized.",
"payrollDeleteRunConfirm": "Delete this payroll document?",
"payrollStatusDraft": "Draft",
"payrollStatusFinalized": "Finalized",
"payrollStatusPendingApproval": "Pending approval",
"payrollStatusCancelled": "Cancelled",
"payrollGrossTotal": "Gross",
"payrollDeductionTotal": "Deductions",
"payrollNetTotal": "Net pay",
"payrollNetAmount": "Net",
"payrollCreateRun": "Create payroll document",
"payrollPeriodsTab": "Payroll periods",
"payrollAddPeriod": "New period",
"payrollPeriodYear": "Year",
"payrollPeriodMonth": "Month",
"payrollClosePeriod": "Close period",
"payrollClosePeriodConfirm": "After closing, new payroll documents cannot be created for this month. Continue?",
"payrollPeriodClosed": "Period closed.",
"payrollPeriodStatusOpen": "Open",
"payrollPeriodStatusClosed": "Closed",
"payrollNoPeriodsYet": "No payroll periods defined yet.",
"payrollDepartmentsTab": "Departments",
"payrollAddDepartment": "Add department",
"payrollEditDepartment": "Edit department",
"payrollDepartmentCode": "Department code",
"payrollDepartmentName": "Department name",
"payrollSortOrder": "Sort order",
"payrollImportEmployeesHint": "Excel must include person_id or person_code and employee_code.",
"payrollImportCreated": "Created",
"payrollImportUpdated": "Updated",
"payrollImportErrorCount": "Errors",
"payrollImportRunLines": "Import amounts from Excel",
"payrollImportRunLinesHint": "Fill employee_code and item:item_code columns.",
"payrollImportUpdatedLines": "Updated lines",
"payrollDownloadPayslip": "Download payslip PDF",
"payrollCopyRun": "Copy document",
"payrollCopyRunSuccess": "New document created from copy.",
"payrollDepartmentSummary": "Summary by department",
"payrollPayslipSaved": "Payslip PDF saved.",
"payrollStatusApproved": "Approved",
"payrollStatusPosted": "Posted to accounting",
"payrollApproveRun": "Approve payroll",
"payrollRunApproved": "Payroll document approved.",
"payrollPostAccounting": "Post accounting entry",
"payrollPostAccountingConfirm": "An accrual journal entry will be created. Continue?",
"payrollPostedSuccess": "Payroll accounting entry posted.",
"payrollPostPayment": "Post payment entry",
"payrollPostPaymentHint": "Select the bank or cash account for payment.",
"payrollPaymentAccount": "Payment account",
"payrollPaymentPosted": "Payroll payment entry posted.",
"payrollAccountingLinks": "Related accounting documents",
"payrollLinkAccrual": "Accrual entry",
"payrollLinkPayment": "Payment entry",
"payrollDashboardPendingApprovals": "Pending approval",
"payrollRejectRun": "Reject payroll run",
"payrollRejectReason": "Rejection reason (optional)",
"payrollRunRejected": "Payroll run returned to draft.",
"payrollReportsTitle": "Payroll reports",
"payrollReportsFilters": "Report filters",
"payrollStatutorySummary": "Insurance & tax summary",
"payrollItemSummaryReport": "Item breakdown",
"payrollEmployeeSummaryReport": "Employee breakdown",
"payrollPeriodOverviewReport": "Monthly period overview",
"payrollInsuranceEmployee": "Employee insurance",
"payrollInsuranceEmployer": "Employer insurance",
"payrollTaxTotal": "Total tax",
"payrollStatutoryRules": "Insurance & tax rules",
"payrollStatutoryRulesHint": "When enabled, insurance and tax items are computed from eligible earnings.",
"payrollStatutoryEnabled": "Auto insurance & tax calculation",
"payrollInsuranceEmployeeRate": "Employee insurance rate (%)",
"payrollInsuranceEmployerRate": "Employer insurance rate (%)",
"payrollInsuranceUnemploymentRate": "Employer unemployment rate (%)",
"payrollTaxFlatRate": "Flat tax rate (%)",
"payrollTaxExemption": "Tax exemption amount",
"payrollCalcStatutory": "Statutory (insurance/tax)",
"payrollWorkflowSettings": "Workflow",
"payrollRequireApproval": "Require approval before finalize",
"payrollRequireApprovalHint": "After finalize, the run stays in pending approval status.",
"payrollAutoPostOnFinalize": "Auto-post accounting on finalize",
"payrollAutoPostOnFinalizeHint": "Accounting errors do not roll back finalization.",
"customerClubTabLedger": "Transactions",
"customerClubTabSettings": "Settings",
"customerClubTabAdjust": "Adjust Points",
"customerClubLedgerTotal": "Transactions count",
"customerClubLoadMore": "Load more",
"customerClubBalanceAfter": "Balance after",
"customerClubPerson": "Person",
"customerClubEnabled": "Enable loyalty program",
"customerClubEarnMode": "Earning rule",
"customerClubEarnPercent": "Percentage of basis amount",
"customerClubEarnPerCurrency": "Points per currency bracket",
"customerClubAmountBasis": "Invoice amount basis",
"customerClubBasisNet": "Net excluding tax",
"customerClubBasisTotal": "Total including tax",
"customerClubPercentOfBasis": "Percent of basis",
"customerClubPercentHint": "Example: 1 means 1% of basis amount",
"customerClubStepAmount": "Bracket amount (currency)",
"customerClubPointsPerStep": "Points per bracket",
"customerClubRounding": "Rounding mode",
"customerClubMaxPointsInvoice": "Max points per invoice (optional)",
"customerClubMinBasis": "Minimum basis amount to earn points",
"customerClubRedemptionSection": "Redemption & expiry",
"customerClubCurrencyValuePerPoint": "Discount amount per loyalty point (invoice currency)",
"customerClubCurrencyValuePerPointHint": "How much invoice discount one point buys, in invoice currency.",
"customerClubMaxRedeemPerInvoice": "Maximum points redeemable per sales invoice (optional)",
"customerClubPointsExpireAfterDays": "Points validity from grant date (days)",
"customerClubPointsExpireAfterDaysHint": "Leave empty so points never expire.",
"customerClubRequireCustomerType": "Only contacts marked as Customer",
"customerClubSettingsSaved": "Club settings saved.",
"customerClubInvalidPersonId": "Invalid person id.",
"customerClubInvalidDelta": "Invalid delta points.",
"customerClubDescriptionRequired": "Description is required.",
"customerClubAdjustmentSaved": "Adjustment recorded.",
"customerClubNoAdjustPermission": "You cannot perform manual adjustments.",
"customerClubAdjustIntro": "Increase or decrease points manually. Delta may be negative.",
"customerClubPersonId": "Person ID",
"customerClubDeltaPoints": "Delta points (+/-)",
"customerClubSubmitAdjustment": "Submit adjustment",
"customerClubSettingsSubtitle": "Points rules, transactions and manual balances",
"customerClubRoundingFloor": "Round down (floor)",
"customerClubRoundingCeil": "Round up (ceil)",
"customerClubRoundingRound": "Round to nearest",
"customerClubReferenceDocument": "Document",
"customerClubPointsShort": "pts",
"customerClubTxnAdjustment": "Manual adjustment",
"customerClubTxnRedeem": "Points redemption",
"customerClubTxnRedeemVoid": "Redemption reversal",
"customerClubTxnInvoiceSync": "Invoice points sync",
"customerClubTxnInvoiceDeleteReversal": "Invoice deleted — points reversal",
"customerClubTxnInvoiceDeleteReversalRedeem": "Invoice deleted — redemption reversal",
"customerClubPermissionManageSettings": "Manage club settings ({title})",
"@customerClubPermissionManageSettings": {
"placeholders": {
"title": {"type": "String"}
}
},
"customerClubPermissionAdjustManual": "Manual points adjustment ({title})",
"@customerClubPermissionAdjustManual": {
"placeholders": {
"title": {"type": "String"}
}
},
"customerClubPermissionRedeemInvoice": "Redeem points on sales invoice ({title})",
"@customerClubPermissionRedeemInvoice": {
"placeholders": {
"title": {"type": "String"}
}
},
"customerClubActionAdjust": "Adjust",
"customerClubActionRedeem": "Redeem",
"customerClubLedgerEmpty": "No loyalty transactions yet.",
"customerClubLedgerShowingCount": "Showing {shown} of {total}",
"@customerClubLedgerShowingCount": {
"placeholders": {
"shown": {"type": "int"},
"total": {"type": "int"}
}
},
"customerClubSettingsSectionActivation": "Activation",
"customerClubSettingsSectionEarning": "Earning rules",
"customerClubSettingsSectionAccess": "Person role restriction",
"customerClubSettingsSummaryTitle": "Saved rules summary",
"customerClubLedgerFilterPerson": "Filter transactions by person",
"customerClubCurrentPointsBalance": "Current points balance for this person",
"customerClubViewLedgerAction": "Transactions",
"customerClubAdjustmentLargeDeltaTitle": "Confirm large adjustment",
"customerClubAdjustmentLargeDeltaBody": "Delta is {delta} points. Continue?",
"@customerClubAdjustmentLargeDeltaBody": {
"placeholders": {
"delta": {"type": "String"}
}
},
"customerClubSummaryInactive": "Customer club is disabled for this business.",
"customerClubTabAnalytics": "RFM / CLV analytics",
"customerClubAnalyticsTitle": "Customer analytics & segments",
"customerClubAnalyticsRecalculate": "Recalculate",
"customerClubAnalyticsRecalculating": "Calculating…",
"customerClubAnalyticsNoData": "No data yet. Enable RFM or CLV in settings, then tap Recalculate.",
"customerClubAnalyticsDisabled": "Enable “RFM analytics” and/or “CLV” in customer club settings to use this tab.",
"customerClubAnalyticsWindow": "Window: {start} to {end} ({months} mo)",
"@customerClubAnalyticsWindow": {
"placeholders": {
"start": {"type": "String"},
"end": {"type": "String"},
"months": {"type": "int"}
}
},
"customerClubAnalyticsTotalPersons": "Customers in report",
"customerClubAnalyticsLastRun": "Last computed",
"customerClubAnalyticsSearch": "Search name, company or code",
"customerClubAnalyticsFilterSegment": "Segment",
"customerClubAnalyticsAllSegments": "All",
"customerClubAnalyticsR": "R (recency)",
"customerClubAnalyticsF": "F (frequency)",
"customerClubAnalyticsM": "M (monetary)",
"customerClubAnalyticsCell": "RFM cell",
"customerClubAnalyticsCLV": "CLV",
"customerClubAnalyticsMonetary": "Amount (window)",
"customerClubAnalyticsRecency": "Days since last purchase",
"customerClubAnalyticsFrequency": "Purchase count",
"customerClubAnalyticsSegment": "Segment",
"customerClubAnalyticsLoyaltyBalance": "Points balance",
"customerClubCompositeScore": "Composite score",
"customerClubAnalyticsRefresh": "Refresh",
"customerClubAnalyticsLoadMore": "Load more",
"customerClubAnalyticsSortLabel": "Sort by",
"customerClubAnalyticsSortMonetary": "Monetary",
"customerClubAnalyticsSortRecency": "Recency",
"customerClubAnalyticsSortFrequency": "Frequency",
"customerClubAnalyticsSortClv": "CLV",
"customerClubAnalyticsSortSegment": "Segment",
"customerClubAnalyticsSortComposite": "Composite",
"customerClubAnalyticsRecalculateDone": "Recalculation completed.",
"customerClubSettingsSectionAnalytics": "RFM & customer lifetime value (CLV)",
"customerClubRfmEnabled": "Enable RFM analytics (recency, frequency, monetary)",
"customerClubClvEnabled": "Enable customer lifetime value (CLV) estimate",
"customerClubRfmWindowMonths": "Analysis window length (months)",
"customerClubRfmMonetaryBasisLabel": "Monetary basis for M",
"customerClubRfmScoringLabel": "Scoring method",
"customerClubRfmScoringQuintiles": "Quintiles (classic)",
"customerClubRfmScoringWeighted": "Weighted composite",
"customerClubRfmWeightR": "Weight — recency (R)",
"customerClubRfmWeightF": "Weight — frequency (F)",
"customerClubRfmWeightM": "Weight — monetary (M)",
"customerClubClvFormulaLabel": "CLV formula",
"customerClubClvFormulaHistorical": "Sum of purchases in window",
"customerClubClvFormulaProjection": "Avg order × annual frequency × lifespan",
"customerClubClvLifespanYears": "Estimated customer lifespan (years) — for projection",
"customerClubAnalyticsHint": "After changing settings, run Recalculate from the analytics tab.",
"customerClubSettingsSectionLoyaltyRfm": "Loyalty points vs RFM",
"customerClubLoyaltyRfmMode": "Integration mode",
"customerClubLoyaltyRfmDecoupled": "Separate: points from invoices; tiers use point balance",
"customerClubLoyaltyRfmTiers": "Tier multipliers follow RFM score (requires RFM analytics on)",
"customerClubLoyaltyRfmHint": "In RFM tier mode, set each tier’s min RFM score (0–1) via the tiers API field min_rfm_normalized, or rely on min_balance_points÷10000 as a fallback. Redemption still uses invoice-earned balance.",
"customerClubAnalyticsSegmentsTitle": "Segments",
"customerClubAnalyticsCampaignExport": "Campaign export",
"customerClubAnalyticsCampaignTitle": "Audience list for campaigns",
"customerClubAnalyticsCampaignBody": "Person IDs for the current filters (segment + search). Paste into your SMS/email tool.",
"customerClubAnalyticsCampaignCopyIds": "Copy IDs",
"customerClubAnalyticsCampaignTruncated": "Only {n} IDs returned; increase the API limit to fetch more.",
"@customerClubAnalyticsCampaignTruncated": {
"placeholders": {
"n": {"type": "int"}
}
},
"customerClubAnalyticsRfmNormalized": "RFM normalized score (0–1)",
"customerClubSortAsc": "Ascending",
"customerClubSortDesc": "Descending",
"identityInquiryTitle": "Identity Inquiry",
"identityInquirySubtitle": "Please enter national ID and birth date",
"nationalId": "National ID",
"nationalIdHint": "10-digit national ID",
"nationalIdRequired": "National ID is required",
"nationalIdInvalidLength": "National ID must be 10 digits",
"nationalIdInvalid": "Invalid national ID",
"birthDate": "Birth Date",
"birthDateHint": "Jalali date (YYYY-MM-DD or YYYY/MM/DD)",
"birthDateRequired": "Birth date is required",
"birthDateInvalid": "Invalid date format",
"selectBirthDate": "Select Date",
"inquire": "Inquire",
"inquiring": "Inquiring...",
"inquiryError": "Inquiry Error",
"inquiryErrorPrefix": "Inquiry error:",
"unknownError": "Unknown error",
"noMatch": "No Match",
"noMatchDescription": "National ID and birth date do not match",
"personalInformation": "Personal Information",
"fatherName": "Father Name",
"alive": "Alive",
"deceased": "Deceased",
"newInquiry": "New Inquiry",
"identityInquiryDescription": "You can inquiry personal identity information by entering national ID and birth date",
"copied": "Copied",
"noResultAvailable": "Error: No result available",
"accountSettingsTitle": "Account Settings",
"accountSettingsSubtitle": "Manage and configure all aspects of your account",
"accountSettingsMarketingDescription": "Manage referral links and marketing reports",
"accountSettingsNotificationsTitle": "Notifications",
"accountSettingsNotificationsDescription": "Notification channel settings and configuration",
"accountSettingsSignatureTitle": "Signature & Profile Picture",
"accountSettingsSignatureDescription": "Upload and manage personal signature and profile picture",
"accountSettingsApiKeysTitle": "API Keys",
"accountSettingsApiKeysDescription": "Manage API keys for system access",
"accountSettingsLoginSessionsTitle": "Login Sessions",
"accountSettingsLoginSessionsDescription": "View and manage connected devices to your account",
"accountSettingsBiometricLockTitle": "Fingerprint Login",
"accountSettingsBiometricLockDescription": "Lock the app with fingerprint when returning to the app",
"accountSettingsAndroidUpdateTitle": "App Update",
"accountSettingsAndroidUpdateDescription": "Check, download and install new Android releases",
"androidUpdateSettingsTitle": "App Update",
"androidUpdateSettingsDescription": "New versions are fetched from official Hesabix releases. This feature is Android-only.",
"androidUpdateUnsupported": "Automatic updates are only supported on the Android app.",
"androidUpdateInstalledVersion": "Installed version",
"androidUpdateLatestVersion": "Latest published version",
"androidUpdateAvailableBadge": "New version",
"androidUpdateLastChecked": "Last checked",
"androidUpdateAutoCheckTitle": "Check on startup",
"androidUpdateAutoCheckSubtitle": "Look for a new version after the app opens",
"androidUpdateAutoDownloadTitle": "Prompt download when found",
"androidUpdateAutoDownloadSubtitle": "When a new version is found, show an update notice ready for download",
"androidUpdateCheckNow": "Check for updates",
"androidUpdateDownloadAndInstall": "Download & install",
"androidUpdateOpenPermissionSettings": "Unknown apps install settings",
"androidUpdateInfoTitle": "Note",
"androidUpdateInfoBody": "Final install requires your confirmation in the Android system installer. Downloads continue in the background and progress is shown in the system notification.",
"androidUpdateAvailableTitle": "Update available",
"androidUpdateAvailableMessage": "Version {latest} is available. Your current version: {current}",
"@androidUpdateAvailableMessage": {
"placeholders": {
"latest": { "type": "String" },
"current": { "type": "String" }
}
},
"androidUpdateChangelogTitle": "Release notes",
"androidUpdateApkSizeHint": "Approximate file size: {size}",
"@androidUpdateApkSizeHint": {
"placeholders": {
"size": { "type": "String" }
}
},
"androidUpdateLater": "Later",
"androidUpdateAutoDownloadStarting": "Confirm to start a background download. You can leave the app while it completes.",
"androidUpdateDownloadingTitle": "Downloading update",
"androidUpdateDownloadingPreparing": "Preparing download…",
"androidUpdateDownloadProgress": "{percent}% — {received} of {total}",
"@androidUpdateDownloadProgress": {
"placeholders": {
"percent": { "type": "int" },
"received": { "type": "String" },
"total": { "type": "String" }
}
},
"androidUpdateDownloadCancelled": "Download cancelled",
"androidUpdateDownloadFailed": "Download failed: {error}",
"@androidUpdateDownloadFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"androidUpdateUpToDate": "You are on the latest version",
"androidUpdateCheckFailed": "Update check failed. Please check your internet connection.",
"androidUpdatePermissionTitle": "Install permission required",
"androidUpdatePermissionMessage": "To install the new version, allow Hesabix to install unknown apps.",
"androidUpdatePermissionReturnHint": "After enabling the permission, tap Download & install again.",
"androidUpdateInstallStarted": "System installer opened. Please confirm the install.",
"androidUpdateInstallFailed": "Could not start install: {error}",
"@androidUpdateInstallFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"androidUpdateDownloadingSheetTitle": "Downloading new version",
"androidUpdateDownloadingBackgroundHint": "You can leave the app or switch to another one. Download progress will appear in the system notification.",
"androidUpdateContinueInBackground": "Continue in background",
"androidUpdateBackgroundNotificationRunning": "Downloading update",
"androidUpdateBackgroundNotificationComplete": "Download complete",
"androidUpdateBackgroundNotificationError": "Download failed",
"androidUpdateBackgroundNotificationPaused": "Download paused",
"androidUpdateBackgroundNotificationCanceled": "Download canceled",
"androidUpdateDownloadCompleteTitle": "Update ready to install",
"androidUpdateDownloadCompleteMessage": "Version {version} downloaded successfully.",
"@androidUpdateDownloadCompleteMessage": {
"placeholders": {
"version": { "type": "String" }
}
},
"androidUpdateInstallNow": "Install now",
"androidUpdateApkSizeHintBackground": "Approximate size: {size} — download continues in the background",
"@androidUpdateApkSizeHintBackground": {
"placeholders": {
"size": { "type": "String" }
}
},
"accountSettingsWindowsUpdateTitle": "App Update (Windows)",
"accountSettingsWindowsUpdateDescription": "Check, download and install new Windows releases",
"windowsUpdateSettingsTitle": "App Update",
"windowsUpdateSettingsDescription": "New versions are fetched from official Hesabix releases. This feature is Windows-only.",
"windowsUpdateUnsupported": "Automatic updates are only supported on the Windows desktop app.",
"windowsUpdateInstalledVersion": "Installed version",
"windowsUpdateLatestVersion": "Latest published version",
"windowsUpdateAvailableBadge": "New version",
"windowsUpdateLastChecked": "Last checked",
"windowsUpdateAutoCheckTitle": "Check on startup",
"windowsUpdateAutoCheckSubtitle": "Look for a new version after the app opens",
"windowsUpdateAutoDownloadTitle": "Prompt download when found",
"windowsUpdateAutoDownloadSubtitle": "When a new version is found, show an update notice ready for download",
"windowsUpdateCheckNow": "Check for updates",
"windowsUpdateDownloadAndInstall": "Download & install",
"windowsUpdateInfoTitle": "Note",
"windowsUpdateInfoBody": "Updates are installed via an MSI/setup package (Advanced Installer). Windows may ask for administrator approval (UAC). The app version should match the release tag (e.g. 70.9.911).",
"windowsUpdateAvailableTitle": "Update available",
"windowsUpdateAvailableMessage": "Version {latest} is available. Your current version: {current}",
"@windowsUpdateAvailableMessage": {
"placeholders": {
"latest": { "type": "String" },
"current": { "type": "String" }
}
},
"windowsUpdateChangelogTitle": "Release notes",
"windowsUpdateInstallerSizeHint": "Approximate file size: {size}",
"@windowsUpdateInstallerSizeHint": {
"placeholders": {
"size": { "type": "String" }
}
},
"windowsExitConfirmTitle": "Close Hesabix Arc",
"windowsExitConfirmMessage": "Are you sure you want to close the application?",
"windowsExitConfirmAction": "Close",
"windowsUpdateInstallWillCloseApp": "The app will close after the installer starts so files can be replaced.",
"windowsUpdateLater": "Later",
"windowsUpdateAutoDownloadStarting": "Confirm to start download and install.",
"windowsUpdateDownloadingTitle": "Downloading update",
"windowsUpdateDownloadingPreparing": "Preparing download…",
"windowsUpdateDownloadProgress": "{percent}% — {received} of {total}",
"@windowsUpdateDownloadProgress": {
"placeholders": {
"percent": { "type": "int" },
"received": { "type": "String" },
"total": { "type": "String" }
}
},
"windowsUpdateDownloadCancelled": "Download cancelled",
"windowsUpdateDownloadFailed": "Download failed: {error}",
"@windowsUpdateDownloadFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"windowsUpdateUpToDate": "You are on the latest version",
"windowsUpdateCheckFailed": "Update check failed. Please check your internet connection.",
"windowsUpdateReadyToInstallTitle": "Ready to install",
"windowsUpdateReadyToInstallMessage": "The installer will open next. Confirm UAC if prompted. Hesabix will close so the update can finish.",
"windowsUpdateLaunchInstaller": "Install now",
"windowsUpdateInstallStarted": "Installer started. Confirm the install if Windows asks.",
"windowsUpdateInstallFailed": "Could not start install: {error}",
"@windowsUpdateInstallFailed": {
"placeholders": {
"error": { "type": "String" }
}
},
"biometricOptInTitle": "Fingerprint Login",
"biometricOptInMessage": "Would you like to use your fingerprint to unlock the app from now on? You can change this anytime in account settings.",
"biometricOptInEnable": "Enable",
"biometricOptInNotNow": "Not now",
"biometricOptInAuthReason": "Confirm your fingerprint to enable fingerprint login",
"biometricLockTitle": "App Locked",
"biometricLockSubtitle": "Scan your fingerprint to continue",
"biometricLockAuthReason": "Confirm your fingerprint to access your account",
"biometricLockRetry": "Try again",
"biometricLockAuthenticating": "Authenticating…",
"biometricLockSignInWithPassword": "Sign in with password",
"biometricLockAttemptsRemaining": "{count} attempt(s) remaining",
"@biometricLockAttemptsRemaining": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"biometricSettingsTitle": "Fingerprint Login",
"biometricSettingsDescription": "When enabled, you must confirm your fingerprint each time you open the app or return from the background.",
"biometricSettingsToggleTitle": "Enable fingerprint lock",
"biometricSettingsToggleSubtitle": "Fingerprint will be required when returning to the app",
"biometricSettingsUnavailable": "Fingerprint sensor is not available or not set up on this device",
"biometricSettingsEnableReason": "Confirm your fingerprint to enable",
"biometricSettingsEnableFailed": "Fingerprint verification failed",
"biometricSettingsEnabledSuccess": "Fingerprint login enabled",
"biometricSettingsDisabledSuccess": "Fingerprint login disabled",
"biometricSettingsAvailableMethods": "Available methods",
"biometricSettingsInfoTitle": "Security note",
"biometricSettingsInfoBody": "Fingerprint only locks access to the app. Initial sign-in or switching accounts still requires your password.",
"biometricTypeFingerprint": "Fingerprint",
"biometricTypeFace": "Face recognition",
"biometricTypeIris": "Iris",
"biometricTypeWeak": "Weak biometric",
"biometricTypeStrong": "Strong biometric",
"accountSettingsChangePasswordDescription": "Change account password",
"accountSettingsVerificationTitle": "Mobile & Email Verification",
"accountSettingsVerificationDescription": "Verify mobile number and email for enhanced security",
"accountSettingsNotificationHistoryTitle": "Notification History",
"accountSettingsNotificationHistoryDescription": "View all sent notifications (OTP, password reset, tickets, etc.)",
"notificationCenterLevelInfo": "Info",
"notificationCenterLevelWarning": "Warning",
"notificationCenterLevelCritical": "Critical",
"notificationCenterLevelUnknown": "{level}",
"@notificationCenterLevelUnknown": {
"placeholders": {
"level": {
"type": "String"
}
}
},
"notificationCenterClearAllTooltip": "Clear in-app notifications from your inbox",
"notificationCenterClearAllTitle": "Clear notifications?",
"notificationCenterClearAllMessage": "All visible announcements will be hidden. Live-only messages (not stored on the server) will also be removed from this list.",
"notificationCenterClearAllConfirm": "Clear",
"notificationCenterClearAllCancel": "Cancel",
"notificationCenterCleared": "Notifications cleared",
"notificationsInappRetentionTitle": "In-app announcement retention",
"notificationsInappRetentionSubtitle": "System announcements you have read will be automatically removed or hidden after the number of days you set.",
"notificationsInappRetentionEnabled": "Enable automatic cleanup of read items",
"notificationsInappRetentionDays": "Days after read before cleanup",
"apiKeysPageTitle": "Manage API Keys",
"apiKeyErrorLoadingKeys": "Error loading keys",
"apiKeyErrorCreatingKey": "Error creating key",
"apiKeyCreatedSuccessfully": "API Key created",
"apiKeySaveWarning": "Please save this key. This is the only time it will be displayed.",
"apiKeyClose": "Close",
"apiKeyCopy": "Copy",
"apiKeyCopied": "Key copied",
"apiKeyUpdatedSuccessfully": "Key updated successfully",
"apiKeyErrorUpdating": "Error updating key",
"apiKeyDeleteTitle": "Delete API Key",
"apiKeyDeleteConfirmation": "Are you sure you want to delete the key \"{name}\"?\nThis action is irreversible.",
"@apiKeyDeleteConfirmation": {
"placeholders": {
"name": {"type": "String"}
}
},
"apiKeyDeletedSuccessfully": "Key deleted successfully",
"apiKeyErrorDeleting": "Error deleting key",
"apiKeyFilterActive": "Active",
"apiKeyFilterRevoked": "Revoked",
"apiKeyFilterAll": "All",
"apiKeyNoActiveKeys": "No active keys",
"apiKeyNoRevokedKeys": "No revoked keys",
"apiKeyNoKeysCreated": "No API keys created",
"apiKeyCreateNewButton": "Create New Key",
"apiKeyCreateHint": "Click the create button to create a new key",
"apiKeyNoRevokedHint": "No revoked keys to display",
"apiKeyUsageHint": "Create a key to use the API in other applications",
"apiKeyEdit": "Edit",
"apiKeyDelete": "Delete",
"apiKeyCreatedAt": "Created",
"apiKeyLastUsed": "Last Used",
"apiKeyExpiresAt": "Expires",
"apiKeyRevokedAt": "Revoked",
"apiKeyAllowedIPs": "Allowed IPs",
"apiKeyCreateNewTitle": "Create New API Key",
"apiKeyNameLabel": "Key Name",
"apiKeyNameHint": "Example: Production API Key",
"apiKeyScopeLabel": "Access Scope (JSON)",
"apiKeyScopeHint": "Optional - Example: '{'\"read\": true, \"write\": false'}'",
"apiKeyIPsLabel": "Allowed IP List",
"apiKeyIPsHint": "Comma separated - Example: 192.168.1.1, 10.0.0.1",
"apiKeyExpiryLabel": "Expiry Date and Time (Optional)",
"apiKeyExpiryHint": "Select",
"apiKeyNoExpiry": "No expiry",
"apiKeyEditTitle": "Edit API Key",
"apiKeyWithoutName": "Unnamed",
"datePickerSelectDate": "Select Date",
"dateInputInvalidFormat": "Enter a valid date in YYYY/MM/DD format",
"dateInputOutOfRange": "Date is outside the allowed range",
"dateInputOpenCalendar": "Open calendar",
"timePickerSelectTime": "Select Time",
"dateTimeLabel": "Date and Time",
"dateLabel": "Date",
"timeLabel": "Time",
"clearButton": "Clear",
"sessionsPageTitle": "Manage Login Sessions",
"sessionsErrorLoading": "Error loading sessions",
"sessionsCannotDeleteCurrent": "Cannot delete current session",
"sessionsDeleteTitle": "Delete Session",
"sessionsDeleteConfirmation": "Are you sure you want to delete session \"{device}\"?\nThis action is irreversible.",
"@sessionsDeleteConfirmation": {
"placeholders": {
"device": {"type": "String"}
}
},
"sessionsDeletedSuccessfully": "Session deleted successfully",
"sessionsErrorDeleting": "Error deleting session",
"sessionsNoOtherSessions": "No other sessions",
"sessionsRevokeAllTitle": "Logout from all devices",
"sessionsRevokeAllConfirmation": "Are you sure you want to delete {count} other sessions?\nThis will logout all other devices.\nYour current session will be preserved.",
"@sessionsRevokeAllConfirmation": {
"placeholders": {
"count": {"type": "int"}
}
},
"sessionsDeleteAll": "Delete All",
"sessionsDeleted": "{count} sessions deleted",
"@sessionsDeleted": {
"placeholders": {
"count": {"type": "int"}
}
},
"sessionsNoActive": "No active sessions",
"sessionsThisDevice": "This Device",
"sessionsLastUsed": "Last Used",
"sessionsCreatedAt": "Created",
"sessionsToday": "Today",
"sessionsYesterday": "Yesterday",
"sessionsDaysAgo": "{days} days ago",
"@sessionsDaysAgo": {
"placeholders": {
"days": {"type": "int"}
}
},
"sessionsWeeksAgo": "{weeks} weeks ago",
"@sessionsWeeksAgo": {
"placeholders": {
"weeks": {"type": "int"}
}
},
"sessionsMonthsAgo": "{months} months ago",
"@sessionsMonthsAgo": {
"placeholders": {
"months": {"type": "int"}
}
},
"invoiceWarehouseReleaseNone": "No warehouse document",
"invoiceWarehouseReleaseDraft": "Warehouse draft",
"invoiceWarehouseReleasePosted": "Post warehouse immediately",
"invoiceWarehouseReleaseSectionTitle": "Warehouse document after save",
"invoiceWarehouseReleaseSectionSubtitle": "Uses your business default; changes are saved per invoice type in this browser.",
"invoiceWarehouseReleaseBusinessTitle": "Warehouse document after invoice save",
"invoiceWarehouseReleaseBusinessSubtitle": "When post_inventory / auto_post_warehouse are omitted (or null) in the API, this mode applies.",
"invoiceWarehouseReleaseStockHint": "With “post immediately”, the warehouse document is posted when the invoice is saved and the same shortage / negative-stock rules from the section below apply. Draft keeps it until you post manually.",
"invoicePurchaseAccountingBusinessTitle": "Purchase invoice accounting",
"invoicePurchaseAccountingBusinessSubtitle": "How purchase debits are posted to the GL. Changes apply to new invoices only; use the admin script to fix legacy documents.",
"invoicePurchaseAccountingDirect": "Direct to inventory",
"invoicePurchaseAccountingGrni": "GRNI (two-step)",
"invoiceMissingLineWarehousePolicySectionTitle": "Policy when invoice lines have no warehouse",
"invoiceMissingLineWarehousePolicySectionSubtitle": "When “post inventory” is enabled on a finalized invoice and a tracked product line has no warehouse on the line or invoice header, this policy applies (for example saving a payment link from the invoice details dialog re-processes the invoice).",
"invoiceMissingLineWarehousePolicyReject": "Block save with guidance",
"invoiceMissingLineWarehousePolicyUseDefault": "Use business default warehouse",
"invoiceDefaultWarehouseForMissingLinesLabel": "Default warehouse for lines missing a warehouse",
"invoiceDefaultWarehouseFillHeaderTitle": "Also set invoice header warehouse",
"invoiceDefaultWarehouseFillHeaderSubtitle": "If the invoice header has no warehouse, set it to the same default (similar to choosing “invoice warehouse” manually).",
"ftpBackupSettingsTitle": "FTP backup destination",
"ftpBackupSettingsDescription": "Store connection details for optional backup upload to your FTP server.",
"ftpHost": "Host",
"ftpPort": "Port",
"ftpUsername": "Username",
"ftpPassword": "Password",
"ftpPasswordLeaveEmptyHint": "Leave empty to keep the current password",
"ftpRemotePath": "Remote folder",
"ftpPassiveMode": "Passive mode (PASV)",
"ftpUseFtps": "Use FTPS (FTP over TLS)",
"ftpSaveSettings": "Save",
"ftpDeleteSettings": "Remove FTP settings",
"ftpTestConnection": "Test connection",
"ftpScanUsage": "Scan folder usage",
"ftpUsageTotal": "Total size (this folder)",
"ftpUsageFiles": "Files counted",
"ftpUsageTruncated": "Scan stopped early (too many files)",
"ftpLastScan": "Last scan",
"ftpSettingsUpdatedAt": "Settings last saved",
"ftpNotConfigured": "Not configured",
"ftpUseSftp": "Use SFTP (SSH)",
"ftpInsecureWarning": "Without FTPS or SFTP, credentials and data can be read on the network. Enable FTPS or SFTP when possible.",
"ftpDeleteSettingsConfirmTitle": "Remove backup destination",
"ftpDeleteSettingsConfirmMessage": "Remove FTP/SFTP settings for this business? Automatic upload after backup will stop.",
"ftpTestResultSampleCount": "Directory listing sample: about {count} entries",
"@ftpTestResultSampleCount": {
"placeholders": {
"count": {"type": "int"}
}
},
"backupFtpUploaded": "Copy on your server",
"backupFtpNotUploaded": "Not sent to FTP",
"backupOpenFtpSettings": "FTP settings",
"backupFtpNotConfiguredError": "Save an FTP/SFTP destination in settings first.",
"ftpSendAfterBackup": "Also upload to FTP after backup",
"ftpSendAfterBackupSubtitle": "Requires saved FTP settings and permission",
"jobUploadingToFtp": "Uploading to FTP",
"jobFtpTestStarting": "FTP test starting",
"jobFtpTestRunning": "Running FTP checks",
"jobFtpTestCompleted": "FTP test completed",
"jobFtpTestFailed": "FTP test failed",
"jobFtpUsageStarting": "Scanning FTP usage",
"jobFtpUsageConnecting": "Connecting to FTP",
"jobFtpUsageScanning": "Scanning remote folders",
"jobFtpUsageCompleted": "FTP usage scan completed",
"jobFtpUsageFailed": "FTP usage scan failed",
"ftpTestResultTitle": "Connection test",
"ftpClose": "Close",
"settingsPermissionManageFtp": "FTP backup connection",
"crmMenuNotesCalendar": "Notes & calendar",
"crmNotesCalendarTitle": "CRM notes & calendar",
"crmNotesRefresh": "Refresh",
"crmNotesAdd": "New note",
"crmNotesMonthPrev": "Previous month",
"crmNotesMonthNext": "Next month",
"crmNotesToday": "Today",
"crmNotesViewWeek": "Week",
"crmNotesViewMonth": "Month",
"crmNotesWeekPrev": "Previous week",
"crmNotesWeekNext": "Next week",
"crmNotesMonthCalendarExpandTitle": "Full month calendar",
"crmNotesPickDayTooltip": "Choose day",
"crmNotesDayNotes": "Notes for this day",
"crmNotesNoNotes": "No notes",
"crmNotesEmptyDayHint": "No notes for this day yet. Add one to keep your CRM timeline up to date.",
"crmNotesRetry": "Try again",
"crmNotesEditorMoreOptions": "More options",
"crmNotesVisibilityLabel": "Who can see this note",
"crmNotesVisibilityPrivate": "Private (only me)",
"crmNotesVisibilityBusiness": "Everyone in this business",
"crmNotesVisibilityShared": "Selected people",
"crmNotesType": "Note type",
"crmNotesTitleOptional": "Title (optional)",
"crmNotesBody": "Content",
"crmNotesLeadOptional": "Lead (optional)",
"crmNotesClearLead": "Clear lead",
"crmNotesSharedUsers": "People who can see this note",
"crmNotesMeetingStart": "Start",
"crmNotesMeetingEnd": "End (optional)",
"crmNotesSave": "Save",
"crmNotesDelete": "Delete",
"crmNotesComments": "Comments",
"crmNotesNoComments": "No comments yet",
"crmNotesCommentHint": "Write a comment…",
"crmNotesSendComment": "Send",
"crmNotesAudit": "Change history",
"crmNotesAuditEmpty": "No audit entries",
"crmNotesClose": "Close",
"crmNotesEdit": "Edit",
"crmNotesSearchLeads": "Search leads",
"crmNotesApplySearch": "Search",
"crmNotesErrorLoading": "Failed to load",
"crmNotesErrorSaving": "Failed to save",
"crmNotesAddNoteType": "New note type",
"crmNotesNoteTypeCode": "Code (Latin, e.g. follow_up)",
"crmNotesNoteTypeTitleFa": "Title (Persian)",
"crmNotesNoteTypeTitleEn": "Title (English)",
"crmNotesNoteTypeScheduling": "Scheduling",
"crmNotesNoteTypeDayOnly": "Date only",
"crmNotesNoteTypeMeeting": "Meeting (date & time)",
"crmNotesNoteTypeAllowComments": "Allow comments (for public notes)",
"crmNotesNoteTypeAllowCommentsHint": "Only affects notes that are visible to the business (public notes).",
"crmNotesNoteTypeCreated": "Note type created",
"crmNotesPickDateTime": "Pick date & time",
"crmNotesDeleteConfirmMessage": "This note will be removed. Continue?",
"crmNotesDeleteConfirmTitle": "Delete note",
"crmNotesDeleteWarnComments": "Existing comments will also be removed.",
"crmNoteTabDetails": "Details",
"crmNoteTabComments": "Discussion",
"crmNoteTabAudit": "History",
"crmNotesVisibilityShortPrivate": "Private",
"crmNotesVisibilityShortBusiness": "Team",
"crmNotesVisibilityShortShared": "Selected",
"crmNotesVisibilityHintPrivate": "Only you can see this note.",
"crmNotesVisibilityHintBusiness": "All members of this business who can access CRM.",
"crmNotesVisibilityHintShared": "Only you and the people you select.",
"crmNotesSharedPickHint": "Select at least one teammate (you are always included).",
"crmNotesEventDateButton": "Choose date",
"crmNotesNoLeadsFound": "No leads match your search.",
"crmNotesLeadSearchInDialogHint": "Type name, code, phone, or email…",
"crmNotesCommentsDisabledTab": "Comments are disabled for this note type or visibility.",
"crmNotesAuditEmpty": "No history entries yet.",
"crmNotesNoteTypeCodeHelper": "Latin letters, numbers, and underscore only. Used internally.",
"crmNotesNoteTypePreview": "Preview in current language",
"crmNotesNoteTypeSectionIdentity": "Identity",
"crmNotesNoteTypeSectionTitles": "Titles",
"crmNotesNoteTypeSectionBehavior": "Behavior",
"crmNotesCommentInputLabel": "New comment",
"crmNotesAuditRecentLimit": "Showing the latest {count} entries",
"@crmNotesAuditRecentLimit": {
"placeholders": {
"count": {"type": "int"}
}
},
"crmNoteAuditCreated": "Created",
"crmNoteAuditUpdated": "Updated",
"crmNoteAuditVisibility": "Visibility changed",
"crmNoteAuditAcl": "Sharing list changed",
"crmNoteAuditSoftDeleted": "Deleted",
"crmNoteAuditCommentCreated": "Comment added",
"crmNoteAuditCommentDeleted": "Comment removed",
"crmNoteAuditOther": "Event",
"crmDeleteIrreversible": "This cannot be undone.",
"crmDeleteLeadTitle": "Delete lead",
"crmDeleteLeadMessage": "Delete lead «{name}»?",
"@crmDeleteLeadMessage": {
"placeholders": {
"name": {}
}
},
"crmDeleteActivityTitle": "Delete activity",
"crmDeleteActivityMessageNamed": "Delete activity «{subject}»?",
"@crmDeleteActivityMessageNamed": {
"placeholders": {
"subject": {}
}
},
"crmDeleteActivityMessageUnnamed": "Delete this activity?",
"crmDeleteDealTitle": "Delete deal",
"crmDeleteDealMessage": "Delete deal «{title}»?",
"@crmDeleteDealMessage": {
"placeholders": {
"title": {}
}
},
"crmDeleteProcessTitle": "Delete process",
"crmDeleteProcessMessage": "Delete process «{name}»?",
"@crmDeleteProcessMessage": {
"placeholders": {
"name": {}
}
},
"crmDeleteStageTitle": "Delete stage",
"crmDeleteStageMessage": "Delete stage «{name}»?",
"@crmDeleteStageMessage": {
"placeholders": {
"name": {}
}
},
"crmLeadFormSubtitle": "Contact details, funnel stage, and follow-up.",
"crmActivityFormSubtitle": "Link to a customer or a lead, then describe the interaction.",
"crmDealFormSubtitle": "Customer, pipeline stage, and financial details.",
"crmDealProbabilityUnavailable": "The assistant could not extract a valid probability. The field was left unchanged.",
"crmConvertLeadTitle": "Convert to customer",
"crmConvertLeadSubtitle": "Creates a new person in contacts.",
"crmConvertLeadIntro": "The lead will be converted and a new person record will be created in contacts.",
"crmConvertWithDealLabel": "Also create a sales deal",
"crmConvertNoPipeline": "No active sales pipeline is available.",
"crmConvertPipelineLabel": "Sales pipeline",
"crmConvertStageLabel": "Stage",
"crmConvertDealTitleLabel": "Deal title",
"crmConvertAmountLabel": "Amount",
"crmConvertSubmit": "Convert",
"crmSectionIdentityContact": "Identity & contact",
"crmSectionFunnel": "Funnel & stage",
"crmSectionAssignmentFollowup": "Assignment & reminder",
"crmSectionDescription": "Description",
"crmSectionActivityLink": "Customer or lead",
"crmSectionActivityScheduling": "Schedule",
"crmSectionActivityDetails": "Subject & details",
"crmSectionDealPipeline": "Pipeline & identity",
"crmSectionDealCustomer": "Customer & documents",
"crmSectionDealMoney": "Amount, currency & dates",
"crmActivityPickLead": "Search & select lead",
"crmActivityClearLead": "Clear lead",
"crmActivityTypeCall": "Call",
"crmActivityTypeEmail": "Email",
"crmActivityTypeMeeting": "Meeting",
"crmActivityTypeNote": "Note",
"crmProcessFormSubtitle": "Code, display name, and default flags for this workflow.",
"crmProcessSectionMain": "Definition",
"crmProcessSectionStages": "Initial stages (new only)",
"inventoryNegativePolicySectionTitle": "Warehouse posting: stock shortage rules",
"inventoryNegativePolicyIntro": "This is not the same as “inventory control” on each product—that toggle decides whether the item is tracked in stock at all. Here you decide whether posting an outgoing warehouse move can proceed when quantity on hand is insufficient (negative stock). By default posting is blocked; use the switches below for bulk vs unique items. Transfer documents can stay fully strict separately.",
"inventoryNegativePolicyBulkTitle": "Allow negative stock for bulk items",
"inventoryNegativePolicyBulkSubtitle": "Products in bulk inventory mode with inventory tracking enabled.",
"inventoryNegativePolicyUniqueTitle": "Allow negative stock for unique items",
"inventoryNegativePolicyUniqueSubtitle": "Serialized / unique inventory mode; higher risk of mismatches with physical stock.",
"inventoryNegativePolicyTransferTitle": "Transfers always require sufficient stock",
"inventoryNegativePolicyTransferSubtitle": "When enabled, transfer documents always run full shortage checks, regardless of the two options above.",
"workflowMarketplaceTitle": "Workflow repository",
"workflowMarketplaceSubtitle": "Browse workflows published by others and add them to your business.",
"workflowMarketplaceSearchHint": "Search title and short description…",
"workflowMarketplaceTagFilterHint": "Tag filter (optional)",
"workflowMarketplaceEmpty": "No items in the repository yet.",
"workflowMarketplaceInstallCount": "Installs",
"workflowMarketplacePublisher": "Publisher",
"workflowMarketplacePublishedAt": "Published",
"workflowMarketplaceVersion": "Version",
"workflowMarketplaceInstall": "Add to this business",
"workflowMarketplaceDetailTitle": "Package details",
"workflowMarketplaceLongDescription": "Full description",
"workflowMarketplaceChangelog": "Changes in this version",
"workflowMarketplaceBrowseTab": "Browse",
"workflowMarketplaceOpen": "Workflow repository",
"workflowMarketplaceMyPublished": "My published",
"workflowMarketplacePublish": "Publish to repository",
"workflowMarketplacePublishTitleLabel": "Repository title",
"workflowMarketplaceShortDescriptionLabel": "Summary (list card)",
"workflowMarketplaceLongDescriptionLabel": "Full description for repository",
"workflowMarketplaceTagsLabel": "Tags (comma-separated)",
"workflowMarketplaceVersionLabel": "Version",
"workflowMarketplacePublishSubmit": "Publish",
"workflowMarketplacePublishSaved": "Workflow published to the repository.",
"workflowMarketplaceInstalled": "Workflow added as draft.",
"workflowMarketplaceNameAfterInstall": "Workflow name after install (optional)",
"workflowMarketplaceError": "Repository error",
"workflowMarketplaceStatusLive": "Live",
"workflowMarketplaceStatusPrivate": "Unpublished",
"workflowMarketplaceMyEmpty": "You have not published anything to the repository yet.",
"workflowMarketplaceUnpublish": "Remove from repository",
"workflowMarketplaceUnpublishConfirmTitle": "Remove from public list?",
"workflowMarketplaceUnpublishConfirmBody": "Others will no longer see this workflow. It will stay in your list and you can publish it again later.",
"workflowMarketplaceRepublish": "Publish again",
"workflowMarketplaceRemovedFromRepo": "Removed from the public repository.",
"workflowMarketplaceRepublishedToast": "Published to the repository again.",
"distributionMenu": "Field distribution",
"distributionTabDashboard": "Dashboard",
"distributionTabToday": "Daily plan",
"distributionTabRoutes": "Routes",
"distributionTabVisits": "Visits",
"distributionTabReturns": "Returns",
"distributionPermissionOperate": "Field work (start/end visit, returns)",
"distributionPermissionManage": "Routes, stops, assignments, approve returns",
"distributionPermissionReportsTeam": "Team reports and plans for other users",
"distributionSelectDate": "Select date",
"distributionVisitsToday": "Visits today",
"distributionCompletedToday": "Completed today",
"distributionPendingReturns": "Pending returns",
"distributionActiveRoutes": "Active routes",
"distributionNoPlan": "No route plan for this date.",
"distributionNoPlanHint": "The daily plan is built from a route assigned to a visitor. Create a territory and route, add customers as stops, then assign the visitor — or use Set up plan.",
"distributionSetupPlan": "Set up plan",
"distributionSetupPlanHint": "Choose a visitor and a route. Stops on that route for this weekday become today’s field plan.",
"distributionAssignAndShowPlan": "Assign and show plan",
"distributionSelectRoute": "Route",
"distributionNoRoutesYet": "No routes yet. Create a territory and a route in Manage first.",
"distributionGoToManage": "Go to Manage",
"distributionGoToManageHint": "Open Manage to add territories, routes and stops.",
"distributionPlanAssigned": "Visitor assigned. The field plan is ready.",
"distributionTerritoryEdit": "Edit territory",
"distributionRouteEdit": "Edit route",
"distributionStopEdit": "Edit stop",
"distributionVanEdit": "Edit van",
"distributionVanName": "Van name",
"distributionDeleteTerritory": "Delete territory",
"distributionDeleteTerritoryConfirm": "Delete this territory? Routes stay, but the territory link is removed.",
"distributionDeleteStopConfirm": "Remove this customer from the route?",
"distributionDeletePromoConfirm": "Delete this promotion?",
"distributionDeleteTargetConfirm": "Delete this sales target?",
"distributionAssetTypeCooler": "Cooler",
"distributionAssetTypeFreezer": "Freezer",
"distributionAssetTypeShelf": "Shelf",
"distributionAssetTypeOther": "Other",
"distributionStartVisit": "Start visit",
"distributionCompleteVisit": "Complete visit",
"distributionOutcomeOrder": "Order / invoice",
"distributionOutcomeNoOrder": "No order",
"distributionOutcomeCancelled": "Visit cancelled",
"distributionDocumentIdHint": "Document ID (proforma/invoice), optional",
"distributionDealIdHint": "CRM deal ID, optional",
"distributionNoOrderReason": "Reason for no order",
"distributionLinesJson": "Return lines (product id, qty, reason)",
"distributionReturnCreate": "Submit return request",
"distributionRefresh": "Refresh",
"distributionPluginInactive": "Field distribution add-on is not active. Enable it from the marketplace.",
"distributionPluginInactiveTitle": "Field distribution add-on is not active",
"distributionPluginInactiveMessage": "Activate or purchase this add-on from the marketplace to use routes, daily plans, field visits, and returns.",
"distributionPluginGoToMarketplace": "Go to marketplace",
"distributionTabField": "Field",
"distributionTabManage": "Manage",
"distributionActiveVisitBanner": "Visit in progress",
"distributionCancelVisit": "Cancel visit",
"distributionCancelVisitConfirm": "Cancel this visit?",
"distributionCreateSalesInvoice": "Create sales invoice",
"distributionTerritoryCreate": "New territory",
"distributionRouteCreate": "New route",
"distributionRouteCode": "Route code",
"distributionRouteName": "Route name",
"distributionTerritoryCode": "Territory code",
"distributionTerritoryName": "Territory name",
"distributionAddStop": "Add stop",
"distributionAssignVisitor": "Assign visitor",
"distributionSelectPerson": "Select customer",
"distributionSelectProduct": "Select product",
"distributionReturnQuantity": "Quantity",
"distributionReturnReason": "Return reason",
"distributionReturnAddLine": "Add line",
"distributionApproveReturn": "Approve return",
"distributionRejectReturn": "Reject return",
"distributionResolveReturnTitle": "Resolve return request",
"distributionStatusInProgress": "In progress",
"distributionStatusCompleted": "Completed",
"distributionStatusCancelled": "Cancelled",
"distributionWeekdayAny": "Any day",
"distributionWeekdayLabel": "Weekday",
"distributionSortOrder": "Sort order",
"distributionTeamPlanUserId": "Visitor user ID (supervisor)",
"distributionLocationCapturing": "Getting location…",
"distributionLocationCaptured": "Location recorded",
"distributionLocationSkipped": "Location unavailable",
"distributionReportsVisitsTotal": "Total visits",
"distributionReportsOutcomeBreakdown": "Outcome breakdown",
"distributionReportsReturnsSummary": "Returns",
"distributionDeleteRoute": "Delete route",
"distributionDeleteRouteConfirm": "Delete this route? Stops and assignments will be removed.",
"distributionTabVan": "Van",
"distributionTabTeamMap": "Team map",
"distributionOptimizeRoute": "Optimize order",
"distributionOfflinePending": "Offline actions queued",
"distributionOfflineSync": "Sync now",
"distributionOfflineSynced": "Offline queue cleared",
"distributionGeofenceOverride": "Record despite distance",
"distributionChecklistTitle": "Visit checklist",
"distributionVanLoad": "Load van",
"distributionVanStock": "Van stock",
"distributionVanSaleLines": "Van sale",
"distributionShelfPhoto": "Shelf photo",
"distributionOpenInMaps": "Open in maps",
"distributionSetPersonLocation": "Customer map location",
"distributionSearchPlace": "Search address or place",
"distributionLocationSaved": "Customer location saved",
"distributionTapMapToSetLocation": "Tap the map to set the location",
"distributionUseCurrentLocation": "Use my current location",
"distributionGeofenceRadius": "Geofence radius (meters)",
"distributionRequireGeofence": "Require on-site geofence",
"distributionEnableVanSales": "Van sales",
"distributionEnableGeofence": "Require geofence",
"distributionChecklistTemplateHint": "Template JSON array in settings API (id, label, required fields).",
"distributionSettingsSubtitle": "Routes, daily plan, field visits and returns",
"distributionSharedRoutingCatalog": "Shared route catalog for all visitors",
"distributionSharedRoutingCatalogHint": "When off, each visitor only sees routes assigned to them.",
"distributionRequireVisitInDailyPlan": "Start visit only from daily plan",
"distributionRequireVisitInDailyPlanHint": "The person must be on that visitor daily plan.",
"distributionSettingsSaved": "Settings saved.",
"distributionMapSectionTitle": "Map tiles",
"distributionMapTileSource": "Tile source",
"distributionMapTileSourceHint": "OpenStreetMap is free and worldwide. MeMaps is an Iranian tile server and requires an API key from memaps.ir.",
"distributionMapTileSourceOsm": "OpenStreetMap (free, worldwide)",
"distributionMapTileSourceMemaps": "MeMaps (Iran, API key required)",
"distributionMemapsApiKey": "MeMaps API key",
"distributionMemapsApiKeyHint": "Create a key in the memaps.ir panel. Tile requests send it as ?key= or the X-Memaps-Key header.",
"distributionMemapsApiKeyMissing": "MeMaps tiles need an API key. Add it in distribution settings, or switch to OpenStreetMap.",
"distributionNotesLabel": "Notes",
"distributionVanCreate": "Create van",
"distributionVanUnload": "Unload van",
"distributionSelectVisitor": "Select visitor",
"distributionSourceWarehouse": "Source warehouse",
"distributionDestWarehouse": "Destination warehouse",
"distributionNoVanAssigned": "No van is assigned to you.",
"distributionVanStockEmpty": "Van stock is empty.",
"distributionVanLoadHint": "Pick products from the warehouse, set quantity, and add them to the list.",
"distributionVanUnloadHint": "Pick products from current van stock and return them to the warehouse.",
"distributionVanTransferLines": "Transfer lines",
"distributionVanPickProductFirst": "Select a product from the list first.",
"distributionVanLinesEmpty": "No lines have been added yet.",
"distributionVanNoWarehouse": "Select a warehouse.",
"distributionVanConfirmLoad": "Confirm load",
"distributionVanConfirmUnload": "Confirm unload",
"distributionVanLineAdded": "Line added to the list.",
"distributionVanQtyInvalid": "Quantity must be greater than zero.",
"distributionVanEmptyStockUnload": "Van stock is empty; nothing to unload.",
"distributionVanStockAvailable": "Van stock: {qty}",
"@distributionVanStockAvailable": {
"placeholders": {
"qty": {"type": "String"}
}
},
"distributionDeleteStop": "Delete stop",
"distributionDeleteAssignment": "Remove assignment",
"distributionApplyOptimize": "Apply & save order",
"distributionOfflinePartial": "Some offline actions failed.",
"distributionVisitStayHint": "Visit started; complete it when you finish with the customer.",
"distributionSalesLinked": "Linked sales",
"distributionCoveragePercent": "Route coverage",
"distributionChecklistAddItem": "Add checklist item",
"distributionDefaultWarehouse": "Default load warehouse",
"distributionOpenInvoiceKeepVisit": "Invoice (visit stays open)",
"distributionTabSettlement": "Daily settlement",
"distributionExpectedSales": "Expected sales today",
"distributionCashCollected": "Cash collected",
"distributionChequeCollected": "Cheques collected",
"distributionCardCollected": "Card / POS",
"distributionOtherCollected": "Other collected",
"distributionSettlementExpenses": "Day expenses",
"distributionSettlementVariance": "Variance",
"distributionCreateReceiptOnConfirm": "Create cash receipt on confirm",
"distributionCashRegister": "Cash register",
"distributionCashRegisterRequired": "Select a cash register to create a receipt.",
"distributionSaveDraft": "Save draft",
"distributionConfirmSettlement": "Confirm settlement",
"distributionSettlementConfirmed": "Settlement confirmed",
"distributionPrintSettlement": "Print settlement",
"distributionPrintDailyPlan": "Print daily plan",
"distributionPrintLoadingList": "Print loading list",
"distributionPdfExported": "PDF exported",
"distributionTargetsTitle": "Visitor sales targets",
"distributionTargetCreate": "New target",
"distributionTargetPeriodType": "Period type",
"distributionTargetPeriodDay": "Daily",
"distributionTargetPeriodMonth": "Monthly",
"distributionTargetAmount": "Target amount",
"distributionTargetsEmpty": "No targets defined yet.",
"reportsDistributionSection": "Distribution & field visits",
"reportsDistributionDashboardTitle": "Visit & returns summary",
"reportsDistributionDashboardSubtitle": "Visit and return statistics for a date range",
"reportsBasalamSection": "Basalam reports",
"reportsBasalamOverviewTitle": "Basalam overview & trends",
"reportsBasalamOverviewSubtitle": "Webhook, dead-letter queue, product conflicts, synced invoice counts",
"reportsBasalamSyncedInvoicesTitle": "Invoices synced from Basalam",
"reportsBasalamSyncedInvoicesSubtitle": "Sales invoices with Basalam order id",
"reportsBasalamDeadLetterTitle": "Basalam sync dead-letter",
"reportsBasalamDeadLetterSubtitle": "Items that need manual follow-up",
"reportsBasalamProductConflictsTitle": "Basalam product conflicts",
"reportsBasalamProductConflictsSubtitle": "Price/stock/variant mismatches awaiting resolution",
"basalamIntegrationMenuTitle": "Basalam",
"woocommerceIntegrationMenuTitle": "WooCommerce",
"basalamSettingsPageTitle": "Basalam settings",
"basalamSettingsPageSubtitle": "API keys, sync behaviour, webhooks and monetary unit for the Basalam bridge.",
"basalamOpenIntegrationHub": "Open Basalam hub",
"basalamOpenIntegrationHubSubtitle": "Queues, manual sync, product conflicts and operational tools",
"basalamGoToSettingsTooltip": "Basalam settings",
"basalamSettingsSavedSnackbar": "Basalam settings saved",
"basalamHubSettingsPromoTitle": "Connection settings",
"basalamHubSettingsPromoSubtitle": "Manage API keys, defaults and sync rules in business settings.",
"basalamReportsOverviewCardIntegration": "Integration",
"basalamReportsOverviewCardWebhook": "Webhook",
"basalamReportsOverviewCardDlq": "Dead-letter queue",
"basalamReportsOverviewCardNetPeriod": "Net (period)",
"basalamReportsOverviewStateOn": "On",
"basalamReportsOverviewStateOff": "Off",
"basalamReportsSyncedInvoicesTableHint": "Paged list of sales documents linked to Basalam orders.",
"basalamReportsDeadLetterTableHint": "Failed sync entries stored for manual review.",
"basalamReportsProductConflictsTableHint": "Product mismatches awaiting resolution.",
"reportsBasalamColumnDocumentCode": "Document code",
"reportsBasalamColumnDocumentDate": "Date",
"reportsBasalamColumnBasalamOrderId": "Basalam order id",
"reportsBasalamColumnNet": "Net",
"reportsBasalamColumnDocumentType": "Document type",
"reportsBasalamColumnDeadLetterType": "Type",
"reportsBasalamColumnDlqId": "Queue id",
"reportsBasalamColumnCreatedAt": "Created at",
"reportsBasalamColumnOrderId": "Order id",
"reportsBasalamColumnConflictId": "Conflict id",
"reportsBasalamColumnConflictType": "Type",
"reportsBasalamColumnDirection": "Direction",
"reportsBasalamColumnReason": "Reason",
"settingsBasalamTitle": "Basalam integration",
"settingsBasalamSubtitle": "API, webhooks, sync and conflict defaults",
"basalamSettingsEnableConnection": "Enable Basalam integration",
"basalamSettingsCurrencyIrrTitle": "Basalam sync requires IRR-only business currency",
"basalamSettingsCurrencyInvalidSecondaries": "Invalid secondary codes",
"basalamSettingsCurrencyFixHint": "Set business default to IRR and remove non-IRR secondary currencies; then pick Basalam rial vs toman to match their panel.",
"basalamSettingsApiKey": "Basalam API key",
"basalamSettingsRefreshTokenOptional": "Basalam refresh token (optional)",
"basalamSettingsApiBaseUrl": "API base URL",
"basalamSettingsDefaultVendorId": "Default Basalam vendor ID",
"basalamSettingsDefaultCategoryId": "Default Basalam category ID",
"basalamSettingsDefaultPublishStock": "Default publish stock",
"basalamSettingsMonetaryUnit": "Basalam monetary unit",
"basalamSettingsMonetaryUnitHelper": "Hesabix stores IRR only; toman amounts from Basalam are multiplied by 10.",
"basalamSettingsMonetaryUnitRial": "Rial (IRR)",
"basalamSettingsMonetaryUnitToman": "Toman (×10 → IRR)",
"basalamSettingsEnableWebhook": "Enable webhook",
"basalamSettingsWebhookSecret": "Webhook secret",
"basalamSettingsEnableChat": "Enable chat bridge",
"basalamSettingsEnableOrderSync": "Enable order sync",
"basalamSettingsEnableProductSync": "Enable product sync",
"basalamSettingsCreateInvoiceOnSync": "Create invoice on order sync",
"basalamSettingsSyncInvoiceType": "Sync invoice type",
"basalamSettingsPersonMatchMode": "Person matching mode",
"basalamSettingsProductMatchMode": "Product matching mode",
"basalamSettingsPaymentMode": "Payment accounting mode",
"basalamSettingsBlockOverpayment": "Block payment over invoice remaining",
"basalamSettingsBlockOverpaymentSubtitle": "Compares invoice remaining (IRR) to Basalam amount before posting receipt.",
"basalamSettingsInvoiceToleranceIrr": "Invoice remaining tolerance (IRR)",
"basalamSettingsPriceConflictStrategy": "Price conflict strategy",
"basalamSettingsStockConflictStrategy": "Stock conflict strategy",
"basalamSettingsVariantStrategy": "Variant strategy",
"basalamSettingsDefaultOrderTag": "Default order tag",
"basalamSettingsSave": "Save Basalam settings",
"basalamSettingsLatestWebhook": "Latest webhook event",
"basalamSettingsWebhookEventType": "Type",
"basalamSettingsWebhookEventTime": "Time",
"basalamModeMatchOnly": "Match only",
"basalamModeCreateOnly": "Create only",
"basalamModeMatchOrCreate": "Match or create",
"basalamModeManualReview": "Manual review",
"basalamPaymentModeManualReview": "Manual review",
"basalamPaymentModeAutoBank": "Auto bank",
"basalamPaymentModeAutoCash": "Auto cash",
"basalamStrategyLocalWins": "Local wins",
"basalamStrategyRemoteWins": "Remote wins",
"basalamSyncInvoiceTypeSales": "Sales invoice",
"basalamSyncInvoiceTypeSalesReturn": "Sales return",
"basalamDlqClearDialogTitle": "Clear sync dead-letter?",
"basalamDlqClearDialogBody": "All recorded order/payment sync failures will be removed.",
"basalamDlqClearConfirm": "Clear",
"basalamDlqClearedSnackbar": "Dead-letter queue cleared",
"reportsWooSection": "WooCommerce reports",
"reportsWooOverviewTitle": "WooCommerce store overview",
"reportsWooOverviewSubtitle": "Orders by status, products, customers, last 7 days",
"reportsWooRecentOrdersTitle": "Recent WooCommerce orders",
"reportsWooRecentOrdersSubtitle": "Order table from the store bridge",
"reportsWooCatalogTitle": "WooCommerce product catalog",
"reportsWooCatalogSubtitle": "Products from the store bridge",
"reportsWooBridgeTitle": "WooCommerce bridge health",
"reportsWooBridgeSubtitle": "Plugin, WooCommerce versions and connection test",
"reportsWooKeywordsOverview": "WooCommerce|woocommerce|store|arcwoc|woo",
"reportsWooKeywordsOrders": "order|orders|woo|woocommerce",
"reportsWooKeywordsCatalog": "product|products|catalog|sku|woo",
"reportsWooKeywordsBridge": "bridge|health|connection|woo|wordpress",
"reportsWooStatCustomers": "Customers",
"reportsWooStatOrders7d": "Orders (last 7 days)",
"reportsWooStatOrderStorage": "Order storage",
"reportsWooStatBridgeVersion": "Bridge version",
"reportsWooStatWcVersion": "WooCommerce",
"reportsWooStatWpVersion": "WordPress",
"reportsWooStatPluginVersion": "ArcWOC plugin",
"reportsWooOverviewChartCaption": "{title} — {subtitle}",
"@reportsWooOverviewChartCaption": {"placeholders": {"title": {"type": "String"}, "subtitle": {"type": "String"}}},
"reportsWooBridgeTableHint": "Technical values returned by the store bridge. Use them to verify versions and connectivity.",
"wooBridgeFieldBridgeVersion": "Bridge software version",
"wooBridgeFieldWcVersion": "WooCommerce version on the store",
"wooBridgeFieldWpVersion": "WordPress version on the store",
"wooBridgeFieldPluginVersion": "Hesabix ArcWOC plugin version",
"wooBridgeFieldGenericTitle": "{key}",
"@wooBridgeFieldGenericTitle": {"placeholders": {"key": {"type": "String"}}},
"wooBridgeFieldGenericSubtitle": "Raw value from the bridge response.",
"reportsWooRefreshTooltip": "Refresh",
"reportsWooOrderStorageHpos": "High-performance order storage (HPOS)",
"reportsWooOrderStoragePosts": "Classic storage (posts table)",
"reportsWooOrderStorageUnknown": "{code}",
"@reportsWooOrderStorageUnknown": {"placeholders": {"code": {"type": "String"}}},
"wooBridgeFieldSiteUrl": "Store site URL",
"wooBridgeFieldBridgeEnabled": "Bridge REST enabled",
"wooBridgeValueTrue": "Yes",
"wooBridgeValueFalse": "No",
"permissionSectionWooCommerce": "WooCommerce",
"permissionWooCommerceView": "View WooCommerce",
"permissionWooCommerceManage": "Manage WooCommerce settings",
"woocommerceColumnOrderType": "Order type",
"woocommerceColumnHesabixId": "Hesabix ID",
"woocommerceColumnSyncStatus": "Sync status",
"woocommerceSyncStatusSynced": "Synced",
"woocommerceSyncStatusPending": "Pending",
"woocommerceSyncStatusError": "Error",
"woocommerceSyncStatusNone": "Not linked",
"woocommerceOrderTypeShopOrder": "Order",
"woocommerceOrderTypeShopOrderRefund": "Refund",
"woocommerceOrderTypeUnknown": "{type}",
"@woocommerceOrderTypeUnknown": {"placeholders": {"type": {"type": "String"}}},
"woocommerceOrderStatusPending": "Pending payment",
"woocommerceOrderStatusProcessing": "Processing",
"woocommerceOrderStatusOnHold": "On hold",
"woocommerceOrderStatusCompleted": "Completed",
"woocommerceOrderStatusCancelled": "Cancelled",
"woocommerceOrderStatusRefunded": "Refunded",
"woocommerceOrderStatusFailed": "Failed",
"woocommerceOrderStatusDraft": "Draft",
"woocommerceOrderStatusTrash": "Trash",
"woocommerceOrderStatusAutoDraft": "Auto draft",
"woocommerceOrderStatusCheckoutDraft": "Checkout draft",
"woocommerceOrderStatusUnknown": "{status}",
"@woocommerceOrderStatusUnknown": {"placeholders": {"status": {"type": "String"}}},
"woocommerceProductTypeSimple": "Simple product",
"woocommerceProductTypeGrouped": "Grouped product",
"woocommerceProductTypeExternal": "External product",
"woocommerceProductTypeVariable": "Variable product",
"woocommerceProductTypeVariation": "Variation",
"woocommerceProductTypeUnknown": "{type}",
"@woocommerceProductTypeUnknown": {"placeholders": {"type": {"type": "String"}}},
"woocommerceSettingsPageTitle": "WooCommerce & ArcWOC settings",
"woocommerceSettingsPageSubtitle": "Bridge, store health, queue and ArcWOC plugin options.",
"woocommerceOpenIntegrationHub": "Open WooCommerce hub",
"woocommerceGoToSettingsTooltip": "WooCommerce settings",
"woocommerceHubSettingsPromoTitle": "Bridge connection settings",
"woocommerceHubSettingsPromoSubtitle": "ArcWOC plugin options, queue, logs and bulk actions are under WooCommerce settings.",
"woocommerceSettingsSavedSnackbar": "WooCommerce settings saved",
"woocommerceSettingsBridgeIntroTitle": "Connection",
"woocommerceSettingsBridgeIntroBody": "Enter your WordPress site base URL and the bridge token generated in the Hesabix ArcWOC plugin. Leave the token field empty when saving to keep the existing secret.",
"woocommerceStoreUrlLabel": "Store base URL (WordPress)",
"woocommerceStoreUrlHint": "https://example.com",
"woocommerceBridgeTokenLabel": "Bridge token (from ArcWOC plugin)",
"woocommerceBridgeTokenHelp": "If a token is already stored, leave this field empty and press save to keep the current value.",
"woocommerceManagePermissionHint": "Read-only: saving requires WooCommerce “manage” permission.",
"woocommerceSaveButton": "Save",
"woocommerceTestConnectionButton": "Test connection",
"woocommerceConnectionTestSuccess": "Connection successful",
"woocommercePermissionDeniedTitle": "WooCommerce",
"woocommercePermissionDeniedBody": "You need WooCommerce “view” permission to open this section.",
"woocommerceHubOrdersTab": "Orders",
"woocommerceHubProductsTab": "Products",
"woocommerceHubCustomersTab": "Customers",
"woocommerceHubControlTab": "ArcWOC control",
"woocommerceHubArcwocSettingsBannerTitle": "ArcWOC plugin settings",
"woocommerceHubArcwocSettingsBannerSubtitle": "Queue, logs, debug mode and bulk sync now live on the WooCommerce settings page.",
"woocommerceHubOpenWooSettingsButton": "Open settings",
"woocommerceControlIntroTitle": "Plugin operations dashboard",
"woocommerceControlIntroSubtitle": "Mapping stats, Hesabix API health, plugin version, recent logs and bulk sync via the same secure bridge token as the operations hub.",
"woocommerceControlRefreshTooltip": "Refresh all sections",
"woocommerceControlStatsTitle": "Mapping stats (hesabix_v2 table)",
"woocommerceControlPluginTitle": "Plugin version & updates",
"woocommerceControlConnectionTitle": "Hesabix API from the store",
"woocommerceControlSettingsTitle": "Plugin settings summary (no full API key)",
"woocommerceControlLogsTitle": "Recent plugin logs",
"woocommerceControlBulkTitle": "Bulk sync",
"woocommerceControlBulkIdsHint": "Enter WooCommerce IDs separated by commas (e.g. 101,102,103)",
"woocommerceControlSyncOrdersButton": "Sync orders",
"woocommerceControlSyncProductsButton": "Sync products (parents)",
"woocommerceControlSyncCustomersButton": "Sync customers",
"woocommerceControlManageRequiredHint": "Remote sync requires WooCommerce “manage” permission.",
"woocommerceControlConnectionOk": "OK",
"woocommerceControlConnectionFail": "Failed",
"woocommerceControlCurrentVersion": "Installed version",
"woocommerceControlRemoteVersion": "Repository version",
"woocommerceControlUpdateAvailable": "Update available",
"woocommerceControlColumnLogId": "ID",
"woocommerceControlColumnEntityType": "Entity",
"woocommerceControlColumnEntityId": "WC ID",
"woocommerceControlColumnAction": "Action",
"woocommerceControlColumnStatus": "Status",
"woocommerceControlColumnCreatedAt": "Time",
"woocommerceControlColumnError": "Error",
"woocommerceHubSyncRowTooltip": "Sync to Hesabix",
"woocommerceHubSyncColumnLabel": "Sync",
"woocommerceHubSyncOrderConfirmTitle": "Sync this order?",
"woocommerceHubSyncOrderConfirmBody": "The selected order will be pushed to Hesabix through the plugin API.",
"woocommerceHubSyncProductConfirmTitle": "Sync this product?",
"woocommerceHubSyncProductConfirmBody": "The selected product will be pushed to Hesabix through the plugin API.",
"woocommerceHubSyncCustomerConfirmTitle": "Sync this customer?",
"woocommerceHubSyncCustomerConfirmBody": "The selected customer will be pushed to Hesabix through the plugin API.",
"woocommerceHubBulkSyncTitle": "Bulk sync (hub)",
"woocommerceHubBulkEffectiveHint": "Each request sends up to {applied} items (plugin cap {bridge}; selected batch size {choice}).",
"@woocommerceHubBulkEffectiveHint": {
"placeholders": {
"applied": {"type": "String"},
"bridge": {"type": "String"},
"choice": {"type": "String"}
}
},
"woocommerceHubBulkBatchSizeLabel": "Batch size (per request)",
"woocommerceHubBulkSyncCurrentPage": "This table page",
"woocommerceHubBulkSyncSelected": "Selected rows",
"woocommerceHubBulkConfirmSelected": "Sync {count} selected row(s) from the table?",
"@woocommerceHubBulkConfirmSelected": {"placeholders": {"count": {"type": "String"}}},
"woocommerceHubBulkEmptySelection": "Select one or more rows using the checkboxes, then tap sync selected.",
"woocommerceHubBulkSyncAllFiltered": "All with current filters",
"woocommerceHubBulkConfirmCurrentPage": "Sync {count} item(s) on the current page?",
"@woocommerceHubBulkConfirmCurrentPage": {"placeholders": {"count": {"type": "String"}}},
"woocommerceHubBulkConfirmAll": "Sync all {count} item(s) matching the current filters? This may run multiple requests.",
"@woocommerceHubBulkConfirmAll": {"placeholders": {"count": {"type": "String"}}},
"woocommerceHubBulkEmpty": "Nothing to sync in this view.",
"woocommerceHubBulkFinishedOk": "Synced {processed} item(s) in {batches} request batch(es).",
"@woocommerceHubBulkFinishedOk": {
"placeholders": {
"processed": {"type": "String"},
"batches": {"type": "String"}
}
},
"woocommerceHubBulkProgressLabel": "Request batch",
"woocommerceOpeningInvBridgeTitle": "Opening inventory (bridge)",
"woocommerceOpeningInvBridgeSubtitle": "Run the same opening-balance job as the WooCommerce plugin, via the Hesabix store bridge. Use after products are synced and accounts/warehouse are configured on the store.",
"woocommerceOpeningInvRefreshStatus": "Refresh status",
"woocommerceOpeningInvLoadAccounts": "Load accounts",
"woocommerceOpeningInvPreview": "Preview",
"woocommerceOpeningInvPrepare": "Prepare only",
"woocommerceOpeningInvRunAllToEnd": "Run all batches to completion",
"woocommerceOpeningInvFinalizeOnly": "Finalize",
"woocommerceOpeningInvNeedActiveJob": "Create a job with “Prepare only” first, or refresh status to restore a pending job.",
"woocommerceOpeningInvRunBatches": "One batch step",
"woocommerceOpeningInvFinalize": "Finalize document",
"woocommerceOpeningInvCancelJob": "Cancel after current batch",
"woocommerceOpeningInvClearLog": "Clear log",
"woocommerceOpeningInvInventoryAccountLabel": "Inventory (goods) account",
"woocommerceOpeningInvEquityAccountLabel": "Equity account (auto-balance)",
"woocommerceOpeningInvBatchSizeLabel": "Batch size (3–40)",
"woocommerceOpeningInvWarehouseOverrideLabel": "Warehouse ID (0 = plugin default)",
"woocommerceOpeningInvIncludeTaxLabel": "Include VAT in unit cost",
"woocommerceOpeningInvAutoBalanceLabel": "Auto-balance to equity",
"woocommerceOpeningInvDoPostLabel": "Post (lock) opening balance in Hesabix",
"woocommerceOpeningInvCostBasisLabel": "Cost basis",
"woocommerceOpeningInvCostBasisRegular": "Regular price",
"woocommerceOpeningInvCostBasisSale": "Sale price",
"woocommerceOpeningInvCostBasisZero": "Zero cost",
"woocommerceOpeningInvPendingProgress": "{cursor} / {total}",
"@woocommerceOpeningInvPendingProgress": {
"placeholders": {
"cursor": {},
"total": {}
}
},
"woocommerceOpeningInvJobIdLabel": "Job ID",
"woocommerceOpeningInvCompletedBanner": "This store already completed opening inventory in the plugin.",
"woocommerceOpeningInvPhraseHint": "To post the document, type exactly:",
"woocommerceOpeningInvPhrasePromptTitle": "Confirm posting phrase",
"woocommerceOpeningInvPhraseMismatch": "Phrase does not match; finalize cancelled.",
"woocommerceOpeningInvLogTitle": "Log",
"woocommerceOpeningInvPickInventoryHint": "Choose an inventory account.",
"woocommerceOpeningInvPickEquityHint": "Choose an equity account or turn off auto-balance.",
"woocommerceOpeningInvOpenFromHub": "Opening inventory (bridge)",
"woocommerceSyncDone": "Sync completed",
"woocommerceControlQueueTitle": "Background sync queue",
"woocommerceControlQueueBatchHint": "Max rows per run (from plugin settings): {n}",
"@woocommerceControlQueueBatchHint": {"placeholders": {"n": {"type": "String"}}},
"woocommerceControlQueueProcessOnceButton": "Process one queue batch",
"woocommerceControlPluginForceCheckButton": "Re-check version from repository",
"woocommerceControlDebugModeTitle": "Plugin debug mode",
"woocommerceControlDebugModeSubtitle": "Verbose logging in the plugin; only users with manage permission can change this.",
"woocommerceControlSettingsApplied": "Plugin settings updated",
"woocommerceControlStockTitle": "Inventory sync status",
"woocommerceControlStockSourceLabel": "Source of truth",
"woocommerceControlStockPullNow": "Pull stock to WooCommerce",
"woocommerceControlStockConflicts": "Check stock conflicts",
"woocommerceControlStockPullDone": "Stock pull finished: {message}",
"@woocommerceControlStockPullDone": {"placeholders": {"message": {"type": "String"}}},
"woocommerceControlStockConflictsDone": "Conflicts found: {count}",
"@woocommerceControlStockConflictsDone": {"placeholders": {"count": {"type": "String"}}},
"woocommerceSettingsPushStockOnWarehousePost": "After posting a warehouse document, push stock to WooCommerce",
"woocommerceSettingsPushStockOnWarehousePostHelp": "Requires an active bridge and “accept remote push” in the plugin. Store source of truth should be Hesabix.",
"woocommerceControlQueueProcessDone": "Processed one queue batch; about {delta} fewer pending row(s).",
"@woocommerceControlQueueProcessDone": {"placeholders": {"delta": {"type": "String"}}},
"woocommerceControlPluginCheckDone": "Repository version check refreshed",
"woocommerceOrdersFiltersTitle": "Order filters",
"woocommerceOrderStatusLabel": "Status (WC slug or comma-separated)",
"woocommerceOrderStatusHint": "processing or processing,completed",
"woocommerceOrderCustomerIdLabel": "WooCommerce customer ID",
"woocommerceOrderSearchLabel": "Search in orders",
"woocommerceOrderDateAfterLabel": "After (ISO date)",
"woocommerceOrderDateBeforeLabel": "Before (ISO date)",
"woocommerceOrderSortByLabel": "Sort by",
"woocommerceOrderSortOrderLabel": "Direction",
"woocommerceOrderSortByDate": "Date",
"woocommerceOrderSortByModified": "Modified",
"woocommerceOrderSortById": "ID",
"woocommerceSortDesc": "Descending",
"woocommerceSortAsc": "Ascending",
"woocommerceApplyFiltersButton": "Apply filters",
"woocommerceClearOrderFilters": "Clear filters",
"woocommerceOrderStatusQuickTitle": "Order status (WooCommerce)",
"woocommerceOrderDatePickFrom": "From date",
"woocommerceOrderDatePickTo": "To date",
"woocommerceOrderDateClear": "Clear date range",
"woocommerceOrdersFilterExpandTitle": "Filters & sorting",
"woocommerceSettingsArcwocPluginTitle": "ArcWOC plugin (general)",
"woocommerceSettingsArcwocPluginIntro": "Mapping stats, Hesabix API status from the store, background queue, plugin version, settings summary, debug, bulk sync and logs.",
"woocommerceBridgeTokenStored": "Bridge token saved",
"woocommerceBridgeTokenMissing": "No bridge token saved",
"woocommerceShowTokenTooltip": "Reveal token temporarily",
"woocommerceHideTokenTooltip": "Hide token",
"woocommerceConnectionTestDetailsTitle": "Connection test details",
"woocommerceConnectionHealthTitle": "Latest store health payload",
"woocommerceShowRawSettingsJson": "Show raw settings JSON",
"woocommerceHideRawSettingsJson": "Hide raw JSON",
"woocommerceStatsTotalLabel": "Total",
"woocommerceControlBulkConfirmBody": "Run remote sync for {count} ID(s)?",
"@woocommerceControlBulkConfirmBody": {"placeholders": {"count": {"type": "String"}}},
"woocommerceSearchProductsLabel": "Search products",
"woocommerceSearchCustomersLabel": "Search customers",
"woocommerceNoData": "No data",
"woocommercePagerLine": "Page {page} of {pages} (total {total})",
"@woocommercePagerLine": {"placeholders": {"page": {"type": "String"}, "pages": {"type": "String"}, "total": {"type": "String"}}},
"woocommerceColumnOrderId": "ID",
"woocommerceColumnOrderNumber": "Number",
"woocommerceColumnOrderStatus": "Status",
"woocommerceColumnOrderTotal": "Total",
"woocommerceColumnBillingEmail": "Email",
"woocommerceColumnProductId": "ID",
"woocommerceColumnProductName": "Name",
"woocommerceColumnSku": "SKU",
"woocommerceColumnProductType": "Type",
"woocommerceColumnPrice": "Price",
"woocommerceColumnCustomerId": "ID",
"woocommerceColumnCustomerEmail": "Email",
"woocommerceColumnCustomerName": "Name",
"woocommerceColumnUsername": "Username",
"reportsWooTableHintOrders": "Orders loaded from the live store bridge (read-only).",
"reportsWooTableHintCatalog": "Products loaded from the live store bridge (read-only).",
"reportsWooSettingsPromoTitle": "Bridge settings",
"reportsWooSettingsPromoSubtitle": "If numbers or lists look wrong, update the store URL or bridge token here, then refresh this report.",
"woocommerceOpenReportsOverviewTooltip": "WooCommerce reports overview",
"woocommerceOpenOpeningInventoryTooltip": "Opening inventory (bridge)",
"woocommerceSettingsOpeningInventoryLinkTitle": "Opening inventory via bridge",
"woocommerceSettingsOpeningInventoryLinkSubtitle": "Create the job and run batches from Hesabix without wp-admin.",
"settingsWooCommerceTitle": "WooCommerce bridge",
"settingsWooCommerceSubtitle": "Bridge, health, ArcWOC, queue & logs",
"invoiceGlobalDiscountSection": "Invoice-level discount",
"invoiceGlobalDiscountTypePercent": "Percent",
"invoiceGlobalDiscountTypeAmount": "Amount",
"invoiceGlobalDiscountValueLabel": "Invoice discount value",
"invoiceGlobalDiscountLineDiscountHint": "Line discounts subtotal: {amount}",
"@invoiceGlobalDiscountLineDiscountHint": {"placeholders": {"amount": {"type": "String"}}},
"invoiceGlobalDiscountAmountComputedHint": "Applied invoice discount: {amount}",
"@invoiceGlobalDiscountAmountComputedHint": {"placeholders": {"amount": {"type": "String"}}},
"invoiceSummarySubtotal": "Subtotal",
"invoiceSummaryDiscount": "Total discount",
"invoiceSummaryTax": "Total tax",
"invoiceSummaryTotal": "Grand total",
"invoiceSummaryLinesAndQuantity": "Items: {lineCount} line(s), total quantity: {totalQuantity}",
"@invoiceSummaryLinesAndQuantity": {"placeholders": {"lineCount": {"type": "String"}, "totalQuantity": {"type": "String"}}},
"businessSettingsInvoiceGlobalDiscountTitle": "Invoice-level discount (calculation)",
"businessSettingsInvoiceGlobalDiscountBasisLabel": "Percent discount basis",
"businessSettingsInvoiceGlobalDiscountBasisSubtotalAfterLines": "Net after line discounts (pre-tax)",
"businessSettingsInvoiceGlobalDiscountBasisGrossBeforeLines": "Gross before line discounts",
"businessSettingsInvoiceGlobalDiscountBasisTotalWithTax": "Sum of line totals including tax",
"businessSettingsInvoiceGlobalDiscountTaxModeLabel": "Effect on tax",
"businessSettingsInvoiceGlobalDiscountTaxModeRecalculate": "Recalculate tax proportionally",
"businessSettingsInvoiceGlobalDiscountTaxModeKeep": "Keep per-line tax amounts",
"businessSettingsInvoiceGlobalDiscountMaxPercent": "Max percent (optional)",
"businessSettingsInvoiceGlobalDiscountMaxAmount": "Max amount (optional)",
"editInvoiceTitle": "Edit invoice",
"saveChangesTooltip": "Save changes",
"invoiceInfoTab": "Invoice info",
"invoiceHeaderDescriptionLabel": "Invoice description",
"invoiceHeaderDescriptionHint": "e.g. product sale or a short note for this invoice",
"invoiceProductsTab": "Products & services",
"invoiceTransactionsTab": "Transactions",
"invoiceInstallmentsTab": "Installments",
"invoiceSettingsTab": "Settings",
"invoiceGlobalDiscountPercentInvalid": "Invoice discount percent must be between 0 and 100",
"invoiceGlobalDiscountAmountInvalid": "Invoice discount amount cannot be negative",
"invoiceGlobalDiscountValueInvalid": "Invoice discount value is invalid",
"fiscalYearRollbackTitle": "Revert current fiscal year",
"fiscalYearRollbackRetry": "Try again",
"fiscalYearRollbackTokenMissing": "No confirmation code or it has expired. Tap “Refresh preview” and try again.",
"fiscalYearRollbackConfirmTitle": "Final confirmation",
"fiscalYearRollbackConfirmWithBackupBody": "A full business backup will be saved in the system first, then the current fiscal year and all its documents will be removed. Closing documents on the previous year (if any) will also be removed. This cannot be undone in the app.",
"fiscalYearRollbackConfirmWithoutBackupBody": "The current fiscal year and all its documents will be removed. Closing documents on the previous year (if any) will also be removed. This cannot be undone in the app.",
"fiscalYearRollbackCancel": "Cancel",
"fiscalYearRollbackConfirmDelete": "Remove current year",
"fiscalYearRollbackPhaseBackupStarting": "Creating full system backup…",
"fiscalYearRollbackBackupStartFailed": "Could not start backup.",
"fiscalYearRollbackBackupJobIdMissing": "Backup job id was not returned by the server.",
"fiscalYearRollbackPhasePreviewRefresh": "Refreshing preview (new confirmation code)…",
"fiscalYearRollbackAfterBackupBlocked": "After the backup, fiscal rollback is no longer allowed. The business state may have changed. Review the preview and try again.",
"fiscalYearRollbackTokenAfterBackupMissing": "No confirmation code after backup. Tap “Refresh preview”.",
"fiscalYearRollbackTokenMissingGeneric": "Confirmation code is not available.",
"fiscalYearRollbackPhaseDeleting": "Removing current fiscal year…",
"fiscalYearRollbackSuccessFallback": "Completed successfully",
"fiscalYearRollbackWarningCard": "This removes all documents in the current fiscal year and makes the previous year current.",
"fiscalYearRollbackCurrentYearLabel": "Current year (will be removed)",
"fiscalYearRollbackYearIdSuffix": "ID {id}",
"@fiscalYearRollbackYearIdSuffix": {"placeholders": {"id": {"type": "String"}}},
"fiscalYearRollbackNextCurrentLabel": "Will become current",
"fiscalYearRollbackDocCountLabel": "Documents in current year: {count}",
"@fiscalYearRollbackDocCountLabel": {"placeholders": {"count": {"type": "String"}}},
"fiscalYearRollbackClosingDocsToDelete": "Closing documents on the previous year to be removed: {count}",
"@fiscalYearRollbackClosingDocsToDelete": {"placeholders": {"count": {"type": "String"}}},
"fiscalYearRollbackBackupCheckboxTitle": "Take a full backup before removing the year",
"fiscalYearRollbackBackupCheckboxSubtitle": "Same system backup (.hbx) as in settings, for restore if needed.",
"fiscalYearRollbackOpenBackupPage": "Open backup page",
"fiscalYearRollbackExecuteButton": "Remove current fiscal year",
"fiscalYearRollbackBlockedTitle": "This action is not allowed right now — reasons:",
"fiscalYearRollbackBlockedHint": "After fixing the items below, tap “Refresh preview”.",
"fiscalYearRollbackRefreshPreview": "Refresh preview",
"fiscalYearRollbackBackupProgressPrefix": "Backup: {detail}",
"@fiscalYearRollbackBackupProgressPrefix": {"placeholders": {"detail": {"type": "String"}}},
"fiscalYearRollbackPreviewFailed": "Fiscal rollback preview failed.",
"fiscalYearRollbackNetworkUnreachable": "Could not reach the server. Check your connection and sign-in.",
"fiscalYearRollbackExecuteFailed": "Fiscal rollback failed.",
"fiscalYearRollbackExecuteFailedSupport": "The operation failed. If it keeps happening, contact support.",
"backupJobWaitTimeout": "Backup did not finish within the wait time. Check status under Settings → Backup.",
"backupJobStorageLimitFallback": "Backup could not be saved due to storage limits. Activate a plan or free space.",
"settingsSideCurrenciesTitle": "Secondary currencies",
"settingsSideCurrenciesSubtitle": "Add and remove currencies available for this business",
"settingsInvoiceFxPolicyTitle": "Invoice FX revaluation policy",
"settingsInvoiceFxPolicySubtitle": "Reference time for the rate and behavior when no rate exists (base vs. foreign currency)",
"settingsFxAutoSyncTitle": "Automatic FX rate sync",
"settingsFxAutoSyncSubtitle": "Schedule revaluation rates from the central snapshot with per-currency offsets",
"fxAutoSyncTitle": "Automatic FX rate sync",
"fxAutoSyncHeroTitle": "Rates that keep up with the market",
"fxAutoSyncIntro": "Pull the central market snapshot on a schedule, apply your margin (percent or amount), and write revaluation rates automatically. Single-currency businesses never see this.",
"fxAutoSyncSingleCurrencyHint": "This feature is only available for multi-currency businesses. Add a secondary currency first.",
"fxAutoSyncEnableLabel": "Enable automatic sync",
"fxAutoSyncSourceHint": "Source: central system snapshot (not a direct API call per business)",
"fxAutoSyncScheduleMode": "Schedule",
"fxAutoSyncModeInterval": "Every N hours",
"fxAutoSyncModeDaily": "Daily times",
"fxAutoSyncIntervalLabel": "Interval",
"fxAutoSyncEveryNHours": "Every {hours} hours",
"@fxAutoSyncEveryNHours": {
"placeholders": {
"hours": { "type": "int" }
}
},
"fxAutoSyncAddTimeLabel": "Add time (HH:MM)",
"fxAutoSyncAddTime": "Add",
"fxAutoSyncInvalidTime": "Invalid time. Use HH:MM (e.g. 09:00).",
"fxAutoSyncTimezoneHint": "Times are evaluated in timezone: {tz}",
"@fxAutoSyncTimezoneHint": {
"placeholders": {
"tz": { "type": "String" }
}
},
"fxAutoSyncOptionsTitle": "Safety options",
"fxAutoSyncSkipUnchanged": "Skip if rate barely changed",
"fxAutoSyncMinChangePercent": "Minimum change to write (%)",
"fxAutoSyncBlockStale": "Block when snapshot is stale",
"fxAutoSyncStaleHours": "Stale after (hours)",
"fxAutoSyncOffsetsTitle": "Per-currency offsets",
"fxAutoSyncOffsetsHint": "Preview uses your current form values (draft). Save to persist schedule and offsets.",
"fxAutoSyncRefreshPreview": "Refresh preview",
"fxAutoSyncNoSecondaryCurrencies": "No secondary currencies found.",
"fxAutoSyncOffsetType": "Offset type",
"fxAutoSyncOffsetNone": "None",
"fxAutoSyncOffsetPercent": "Percent",
"fxAutoSyncOffsetAmount": "Fixed amount",
"fxAutoSyncOffsetDirection": "Direction",
"fxAutoSyncOffsetUp": "Above market (+)",
"fxAutoSyncOffsetDown": "Below market (−)",
"fxAutoSyncOffsetValue": "Value",
"fxAutoSyncRefRate": "Reference rate",
"fxAutoSyncFinalRate": "Final rate after offset",
"fxAutoSyncPreviewSavedHint": "Live draft preview from the central snapshot.",
"fxAutoSyncRunNow": "Run now",
"fxAutoSyncRunDone": "Sync finished",
"fxAutoSyncStatusActive": "Schedule active",
"fxAutoSyncStatusInactive": "Schedule off",
"fxAutoSyncLastRun": "Last run",
"fxAutoSyncNextRun": "Next run",
"fxAutoSyncLoadError": "Failed to load auto-sync settings: {error}",
"@fxAutoSyncLoadError": {
"placeholders": {
"error": { "type": "String" }
}
},
"fxAutoSyncSaveError": "Failed to save auto-sync settings: {error}",
"@fxAutoSyncSaveError": {
"placeholders": {
"error": { "type": "String" }
}
},
"fxAutoSyncPreviewError": "Failed to load preview: {error}",
"@fxAutoSyncPreviewError": {
"placeholders": {
"error": { "type": "String" }
}
},
"fxAutoSyncRunError": "Failed to run sync: {error}",
"@fxAutoSyncRunError": {
"placeholders": {
"error": { "type": "String" }
}
},
"fxRevaluationSettingsTitle": "Invoice revaluation (policy)",
"fxRevaluationSettingsIntro": "These options define the reference time for the revaluation rate (against the base currency) for invoices in foreign currency, and what happens if no rate exists.",
"fxRevaluationAsOfSourceLabel": "Reference time for the rate (as_of)",
"fxRevaluationAsOfSourceDocumentDate": "Document date (time from the option below)",
"fxRevaluationAsOfSourceRegisteredAt": "When the document is registered in the system",
"fxRevaluationDateEffectiveLabel": "Effective time on that day (UTC)",
"fxRevaluationTimeStartOfDay": "Start of day 00:00",
"fxRevaluationTimeNoon": "Midday 12:00",
"fxRevaluationTimeEndOfDay": "End of day 23:59:59 (multiple rates per day)",
"fxRevaluationWhenNoRateLabel": "If no revaluation rate exists for the reference time",
"fxRevaluationWhenNoRateBlock": "Block saving the invoice",
"fxRevaluationWhenNoRateAllow": "Allow saving without a rate (incomplete FX on the document)",
"fxRevaluationSettingsFooterNote": "Users without “Currency revaluation” permission cannot pick a specific rate row; the system uses the latest effective rate up to the reference time.",
"fxRevaluationSettingsLoadError": "Failed to load: {error}",
"@fxRevaluationSettingsLoadError": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"fxRevaluationSettingsSaveError": "Could not save: {error}",
"@fxRevaluationSettingsSaveError": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"invoiceFxRateFieldLabel": "Revaluation rate (optional)",
"invoiceFxRateAuto": "Automatic (business policy settings)",
"invoiceFxRateHelper": "For non-base currency; “Automatic” uses the latest valid rate up to the document reference time.",
"invoiceFxRateStoredOnDocument": "Rate stored on this document",
"invoiceFxRateRow": "{rate} — {effective}{idPart}",
"@invoiceFxRateRow": {
"placeholders": {
"rate": {
"type": "String"
},
"effective": {
"type": "String"
},
"idPart": {
"type": "String"
}
}
},
"crmWebChatError": "Error: {detail}",
"@crmWebChatError": {
"placeholders": {
"detail": {
"type": "String"
}
}
},
"crmWebChatErrorLoadingMessages": "Error loading messages: {detail}",
"@crmWebChatErrorLoadingMessages": {
"placeholders": {
"detail": {
"type": "String"
}
}
},
"crmWebChatStatusOpen": "Open",
"crmWebChatStatusPending": "Pending",
"crmWebChatStatusResolved": "Resolved",
"crmWebChatFileSaved": "File saved",
"crmWebChatErrorDownload": "Download error: {detail}",
"@crmWebChatErrorDownload": {
"placeholders": {
"detail": {
"type": "String"
}
}
},
"crmWebChatFileUploadDisabledCrm": "File uploads are disabled in CRM settings.",
"crmWebChatFileReadFailed": "Could not read the file (size or browser limit). Try a smaller file.",
"crmWebChatFileIdMissing": "File id was not returned from the server.",
"crmWebChatFileSent": "File sent",
"crmWebChatNoCrmWritePermission": "You do not have permission to change CRM data.",
"crmWebChatMessageSent": "Sent",
"crmWebChatSaved": "Saved",
"crmWebChatWidgetCreated": "Chat widget created",
"crmWebChatWidgetUpdated": "Chat widget updated",
"crmWebChatEditConversationTitle": "Edit conversation",
"crmWebChatFieldStatus": "Status",
"crmWebChatAssignTo": "Assign to",
"crmWebChatOptionalLeadId": "Lead id (optional)",
"crmWebChatOptionalPersonId": "Person id (optional)",
"crmWebChatUnassigned": "—",
"crmWebChatEmbedSnippet": "// API base: {base}\n// Step 1: POST /api/v1/public/crm-chat/conversations/start\n// JSON body must include public_key \"{publicKey}\" and first_name, last_name, email, phone, page_url.\n// Step 2: with visitor_token and conversation_id, POST to /api/v1/public/crm-chat/messages.\n// See CRM_WEB_CHAT in the Hesabix repository for details.",
"@crmWebChatEmbedSnippet": {
"placeholders": {
"base": {
"type": "String"
},
"publicKey": {
"type": "String"
}
}
},
"crmWebChatDefaultWidgetName": "Widget",
"crmWebChatAccessDenied": "You do not have access to view CRM.",
"crmWebChatPageTitle": "Web chat",
"crmWebChatSearchConversationsHint": "Search conversations, ID, email…",
"crmWebChatMessageDeleted": "This message was deleted",
"crmWebChatLoadOlder": "Loading…",
"crmWebChatDeleteMessage": "Delete message",
"crmWebChatDeleteMessageConfirm": "Deleting this message cannot be undone. Continue?",
"crmWebChatDeleteConversation": "Delete conversation",
"crmWebChatDeleteConversationConfirm": "This conversation and all its messages will be permanently deleted. Continue?",
"crmWebChatConversationDeleted": "Conversation deleted",
"crmWebChatEditMessageTitle": "Edit message",
"crmWebChatEditMessageHint": "New text…",
"crmWebChatEditMessageSaved": "Message updated",
"crmWebChatMessageEditedBadge": "(edited)",
"crmWebChatRefreshTooltip": "Reload",
"crmWebChatFilterStatusLabel": "Status filter",
"crmWebChatFilterAll": "All",
"crmWebChatFilterLongPressHint": "To delete conversations in bulk, press and hold the status filter title.",
"crmWebChatCrmSettingsWidgetsIntro": "Manage the public key, allowed domains, and visitor file upload for each widget.",
"crmWebChatCrmSettingsNoWidgets": "No widgets yet. Create one with the button below.",
"crmWebChatAddWidgetButton": "New widget",
"crmWebChatBulkDeleteTitle": "Delete conversations in bulk",
"crmWebChatBulkDeleteConfirmAll": "All conversations and messages for this business will be permanently deleted. This cannot be undone. Continue?",
"crmWebChatBulkDeleteConfirmStatus": "All conversations with status «{statusLabel}» and their messages will be permanently deleted. This cannot be undone. Continue?",
"@crmWebChatBulkDeleteConfirmStatus": {
"placeholders": {
"statusLabel": {
"type": "String"
}
}
},
"crmWebChatBulkDeleteDone": "{count} conversation(s) deleted",
"@crmWebChatBulkDeleteDone": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"crmWebChatWidgetsSectionTitle": "Chat widgets",
"crmWebChatWidgetsSectionHint": "Use edit for the public key and to disable file upload per site.",
"crmWebChatVisitorAttachmentCrmOff": "Visitor attachments: off (enable in CRM settings first).",
"crmWebChatVisitorAttachmentAllowed": "Visitor attachments: allowed — business storage.",
"crmWebChatVisitorAttachmentWidgetOff": "Visitor attachments: off for this widget.",
"crmWebChatWidgetStateActive": "State: active — embedded on the site",
"crmWebChatWidgetStateInactive": "State: inactive — new conversations cannot start with this key",
"crmWebChatPublicKeyCopied": "Public key copied",
"crmWebChatEmbedGuideCopied": "Connection guide copied",
"crmWebChatMenuCopyPublicKey": "Copy public key",
"crmWebChatMenuCopyApiGuide": "Copy API guide",
"crmWebChatMenuEdit": "Edit…",
"crmWebChatNoWidgetsYet": "No widgets yet — use + to add one.",
"crmWebChatNoConversations": "No conversations — try changing the filter",
"crmWebChatConversationNumber": "Conversation {id}",
"@crmWebChatConversationNumber": {
"placeholders": {
"id": {
"type": "int"
}
}
},
"crmWebChatSelectConversation": "Select a conversation",
"crmWebChatConversationNotFoundRefresh": "Conversation not found — try refreshing",
"crmWebChatVisitorStartPageLabel": "Page where chat started (visitor)",
"crmWebChatVisitorCurrentPageLabel": "Visitor''s current page",
"crmWebChatVisitorIpLine": "IP: {ip}",
"@crmWebChatVisitorIpLine": {
"placeholders": {
"ip": {
"type": "String"
}
}
},
"crmWebChatVisitorDeviceMobile": "Mobile",
"crmWebChatVisitorDeviceTablet": "Tablet",
"crmWebChatVisitorDeviceDesktop": "Desktop",
"crmWebChatVisitorDeviceUnknown": "Device",
"crmWebChatWidgetLine": "Widget: {name}",
"@crmWebChatWidgetLine": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"crmWebChatAssigneeLine": "Owner: {name}",
"@crmWebChatAssigneeLine": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"crmWebChatEditConversationButton": "Edit conversation",
"crmWebChatLeads": "Leads",
"crmWebChatRoleAgent": "Agent",
"crmWebChatRoleVisitor": "Visitor",
"crmWebChatFileLabel": "File",
"crmWebChatAttachFileTooltip": "Attach file (business storage, context crm_web_chat)",
"crmWebChatReplyHint": "Reply… (Ctrl+Enter to send)",
"crmWebChatSend": "Send",
"crmWebChatWidgetDialogTitleEdit": "Edit chat widget",
"crmWebChatWidgetDialogTitleNew": "New chat widget",
"crmWebChatWidgetDialogIntro": "After creation, copy the public key and API connection guide from the widget’s ⋯ menu. Allowed domains only affect browser security (CORS).",
"crmWebChatWidgetNameLabel": "Widget name (internal)",
"crmWebChatWidgetNameHint": "e.g. My shop",
"crmWebChatWidgetNameHelper": "Only visible in your panel to tell widgets apart.",
"crmWebChatWidgetOriginsLabel": "Allowed request domains",
"crmWebChatWidgetOriginsHint": "shop.example.com, blog.shop.example.com",
"crmWebChatWidgetOriginsHelper": "Optional. Host names only (no https://), separated by a comma. If empty, domain rules follow the API docs. For a specific site, add that host here.",
"crmWebChatVisitorFileSwitchTitle": "Let site visitors send files",
"crmWebChatVisitorFileSwitchOn": "Subject to your storage plan. You can turn this off for this widget only; if left on, it matches other widgets.",
"crmWebChatVisitorFileSwitchOff": "Disabled at business level. In CRM settings (e.g. Communications → CRM settings), turn on web chat file upload, then return and set this switch.",
"crmWebChatWidgetActiveTitle": "Widget active",
"crmWebChatWidgetActiveSubtitle": "If off, new conversations cannot start with this public key (existing threads stay in the panel).",
"crmWebChatNameRequired": "Enter a widget name (e.g. site or section).",
"crmWebChatCreate": "Create",
"crmWebChatSocketLive": "Live",
"crmWebChatSocketPolling": "Polling",
"crmWebChatSocketOffline": "Offline",
"crmWebChatSocketNoKey": "No key",
"crmWebChatPeerTyping": "Visitor is typing…",
"crmWebChatTooltipMessageSent": "Sent",
"crmWebChatTooltipMessageRead": "Read",
"crmSettingsWebChatVoiceTitle": "Voice messages in web chat",
"crmSettingsWebChatVoiceSubtitle": "Voice clips count toward your storage plan like other uploads.",
"crmWebChatVisitorVoiceSwitchTitle": "Let visitors send voice messages",
"crmWebChatVisitorVoiceSwitchOn": "Follow CRM and storage limits. Per-widget toggle off if needed.",
"crmWebChatVisitorVoiceSwitchOff": "Voice upload is disabled in CRM settings or limited for this widget.",
"crmWebChatVoiceDisabledCrm": "Voice messages are disabled in CRM settings for this business",
"crmWebChatComposerDropTarget": "Drop to send",
"crmWebChatMicRecording": "Recording…",
"crmWebChatMicStopSend": "Stop & send",
"crmWebChatMicUnavailableWeb": "Voice capture is unavailable in this browser build; attach a file instead",
"crmWebChatVisitorVoiceOffWidget": "Guest voice disabled",
"accountSettingsAppearanceTitle": "Appearance",
"accountSettingsAppearanceDescription": "Business panel layout on desktop (single page vs tabs)",
"appearanceSettingsPageTitle": "Appearance settings",
"appearanceBusinessPanelSection": "Business panel (desktop)",
"appearanceNavigationSingleLabel": "Single page",
"appearanceNavigationSingleSubtitle": "Only one page open at a time (classic navigation)",
"appearanceNavigationTabsLabel": "Tabs in top bar",
"appearanceNavigationTabsSubtitle": "Keep multiple pages open and switch via tabs on the dark strip (desktop only). Background tabs stay mounted; stable page keys improve reuse when you return.",
"appearanceDesktopOnlyNote": "Tabbed layout applies only on wide screens; on mobile, navigation stays single-page.",
"appearanceSaved": "Saved",
"appearanceSaveError": "Could not save settings",
"appearanceSaveButton": "Save",
"businessPanelTabCloseThisTab": "Close this tab",
"businessPanelTabCloseTabsToTheRight": "Close tabs to the right",
"businessPanelTabCloseTabsToTheLeft": "Close tabs to the left",
"businessPanelTabAllTabsTitle": "All tabs",
"businessPanelTabCloseAllTabs": "Close all tabs",
"businessPanelTabListTooltip": "List all tabs",
"businessPanelTabPin": "Pin tab",
"businessPanelTabUnpin": "Unpin tab",
"businessPanelTabPinnedCloseTitle": "Pinned tab",
"businessPanelTabPinnedCloseMessage": "This tab is pinned. Closing it will remove it from the tab bar. Are you sure?",
"businessPanelTabPinnedCloseConfirm": "Close tab",
"businessPanelTabClosePinnedTooltip": "Pinned tab — confirmation required to close",
"businessPanelTabPinnedKeptSnackbar": "{count} pinned tab(s) kept",
"@businessPanelTabPinnedKeptSnackbar": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"businessPanelTabRouteProjects": "Projects",
"businessPanelTabRoutePriceListItems": "Price list items",
"businessPanelTabRouteRepairTechnicians": "Repair technicians",
"businessPanelTabRouteRepairShopSettings": "Repair shop settings",
"appearanceSidebarTabBehaviorSection": "Sidebar navigation (when tabs are on)",
"appearanceSidebarTabBehaviorReuseTitle": "Reuse open tab or open a new one",
"appearanceSidebarTabBehaviorReuseSubtitle": "If that page is already open in a tab, switch to it; otherwise add a new tab. This matches the previous default behavior.",
"appearanceSidebarTabBehaviorLongPressTitle": "Replace the active tab; long press for the default behavior",
"appearanceSidebarTabBehaviorLongPressSubtitle": "A normal click loads the destination in the current tab only. Long press on a sidebar item reuses an open tab or opens a new tab, like the option above.",
"mobileLauncherTitle": "Mobile launcher",
"mobileLauncherAppearanceTile": "Launcher look",
"mobileLauncherAppearancePageTitle": "Launcher appearance",
"mobileLauncherBackgroundColorSection": "Background color",
"mobileLauncherSaveColors": "Save",
"mobileLauncherColorsSaved": "Saved",
"mobileLauncherBackToAccount": "Account",
"mobileLauncherOpenFullPanel": "Full panel",
"mobileLauncherChooseModeTitle": "How do you want to open this business?",
"mobileLauncherModeStandard": "Standard panel",
"mobileLauncherModeLauncher": "Mobile launcher",
"mobileLauncherInvalidBusiness": "Invalid business id",
"mobileLauncherDisableHomeLauncherMenu": "Open app to profile home",
"mobileLauncherDisableHomeLauncherDone": "The app will open to your profile until you choose launcher again.",
"mobileLauncherBusinessNoAccess": "You no longer have access to this business.",
"mobileLauncherExitAppHint": "Press back again to exit",
"mobileLauncherBrandName": "Hesabix",
"mobileLauncherBusinessFallback": "Business",
"mobileLauncherGridLayoutSection": "Grid layout",
"mobileLauncherGridColumns": "Columns",
"mobileLauncherGridRows": "Rows",
"mobileLauncherGridPreview": "Preview",
"mobileLauncherQuickSalesTile": "Quick sales",
"mobileLauncherNewInvoiceTile": "New invoice",
"mobileLauncherSwitchBusiness": "Switch business",
"mobileLauncherTapToSwitchBusiness": "Tap to switch business",
"mobileLauncherSummarySales": "Total sales",
"mobileLauncherSummaryRecent": "Recent transactions",
"mobileLauncherNoTiles": "No shortcuts are available for your role. Open the full panel or ask an admin for access.",
"mobileLauncherLivePreview": "Live preview",
"mobileLauncherTileDensitySection": "Tile density",
"mobileLauncherTileDensityHint": "Choose how many shortcuts appear in each row.",
"mobileLauncherDensityComfortable": "Comfortable",
"mobileLauncherDensityCompact": "Compact",
"mobileLauncherBusinessesLoadError": "Could not load businesses.",
"mobileLauncherNoBusinesses": "No businesses found.",
"businessShellMoreToolsTooltip": "More tools",
"businessShellAiChatTooltip": "Quick AI chat (long-press: launcher · Hold Q then AI)",
"aiQuickLauncherTitle": "AI assistant",
"aiQuickLauncherSubtitle": "What do you need help with?",
"aiQuickLauncherHint": "Type your topic and press Enter…",
"aiQuickLauncherKeyboardHint": "Enter to send · Esc to close · Hold Q then type AI",
"aiQuickLauncherArmedHint": "Type AI…",
"aiQuickLauncherNeedBusiness": "Open a business first to use the AI assistant.",
"aiQuickLauncherNeedLogin": "Sign in to use the AI assistant.",
"businessShellCalculatorTooltip": "Calculator",
"businessShellBackToLauncher": "Back to launcher",
"businessShellHideSidebarTooltip": "Hide sidebar",
"businessShellShowSidebarTooltip": "Show sidebar",
"dataTableHelpMenu": "Help",
"dataTableHelpDialogTitle": "How to use this table",
"dataTableHelpIntro": "These tips help you search, filter, sort, export, and move around large lists comfortably.",
"dataTableHelpSectionSearchTitle": "Search and filters",
"dataTableHelpSectionSearchBody": "• When a search box appears above the table, type to filter. The list refreshes shortly after you pause typing.\n• For a specific column, open the ⋮ menu on that column header and choose Search, set the condition, then Apply.\n• Active filters appear as chips below the header. Remove one chip or use Clear filters when that button is shown.",
"dataTableHelpSectionExportTitle": "Export (Excel / PDF)",
"dataTableHelpSectionExportBody": "• Open the ⋮ menu at the top right of the table.\n• Choose Excel or PDF for all rows, or for selected rows only when row checkboxes are enabled and you have selected rows.\n• The Export entry with extra text opens more options (templates, layout, etc.) when the business enables them.\n• A download icon in the header may offer the same export flow.",
"dataTableHelpSectionSortTitle": "Sorting and columns",
"dataTableHelpSectionSortBody": "• Click a column title to sort by that column; click again to switch ascending / descending.\n• Hold Shift and click another column title to add or adjust a second-level sort.\n• When you hover a header, use its ⋮ menu for column search, pin to left or right, hide column, auto-fit width, or reset column layout (depending on what this table allows).\n• Column settings in the top ⋮ menu lets you show, hide, and reorder columns.",
"dataTableHelpSectionKeyboardTitle": "Keyboard shortcuts",
"dataTableHelpSectionKeyboardBody": "First click on the table body (not inside the search field) so the table has focus.\n\n• J or Down arrow: move highlight to the next row.\n• K or Up arrow: move highlight to the previous row.\n• Enter: open the highlighted row when this page supports opening a row.\n• Space: toggle selection of the highlighted row when selection is enabled.\n• Escape: clear row selection.\n• Ctrl+A: select all rows on the current page when multi-select is enabled.",
"dataTableHelpSectionScrollTitle": "Wide tables and horizontal scroll",
"dataTableHelpSectionScrollBody": "• When there are many columns, a horizontal scrollbar appears under the table. Drag it to see hidden columns.\n• With a mouse wheel: move the pointer over the table and hold Shift while scrolling the wheel to scroll sideways (common on Windows and Linux browsers).\n• On a trackpad, use a horizontal two-finger swipe. On touch screens, drag the table sideways.",
"dataTableHelpSectionSelectionTitle": "Row selection and copying",
"dataTableHelpSectionSelectionBody": "• Use the checkboxes in the first column when selection is enabled.\n• With multi-select, hold Shift and click another row to select everything between the last selection and that row.\n• Long-press (or right-click where supported) on a cell value to copy it to the clipboard.",
"dataTableHelpSectionOtherTitle": "Other controls",
"dataTableHelpSectionOtherBody": "• Refresh in the ⋮ menu reloads data from the server.\n• Compact mode toggles denser row height; your choice may be remembered for this table.\n• Use pagination at the bottom to change page size and move between pages.",
"frequentDescriptionsPickHint": "Focus this field to see your saved frequent descriptions.",
"frequentDescriptionsManage": "Manage frequent descriptions",
"frequentDescriptionsAdd": "Add",
"frequentDescriptionsEmpty": "No frequent descriptions yet.",
"frequentDescriptionsLoadError": "Could not load the list.",
"frequentDescriptionsNewLabel": "New description",
"frequentDescriptionsDeleteTitle": "Remove description",
"frequentDescriptionsDeleteConfirm": "Remove this text from your frequent descriptions list?",
"frequentDescriptionsSaved": "Saved",
"frequentDescriptionsLimitReached": "Maximum number of frequent descriptions for this section has been reached (500 per scope).",
"frequentDescriptionsNoSearchMatch": "No matching descriptions.",
"frequentDescriptionsSearchInList": "Search in list",
"frequentDescriptionsUseInField": "Insert into field",
"productPublicCatalogTitle": "Supply network catalog",
"productPublicCatalogSubtitle": "When enabled, catalog profile fields (summary, expert review, specifications, contact) are exposed via the public catalog API.",
"publicCatalogShowContactTitle": "Show phone numbers in public catalog",
"publicCatalogShowContactSubtitle": "When enabled, this business landline and mobile are returned by the public catalog API.",
"publicCatalogShowBaseSalesPriceTitle": "Show base sales price in public catalog",
"publicCatalogShowBaseSalesPriceSubtitle": "When disabled, base sales price is omitted from the public catalog API for published items.",
"profileDashboardTitle": "Profile Dashboard",
"profileDashboardLoadError": "Failed to load profile dashboard:\n{error}",
"@profileDashboardLoadError": {"placeholders": {"error": {"type": "String"}}},
"profileDashboardEditLayout": "Edit layout",
"profileDashboardExitEdit": "Exit edit mode",
"profileDashboardYourBusinesses": "Your businesses",
"profileDashboardAnnouncements": "Announcements",
"profileDashboardNoBusinesses": "No businesses found",
"profileDashboardCreateBusiness": "Create business",
"profileDashboardNoAnnouncements": "No announcements",
"profileDashboardViewAllAnnouncements": "View all",
"profileDashboardAnnouncementsRefreshed": "Announcements updated",
"profileDashboardOnlyUnread": "Unread only",
"profileDashboardNoTickets": "No tickets found",
"profileDashboardViewAllTickets": "View all",
"profileDashboardHiddenWidgets": "Hidden widgets",
"profileDashboardUnknownWidget": "Unknown widget: {key}",
"@profileDashboardUnknownWidget": {"placeholders": {"key": {"type": "String"}}},
"profileDashboardWidgetNotRegistered": "This widget is not registered",
"profileDashboardIncreaseWidth": "Increase width",
"profileDashboardDecreaseWidth": "Decrease width",
"profileDashboardMoveUp": "Move up",
"profileDashboardMoveDown": "Move down",
"profileDashboardHide": "Hide",
"profileDashboardMarkAsRead": "Mark as read",
"profileDashboardMarkedAsRead": "Marked as read",
"profileDashboardLayoutSaveFailed": "Failed to save layout: {error}",
"@profileDashboardLayoutSaveFailed": {"placeholders": {"error": {"type": "String"}}},
"profileDashboardEnterBusiness": "Open",
"profileDashboardMemberRole": "Member",
"profileDashboardCreateTicket": "Create ticket",
"businessSettingsCategoryBusinessFinance": "Business & finance",
"businessSettingsCategoryBusinessFinanceDescription": "Core info, currencies, fiscal year, and credit",
"businessSettingsCategorySalesDocuments": "Sales & documents",
"businessSettingsCategorySalesDocumentsDescription": "Quick sales, printing, numbering, and templates",
"businessSettingsCategoryIntegrations": "Integrations",
"businessSettingsCategoryIntegrationsDescription": "External services and platform connectors",
"businessSettingsCategoryModules": "Plugins & modules",
"businessSettingsCategoryModulesDescription": "Settings for active business plugins",
"businessSettingsCategoryAdministration": "Administration & security",
"businessSettingsCategoryAdministrationDescription": "Users, projects, notifications, and activity logs",
"businessSettingsCategoryPersonalization": "Personalization",
"businessSettingsCategoryPersonalizationDescription": "Your account appearance preferences",
"businessSettingsCategoryAdvanced": "Advanced & backup",
"businessSettingsCategoryAdvancedDescription": "Backup, restore, and FTP destination",
"businessSettingsCategoryMembership": "Membership",
"businessSettingsCategoryMembershipDescription": "Your membership in this business",
"businessSettingsCategoryDangerZone": "Danger zone",
"businessSettingsCategoryDangerZoneDescription": "Irreversible actions — proceed with caution",
"businessSettingsFiscalYearEdit": "Edit current fiscal year",
"businessSettingsFiscalYearEditDescription": "Edit title and dates of the current fiscal year",
"businessSettingsQuickSales": "Quick sales settings",
"businessSettingsQuickSalesDescription": "Default settings for quick sales",
"businessSettingsCrm": "CRM settings",
"businessSettingsCrmDescription": "Web chat and visitor file uploads",
"businessSettingsProjects": "Project management",
"businessSettingsProjectsDescription": "Define and manage projects for cost and revenue tracking",
"businessSettingsDocumentNumbering": "Document numbering",
"businessSettingsDocumentNumberingDescription": "Configure numbering for document types",
"businessSettingsInvoiceSharePayment": "Invoice link online payment",
"businessSettingsInvoiceSharePaymentDescription": "Default gateway and public share link payment",
"businessSettingsTemplatesDescription": "Design and manage PDF report and print templates",
"businessSettingsRepairShop": "Repair shop settings",
"businessSettingsRepairShopDescription": "Numbering, notifications, and repair shop defaults",
"businessSettingsWarrantyDescription": "Warranty code format, serial, and security settings",
"businessSettingsNotificationTemplates": "Notification templates",
"businessSettingsNotificationTemplatesDescription": "Manage SMS and email templates for events",
"businessSettingsAppearanceProfileDescription": "Language, theme, and calendar — in user profile settings",
"businessSettingsLeaveBusiness": "Leave business",
"businessSettingsLeaveBusinessDescription": "Leave this business and remove your access",
"businessSettingsLeaveBusinessConfirm": "Are you sure you want to leave this business?\n\nAfter leaving, your access to this business will be removed.",
"businessSettingsLeaveBusinessAction": "Leave",
"businessSettingsLeaveBusinessFailed": "Failed to leave business",
"businessSettingsDeleteBusiness": "Delete business",
"businessSettingsDeleteBusinessDescription": "Permanently delete business (recoverable for 30 days)",
"businessSettingsFiscalYearRollback": "Rollback current fiscal year",
"businessSettingsFiscalYearRollbackDescription": "Delete current year and reactivate the previous one (requires at least two fiscal years)",
"businessSettingsHubDescriptionOwner": "You own this business and can manage all settings you have access to.",
"businessSettingsHubDescriptionMember": "You are a member of this business; only settings you can access are shown.",
"businessSettingsHubDescriptionGeneric": "Manage this business settings from this page.",
"businessSettingsOwnerRole": "Business owner",
"businessSettingsMemberRole": "Business member",
"businessSettingsSetupTitle": "Quick setup",
"businessSettingsSetupDescription": "Complete these items to get started:",
"businessSettingsPluginsLoadingHint": "Loading plugins…",
"businessSettingsPluginsLoadFailed": "Failed to load plugins. Integrations and modules may be incomplete.",
"barcodeLabelsMenu": "Labels & barcodes",
"barcodeLabelPluginNotActive": "The barcode label studio add-on is not active for this business.",
"barcodeLabelPluginNotActiveHint": "Start a trial or purchase the add-on from the plugin marketplace.",
"barcodeLabelCreateTitle": "New label template",
"barcodeLabelCreateSubtitle": "Start from a preset or a blank canvas.",
"barcodeLabelBlankCanvas": "Blank canvas",
"barcodeLabelBlankCanvasHint": "Start from scratch in the design studio",
"barcodeLabelNewTemplate": "New template",
"barcodeLabelSearchHint": "Search templates…",
"barcodeLabelFilterAll": "All",
"barcodeLabelFilterPublished": "Published",
"barcodeLabelFilterDraft": "Draft",
"barcodeLabelFilterArchived": "Archived",
"barcodeLabelEmptyTitle": "No templates yet",
"barcodeLabelEmptyBody": "Start with a preset and design scannable product labels.",
"barcodeLabelStartWithPreset": "Start with a preset",
"barcodeLabelDefaultBadge": "Default",
"barcodeLabelDefaultSet": "Default template set",
"barcodeLabelPublished": "Template published",
"barcodeLabelSaved": "Template saved",
"barcodeLabelPreviewPdf": "Preview PDF",
"barcodeLabelPublish": "Publish",
"barcodeLabelSetDefault": "Set as default",
"barcodeLabelDuplicate": "Duplicate",
"barcodeLabelStudioTitle": "Label studio",
"barcodeLabelUntitled": "Untitled template",
"barcodeLabelToolText": "Text",
"barcodeLabelToolBarcode": "Barcode",
"barcodeLabelToolImage": "Image",
"barcodeLabelToolShape": "Shape",
"barcodeLabelToolLine": "Line",
"barcodeLabelLayers": "Layers",
"barcodeLabelProperties": "Properties",
"barcodeLabelNoSelection": "No element selected",
"barcodeLabelBinding": "Data field",
"barcodeLabelSymbology": "Symbology",
"barcodeLabelPermissionDesign": "Design and manage label templates",
"barcodeLabelPermissionPrint": "Print labels with templates",
"barcodeLabelPrintJobTitle": "Print labels with template",
"barcodeLabelSelectTemplate": "Label template",
"barcodeLabelQtyAll": "Qty for all",
"barcodeLabelApplyQty": "Apply",
"barcodeLabelPrintItems": "Print items",
"barcodeLabelSavePdf": "Save PDF",
"barcodeLabelSystemPrint": "Print",
"barcodeLabelPrintWebHint": "On web, the PDF is saved — print it from your browser.",
"barcodeLabelNoPublishedTemplates": "No published templates. Create and publish one in the studio first.",
"barcodeLabelPreviewEmpty": "Preview unavailable",
"barcodeLabelPrintTotal": "Total labels: {count}",
"barcodeLabelAdvancedPrint": "Advanced label print",
"barcodeLabelPrintWithTemplate": "Print general barcodes with template…",
"barcodeLabelPrintUniqueWithTemplate": "Print unique units with template…",
"barcodeLabelExcelPrintTitle": "Print from Excel",
"barcodeLabelExcelPrintHint": "Pick a CSV/Excel file with columns code, barcode, name, qty.",
"barcodeLabelPickExcel": "Choose file",
"barcodeLabelExcelReadFailed": "Could not read the file",
"barcodeLabelExcelReady": "{rows} valid rows · {labels} labels",
"barcodeLabelExcelErrors": "Row errors:",
"barcodeLabelExcelRowError": "Row {line}: missing {field}",
"barcodeLabelContinueToPrint": "Continue to print",
"barcodeLabelSerialPrintTitle": "Serial print",
"barcodeLabelSerialPrintHint": "Define a number range to generate serial barcodes.",
"barcodeLabelSerialPrefix": "Prefix",
"barcodeLabelSerialSuffix": "Suffix",
"barcodeLabelSerialStart": "From",
"barcodeLabelSerialEnd": "To",
"barcodeLabelSerialPad": "Pad length",
"barcodeLabelSerialQtyEach": "Qty each",
"barcodeLabelSerialPreview": "Value count: {count}",
"barcodeLabelSerialItem": "Generated serial",
"barcodeLabelSerialInvalidRange": "Invalid start/end range",
"barcodeLabelSerialTooMany": "Maximum 10000 labels per job",
"barcodeLabelPrintersTitle": "Roll printer profiles",
"barcodeLabelPrinterAdd": "Add profile",
"barcodeLabelPrinterEdit": "Edit profile",
"barcodeLabelPrinterName": "Printer name",
"barcodeLabelPrinterMode": "Print mode",
"barcodeLabelPrinterConnection": "Connection",
"barcodeLabelPrinterHost": "Host / IP",
"barcodeLabelPrinterPort": "Port",
"barcodeLabelPrinterWidthMm": "Label width (mm)",
"barcodeLabelPrinterHeightMm": "Label height (mm)",
"barcodeLabelPrinterDpi": "DPI",
"barcodeLabelPrinterEnabled": "Enabled",
"barcodeLabelPrinterDisabled": "Disabled",
"barcodeLabelPrinterSetActive": "Set active",
"barcodeLabelPrintersSaved": "Printer profiles saved",
"barcodeLabelPrintersEmpty": "No profiles yet. Add one for roll printing.",
"barcodeLabelPrintersWebBanner": "Raw roll/Zebra printing is limited on web; use Windows or Android for best results.",
"barcodeLabelPrintersSpikeNote": "ZPL/ESC-POS is experimental and needs real-hardware validation. Stable path today: PDF spooler at label size.",
"barcodeLabelSelectPrinter": "Printer profile",
"barcodeLabelRollPrint": "Roll print",
"barcodeLabelNoPrinterProfile": "No active printer profile selected",
"barcodeLabelPrinterZplNeedsTcp": "For ZPL, set TCP connection and Host in the profile",
"barcodeLabelPrinterZplSent": "ZPL sent to printer",
"barcodeLabelPrinterEscPosFallback": "ESC/POS not spiked yet; printing via roll PDF",
"barcodeLabelPrinterUnsupportedMode": "Unsupported printer mode",
"barcodeLabelPrintFromProductForm": "Print with label template",
"barcodeLabelCanvasSettings": "Canvas & print",
"barcodeLabelCanvasWidth": "Design width (mm)",
"barcodeLabelCanvasHeight": "Design height (mm)",
"barcodeLabelPrintLayout": "Print layout",
"barcodeLabelPrintLayoutSheet": "Sheet (A4, grid)",
"barcodeLabelPrintLayoutRoll": "Roll / thermal (one label per page)",
"barcodeLabelPaperSize": "Paper size",
"barcodeLabelPaperCustom": "Custom size",
"barcodeLabelPaperWidth": "Paper width (mm)",
"barcodeLabelPaperHeight": "Paper height (mm)",
"barcodeLabelOrientation": "Orientation",
"barcodeLabelPortrait": "Portrait",
"barcodeLabelLandscape": "Landscape",
"barcodeLabelSheetColumns": "Columns",
"barcodeLabelSheetRows": "Rows",
"barcodeLabelRollModeHint": "Roll mode uses the design area size only; paper height is not fixed.",
"barcodeLabelPreviewData": "Preview test data",
"barcodeLabelPreviewDataHint": "Add elements with data bindings to edit preview values here.",
"barcodeLabelRotation": "Rotation (°)",
"barcodeLabelRotate90": "Rotate 90°",
"barcodeLabelContentMode": "Content source",
"barcodeLabelContentBinding": "Data field",
"barcodeLabelContentFixed": "Fixed text",
"barcodeLabelFixedValue": "Text value",
"barcodeLabelShowBarcodeText": "Show barcode text below",
"barcodeLabelPrintSettings": "Print settings",
"barcodeLabelBlankCanvasDialogTitle": "New blank label",
"barcodeLabelBlankCanvasDialogHint": "Set the design area size. For thermal printers use roll mode — only width and label height matter.",
"barcodeLabelStartDesign": "Start designing",
"barcodeLabelPrinterSizeMatch": "Printer profile matches design ({width}×{height} mm)",
"barcodeLabelPrinterSizeMismatch": "Printer {pw}×{ph} mm · design {dw}×{dh} mm — output uses design size",
"barcodeLabelLivePreview": "Live PDF preview",
"barcodeLabelApplyPrinterSize": "Match printer size ({width}×{height} mm)",
"barcodeLabelImageSource": "Image source",
"barcodeLabelImageBusinessLogo": "Business logo",
"barcodeLabelImageProduct": "Product image",
"barcodeLabelImageUpload": "Uploaded image",
"barcodeLabelPickImage": "Choose image file",
"barcodeLabelImageFit": "Image fit",
"barcodeLabelImageFitContain": "Contain",
"barcodeLabelImageFitCover": "Cover",
"barcodeLabelImageFitFill": "Fill",
"barcodeLabelPrinterEscPosSent": "ESC/POS sent to printer",
"@barcodeLabelApplyPrinterSize": {
"placeholders": {
"width": {"type": "String"},
"height": {"type": "String"}
}
},
"@barcodeLabelPrinterSizeMatch": {
"placeholders": {
"width": {"type": "String"},
"height": {"type": "String"}
}
},
"@barcodeLabelPrinterSizeMismatch": {
"placeholders": {
"pw": {"type": "String"},
"ph": {"type": "String"},
"dw": {"type": "String"},
"dh": {"type": "String"}
}
},
"@barcodeLabelPrintTotal": {"placeholders": {"count": {"type": "int"}}},
"@barcodeLabelExcelReady": {"placeholders": {"rows": {"type": "int"}, "labels": {"type": "int"}}},
"@barcodeLabelExcelRowError": {"placeholders": {"line": {"type": "int"}, "field": {"type": "String"}}},
"@barcodeLabelSerialPreview": {"placeholders": {"count": {"type": "int"}}},
"distributionVisitCompleteHint": "Record the visit outcome; pick an invoice or sell from van stock.",
"distributionLinkInvoice": "Link sales invoice",
"distributionSelectInvoice": "Select invoice",
"distributionNoInvoiceLink": "No invoice link",
"distributionNoRecentInvoices": "No recent invoices for this customer.",
"distributionLinkedDocument": "Linked document",
"distributionRemaining": "Remaining",
"distributionVanSaleFromStock": "Sell from van stock",
"distributionVanSaleFromStockHint": "Pick SKUs from current van stock; invoice uses price and tax.",
"distributionVanQtyExceedsStock": "Quantity exceeds van stock.",
"distributionVarianceMustBeZero": "Variance must be zero, or manager must allow variance.",
"distributionVarianceOverrideManageOnly": "Variance override requires manage permission.",
"distributionBankRequired": "Select a bank account for card collection.",
"distributionBankForCard": "Bank account (card)",
"distributionCreateReceiptHint": "Cash/card receipts allocate to the day''s visit invoices.",
"distributionAllowVariance": "Allow confirm with variance",
"distributionAllowVarianceHint": "Only managers can confirm settlements with variance.",
"distributionDraftAwaitingConfirm": "Draft saved; final confirm needs settle/manage.",
"distributionSaveDraftOnly": "Draft only",
"distributionConfirmNeedsManager": "Final settlement confirm needs settle or manage.",
"distributionGeofenceOverrideManageOnly": "Geofence override is manage-only.",
"distributionGeofenceOverrideReason": "Override reason",
"distributionPermissionSettle": "Confirm daily settlement",
"distributionPermissionApproveReturns": "Approve distribution returns",
"distributionSourceInvoice": "Source invoice for return",
"distributionSettlementsReport": "Settlements",
"distributionOrderRate": "Order rate",
"distributionVarianceAbs": "Abs. variance total",
"distributionCustomerCredit": "Customer credit",
"distributionCustomerCreditBlocked": "Customer credit limit exceeded or blocked; van sale not allowed.",
"distributionAvailableCredit": "Available credit",
"distributionCreditLimit": "Credit limit",
"distributionPodTitle": "Proof of delivery (POD)",
"distributionPodHint": "If goods were delivered, record the recipient name.",
"distributionPodConfirm": "Delivery confirmed",
"distributionPodSignerName": "Signer / recipient name",
"distributionPodNote": "Delivery note",
"distributionPodSignerRequired": "Recipient name is required for POD.",
"distributionLiveRefresh": "Live",
"distributionLastUpdated": "Last updated",
"distributionLiveAt": "Live location",
"distributionTeamMapEmpty": "No locations to show.",
"distributionTeamMapEmptyHint": "Visitors appear here when they open Distribution and allow location. Pins are GPS of the visitor, not the customer address.",
"distributionShareLiveLocation": "Share live visitor location",
"distributionShareLiveLocationHint": "While Distribution is open, visitors send GPS so managers can see them on the team map — even without an active visit.",
"distributionLiveLocationVisitorHint": "Your location is shared with managers on the team map while this page is open.",
"distributionLiveLocationGpsUnavailable": "Location is off or permission was denied, so you will not appear on the team map.",
"distributionLiveLocationDisabledBanner": "Live location sharing is turned off in distribution settings.",
"distributionPresenceOnline": "Online",
"distributionPresenceRecent": "Recently seen",
"distributionPresenceStale": "Last known",
"distributionPresenceOffline": "Offline",
"distributionPresenceNone": "No GPS yet",
"distributionTeamMapVisitors": "Visitors",
"distributionTeamMapCustomers": "Customers",
"distributionTeamMapTrail": "Day trail",
"distributionTeamMapNoTrail": "No movement trail for this day.",
"distributionTeamMapOnlineOnly": "Online only",
"distributionTeamMapShowCustomers": "Customer pins",
"distributionStatusUnknown": "Unknown",
"distributionReturnPending": "Pending",
"distributionReturnApproved": "Approved",
"distributionReturnRejected": "Rejected",
"distributionDayProgress": "Today''s progress",
"distributionStopsRemaining": "Remaining",
"distributionStopsDone": "Done",
"distributionNextStop": "Next stop",
"distributionCallCustomer": "Call",
"distributionNavigate": "Navigate",
"distributionCompleteVisitCta": "Complete visit",
"distributionVisitWizardStepOutcome": "Outcome",
"distributionVisitWizardStepSale": "Sale / invoice",
"distributionVisitWizardStepDelivery": "Delivery & docs",
"distributionVisitWizardNext": "Continue",
"distributionVisitWizardBack": "Back",
"distributionVisitWizardFinish": "Finish visit",
"distributionBackToVisit": "Visit stays open after invoice",
"distributionEmptyVisits": "No visits in this range.",
"distributionEmptyVisitsHint": "Start today''s plan from the Field tab.",
"distributionEmptyReturns": "No return requests yet.",
"distributionFilterAll": "All",
"distributionFilterPending": "Pending",
"distributionGoToField": "Go to Field",
"distributionGoToReports": "Performance report",
"distributionOfflineQueued": "Saved to offline queue — will sync when online",
"distributionOfflineQueueTitle": "Offline queue",
"distributionVarianceFormula": "Variance = collections − expected − expenses",
"distributionCashPrefillHint": "Cash defaults to expected sales; adjust if needed.",
"distributionManageSectionRoutes": "Routes & stops",
"distributionManageSectionSettings": "Distribution settings",
"distributionAssignmentFrom": "Valid from",
"distributionAssignmentTo": "Valid to",
"distributionHubToday": "Today",
"distributionMoreActions": "More",
"distributionStopDone": "Done",
"distributionStopCurrent": "Current",
"distributionStopPending": "Todo",
"distributionLiveAutoRefresh": "Auto refresh",
"distributionViewQueue": "View queue",
"distributionTargetOnField": "Your sales target",
"distributionTabCommercial": "Commercial",
"distributionTabOrders": "Orders",
"distributionTabDelivery": "Delivery",
"distributionTabLoadPlan": "Load plan",
"distributionTabPromos": "Promotions",
"distributionTabKpiCommission": "KPI",
"distributionPresellOrdersHint": "Pre-sell orders waiting for warehouse load and delivery.",
"distributionCreateTripFromOrders": "Create delivery trip",
"distributionNoOrders": "No pre-sell orders yet",
"distributionOrderStatus": "Status",
"distributionNetTotal": "Net",
"distributionConfirmOrder": "Confirm",
"distributionOrderConfirmed": "Order confirmed",
"distributionNoOrdersForTrip": "No confirmed orders to put on a trip",
"distributionTripCreated": "Delivery trip created",
"distributionNoTrips": "No delivery trips for this day",
"distributionTrip": "Trip",
"distributionStartTrip": "Start",
"distributionDeliver": "Deliver",
"distributionDeliveryPodTitle": "Proof of delivery",
"distributionPodSignerName": "Receiver name",
"distributionPodNote": "Delivery note",
"distributionPodSignerRequired": "Receiver name is required",
"distributionMarkDelivered": "Mark delivered",
"distributionMarkFailed": "Could not deliver",
"distributionDeliveredOk": "Delivery recorded",
"distributionBuildLoadPlan": "Build load plan from orders",
"distributionLoadPlanHint": "Aggregates confirmed pre-sell lines into a picking wave.",
"distributionNoLoadPlans": "No load plans",
"distributionLoadPlan": "Load plan",
"distributionSkuLines": "SKU lines",
"distributionConfirmLoad": "Confirm & load van",
"distributionLoadPlanCreated": "Load plan created",
"distributionLoadPlanConfirmed": "Load plan confirmed",
"distributionManageOnly": "Only managers can edit this section",
"distributionPromoCreate": "New promotion",
"distributionPromoCode": "Code",
"distributionPromoName": "Name",
"distributionPromoPercent": "Discount %",
"distributionNoPromos": "No promotions",
"distributionKpiPackTitle": "Distribution KPI pack",
"distributionKpiCoverage": "Coverage",
"distributionKpiStrike": "Strike rate",
"distributionKpiDropSize": "Drop size",
"distributionKpiPresell": "Pre-sell orders",
"distributionKpiSales": "Linked sales",
"distributionKpiShelf": "Shelf score",
"distributionCommissionTitle": "Commission runs",
"distributionNoCommissionRuns": "No commission runs yet",
"distributionEnablePresell": "Enable pre-sell orders",
"distributionEnablePresellHint": "Visitor takes order for later delivery (separate from van sale).",
"distributionEnablePromotions": "Enable trade promotions",
"distributionEnableSuggestedOrder": "Suggested order from history",
"distributionVisitorMaxDiscount": "Visitor max discount %",
"distributionSaleMode": "Sale type",
"distributionSaleModeVan": "Van",
"distributionSaleModePresell": "Pre-sell",
"distributionSaleModeInvoice": "Invoice",
"distributionApplySuggestedOrder": "Apply suggested order",
"distributionApplyPromos": "Apply promotions",
"distributionPresellLinesTitle": "Pre-sell lines",
"distributionPresellLinesHint": "These items will be delivered later — not taken from van stock.",
"distributionProductId": "Product ID",
"distributionProductNameOptional": "Product name (optional)",
"distributionChequeItemsTitle": "Cheque details",
"distributionChequeItemsHint": "Each cheque becomes a received check document on confirm.",
"distributionChequePersonId": "Customer ID",
"distributionChequeAmount": "Amount",
"distributionChequeNumber": "Cheque no.",
"distributionChequeDueDate": "Due date",
"distributionAddChequeItem": "Add cheque",
"distributionChequeItemsRequired": "Add cheque details when cheque amount > 0",
"distributionChequeItemsMismatch": "Cheque lines total must match cheque collected",
"distributionLineDiscount": "Line discount",
"distributionShelfAuditTitle": "Shelf audit",
"distributionShelfFacingOk": "Facing is correct",
"distributionShelfPriceOk": "Price label is correct",
"distributionShelfStockOk": "Shelf stock is adequate",
"distributionSelectVan": "Select van",
"distributionSelectWarehouse": "Select source warehouse",
"distributionTabShelfAssets": "Shelf & assets",
"distributionCommissionRulesTitle": "Commission rules",
"distributionCommissionRuleCreate": "New rule",
"distributionCommissionPercent": "Commission %",
"distributionCommissionCompute": "Compute commission",
"distributionCommissionComputed": "Commission computed",
"distributionNoCommissionRules": "No commission rules yet",
"distributionAssetsTitle": "Customer assets",
"distributionAssetCreate": "Register asset",
"distributionAssetType": "Asset type",
"distributionAssetCode": "Asset code",
"distributionNoAssets": "No assets registered",
"distributionNoShelfAudits": "No shelf audits yet",
"distributionTargetMetric": "Target metric",
"distributionMetricAmount": "Sales amount",
"distributionMetricVisits": "Visit count",
"distributionMetricSkuQty": "SKU quantity",
"distributionMetricCoverage": "Coverage %",
"distributionTargetValue": "Target value",
"distributionWizardTitle": "Set up field distribution",
"distributionWizardHint": "Prepare territory, route, customers and visitor in a few steps.",
"distributionWizardStepMode": "Sales model",
"distributionWizardStepWarehouse": "Source warehouse",
"distributionWizardStepRoute": "Territory & route",
"distributionWizardStepCustomers": "Route customers",
"distributionWizardStepVisitor": "Assign visitor",
"distributionWizardFinish": "Finish setup",
"distributionModeVan": "Van sales (stock on the vehicle)",
"distributionModePresell": "Pre-sell (later delivery)",
"distributionModeBoth": "Both models",
"distributionCustomer360Title": "Customer card",
"distributionCreditAvailable": "Available credit",
"distributionLastVisit": "Last visit",
"distributionMustSell": "Must-sell",
"distributionScanBarcode": "Scan barcode",
"distributionBarcodeNotFound": "No product matches this barcode",
"distributionAddSuggested": "Add suggested order",
"distributionFocLine": "Free of charge",
"distributionNearExpiry": "Near expiry",
"distributionExpiredLot": "Expired",
"distributionVanCapacity": "Van capacity",
"distributionVanPlate": "Plate",
"distributionVanMaxWeight": "Max weight (kg)",
"distributionVanMaxVolume": "Max volume (m³)",
"distributionLotCode": "Lot code",
"distributionExpiryDate": "Expiry date",
"distributionSignatureTitle": "Recipient signature",
"distributionSignatureHint": "Sign with finger or mouse",
"distributionSignatureClear": "Clear signature",
"distributionPodPhoto": "Delivery photo",
"distributionReasonClosed": "Outlet closed",
"distributionReasonNoNeed": "No stock need",
"distributionReasonCompetitor": "Competitor offer",
"distributionReasonCredit": "Credit / terms",
"distributionReasonNoDecision": "No decision",
"distributionReasonOther": "Other",
"distributionReturnExpired": "Expired",
"distributionReturnDamaged": "Damaged",
"distributionReturnCommercial": "Commercial return",
"distributionReturnWrong": "Wrong item",
"distributionReturnNearExpiry": "Near expiry",
"distributionClassA": "Class A — weekly",
"distributionClassB": "Class B — every two weeks",
"distributionClassC": "Class C — monthly",
"distributionFrequencyWeekly": "Weekly",
"distributionFrequencyBiweekly": "Biweekly",
"distributionFrequencyMonthly": "Monthly",
"distributionCarriedOver": "Carried over from a missed day",
"distributionNewOutlet": "New field outlet",
"distributionNewOutletHint": "Capture name, location and customer class.",
"distributionOutletType": "Outlet type",
"distributionOutletGrocery": "Grocery",
"distributionOutletSupermarket": "Supermarket",
"distributionOutletHoreca": "HoReCa",
"distributionOutletKiosk": "Kiosk",
"distributionOutletWholesale": "Wholesale",
"distributionOutletOther": "Other",
"distributionNavNeshan": "Neshan",
"distributionNavGoogle": "Google Maps",
"distributionNavWaze": "Waze",
"distributionNavProvider": "Navigation app",
"distributionCarryOver": "Carry missed visits to the next day",
"distributionRequirePodSignature": "Require POD signature",
"distributionRequirePodPhoto": "Require POD photo",
"distributionAutoPromo": "Auto-apply promotions",
"distributionPerfectStore": "Perfect store score",
"distributionJointVisit": "Joint visit with supervisor",
"distributionSupervisor": "Accompanying supervisor",
"distributionScorecard": "Daily scorecard",
"distributionTimeInStore": "Time in store (min)",
"distributionLinesPerInvoice": "Lines per invoice",
"distributionMissedVisits": "Missed visits",
"distributionPartialDelivery": "Partial delivery",
"distributionDeliveryFailed": "Failed delivery",
"distributionOfflinePack": "Download today''s catalog",
"distributionOfflinePackDone": "Today''s catalog saved on this device",
"distributionAssortment": "Must-sell assortment",
"distributionAssortmentsTitle": "Assortment & must-sell",
"distributionPriceList": "Customer price list",
"distributionSetupNeeded": "Initial setup is incomplete. Run the wizard.",
"distributionStartWizard": "Start setup",
"distributionOsa": "On-shelf availability",
"distributionPlanogram": "Planogram compliance",
"distributionShareOfShelf": "Share of shelf %",
"distributionTodayOnlyHint": "Today''s plan and visits only",
"distributionDeliveryQty": "Delivered qty",
"distributionOrderedQty": "Ordered",
"distributionPrintInvoice": "Print invoice",
"distributionFrequentProducts": "This customer''s frequent SKUs",
"distributionCustomerClass": "Customer class",
"distributionVisitFrequency": "Visit frequency",
"distributionOutletName": "Outlet name",
"distributionOutletPhone": "Mobile",
"distributionFailRefused": "Delivery refused",
"distributionFailAddress": "Wrong / missing address",
"distributionFailShortage": "Load shortage",
"distributionMustSellMissing": "Must-sell items are not in the basket yet",
"distributionReasonRequired": "Pick a standard reason",
"distributionPodSignatureRequired": "Recipient signature is required",
"distributionPodPhotoRequired": "Delivery photo is required",
"distributionCapacityOver": "Van is over capacity",
"distributionLotOptional": "Lot (optional)",
"distributionNoExpiry": "No expiry date",
"distributionVisitorHomeHint": "Today’s plan, next stop and selling — without admin tabs",
"distributionAssortmentCreate": "New assortment",
"distributionAssortmentEmpty": "No must-sell assortment yet",
"distributionMustSellPick": "Must-sell products",
"distributionDeliveryLines": "Order lines",
"distributionOsaOk": "On-shelf availability is complete",
"distributionJointVisitHint": "The supervisor is recorded on this visit",
"distributionSetupWizardAgain": "Setup wizard",
"distributionNavOpen": "Navigate with Neshan / maps",
"distributionCycleOffset": "Cycle offset (week/month)",
"distributionCycleOffsetHint": "Biweekly: 0 or 1. Monthly: week of month (0–4).",
"distributionWeightKg": "Max weight (kg)",
"distributionVolumeM3": "Max volume (m³)",
"distributionCapacityUsed": "Capacity used",
"distributionLotVariance": "Lot vs physical stock variance",
"distributionLoadVariance": "Load variance",
"distributionCommissionOnCollection": "Commission on collections (not sales)",
"distributionCommissionCoverage": "Adjust by route coverage",
"distributionDaysOfCover": "Days of cover",
"distributionNearExpiryDays": "Near-expiry horizon (days)",
"distributionFefoHint": "Unload and sell by earliest expiry (FEFO)",
"distributionUnitWeightKg": "Unit weight (kg)",
"distributionUnitVolumeM3": "Unit volume (m³)"
}