feat(i18n): Comprehensive internationalization of frontend components and pages
Translate all hardcoded English strings to use i18n translation keys: Components: - TransactionDetailModal: payment details, refunds, technical info - ConnectOnboarding/ConnectOnboardingEmbed: Stripe Connect setup - StripeApiKeysForm: API key management - DomainPurchase: domain registration flow - Sidebar: navigation labels - Schedule/Sidebar, PendingSidebar: scheduler UI - MasqueradeBanner: masquerade status - Dashboard widgets: metrics, capacity, customers, tickets - Marketing: PricingTable, PluginShowcase, BenefitsSection - ConfirmationModal, ServiceList: common UI Pages: - Staff: invitation flow, role management - Customers: form placeholders - Payments: transactions, payouts, billing - BookingSettings: URL and redirect configuration - TrialExpired: upgrade prompts and features - PlatformSettings, PlatformBusinesses: admin UI - HelpApiDocs: API documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -49,7 +49,8 @@
|
||||
"required": "Required",
|
||||
"optional": "Optional",
|
||||
"masquerade": "Masquerade",
|
||||
"masqueradeAsUser": "Masquerade as User"
|
||||
"masqueradeAsUser": "Masquerade as User",
|
||||
"plan": "Plan"
|
||||
},
|
||||
"auth": {
|
||||
"signIn": "Sign in",
|
||||
@@ -98,7 +99,16 @@
|
||||
"contactSupport": "Contact Support",
|
||||
"plugins": "Plugins",
|
||||
"pluginMarketplace": "Marketplace",
|
||||
"myPlugins": "My Plugins"
|
||||
"myPlugins": "My Plugins",
|
||||
"expandSidebar": "Expand sidebar",
|
||||
"collapseSidebar": "Collapse sidebar",
|
||||
"smoothSchedule": "Smooth Schedule",
|
||||
"sections": {
|
||||
"manage": "Manage",
|
||||
"communicate": "Communicate",
|
||||
"money": "Money",
|
||||
"extend": "Extend"
|
||||
}
|
||||
},
|
||||
"help": {
|
||||
"guide": {
|
||||
@@ -209,7 +219,11 @@
|
||||
"saveYourSecretDescription": "The webhook secret is only returned once when the webhook is created. Store it securely for signature verification.",
|
||||
"endpoint": "Endpoint",
|
||||
"request": "Request",
|
||||
"response": "Response"
|
||||
"response": "Response",
|
||||
"noTestTokensFound": "No Test Tokens Found",
|
||||
"noTestTokensMessage": "Create a <strong>test/sandbox</strong> API token in your Settings to see personalized code examples with your actual token. Make sure to check the \"Sandbox Mode\" option when creating the token. The examples below use placeholder tokens.",
|
||||
"errorLoadingTokens": "Error Loading Tokens",
|
||||
"errorLoadingTokensMessage": "Failed to load API tokens. Please check your connection and try refreshing the page."
|
||||
}
|
||||
},
|
||||
"staff": {
|
||||
@@ -223,7 +237,47 @@
|
||||
"yes": "Yes",
|
||||
"errorLoading": "Error loading staff",
|
||||
"inviteModalTitle": "Invite Staff",
|
||||
"inviteModalDescription": "User invitation flow would go here."
|
||||
"inviteModalDescription": "User invitation flow would go here.",
|
||||
"confirmMakeBookable": "Create a bookable resource for {{name}}?",
|
||||
"emailRequired": "Email is required",
|
||||
"invitationSent": "Invitation sent successfully!",
|
||||
"invitationFailed": "Failed to send invitation",
|
||||
"confirmCancelInvitation": "Cancel invitation to {{email}}?",
|
||||
"cancelFailed": "Failed to cancel invitation",
|
||||
"invitationResent": "Invitation resent successfully!",
|
||||
"resendFailed": "Failed to resend invitation",
|
||||
"confirmToggleActive": "Are you sure you want to {{action}} {{name}}?",
|
||||
"toggleFailed": "Failed to {{action}} staff member",
|
||||
"settingsSaved": "Settings saved successfully",
|
||||
"saveFailed": "Failed to save settings",
|
||||
"pendingInvitations": "Pending Invitations",
|
||||
"expires": "Expires",
|
||||
"resendInvitation": "Resend invitation",
|
||||
"cancelInvitation": "Cancel invitation",
|
||||
"noStaffFound": "No staff members found",
|
||||
"inviteFirstStaff": "Invite your first team member to get started",
|
||||
"inactiveStaff": "Inactive Staff",
|
||||
"reactivate": "Reactivate",
|
||||
"inviteDescription": "Enter the email address of the person you'd like to invite. They'll receive an email with instructions to join your team.",
|
||||
"emailAddress": "Email Address",
|
||||
"emailPlaceholder": "colleague@example.com",
|
||||
"roleLabel": "Role",
|
||||
"roleStaff": "Staff Member",
|
||||
"roleManager": "Manager",
|
||||
"managerRoleHint": "Managers can manage staff, resources, and view reports",
|
||||
"staffRoleHint": "Staff members can manage their own schedule and appointments",
|
||||
"makeBookableHint": "Create a bookable resource so customers can schedule appointments with this person",
|
||||
"resourceName": "Display Name (optional)",
|
||||
"resourceNamePlaceholder": "Defaults to person's name",
|
||||
"sendInvitation": "Send Invitation",
|
||||
"editStaff": "Edit Staff Member",
|
||||
"ownerFullAccess": "Owners have full access to all features and settings.",
|
||||
"dangerZone": "Danger Zone",
|
||||
"deactivateAccount": "Deactivate Account",
|
||||
"reactivateAccount": "Reactivate Account",
|
||||
"deactivateHint": "Prevent this user from logging in while keeping their data",
|
||||
"reactivateHint": "Allow this user to log in again",
|
||||
"deactivate": "Deactivate"
|
||||
},
|
||||
"tickets": {
|
||||
"title": "Support Tickets",
|
||||
@@ -365,7 +419,17 @@
|
||||
"totalRevenue": "Total Revenue",
|
||||
"totalAppointments": "Total Appointments",
|
||||
"newCustomers": "New Customers",
|
||||
"pendingPayments": "Pending Payments"
|
||||
"pendingPayments": "Pending Payments",
|
||||
"noResourcesConfigured": "No resources configured",
|
||||
"noRecentActivity": "No recent activity",
|
||||
"noOpenTickets": "No open tickets",
|
||||
"totalCustomers": "Total Customers",
|
||||
"noShowRate": "No-Show Rate",
|
||||
"thisMonth": "this month",
|
||||
"week": "Week",
|
||||
"month": "Month",
|
||||
"weekLabel": "Week:",
|
||||
"monthLabel": "Month:"
|
||||
},
|
||||
"scheduler": {
|
||||
"title": "Scheduler",
|
||||
@@ -391,7 +455,16 @@
|
||||
"day": "Day",
|
||||
"timeline": "Timeline",
|
||||
"agenda": "Agenda",
|
||||
"allResources": "All Resources"
|
||||
"allResources": "All Resources",
|
||||
"loadingAppointments": "Loading appointments...",
|
||||
"noAppointmentsScheduled": "No appointments scheduled for this period",
|
||||
"resources": "Resources",
|
||||
"resource": "Resource",
|
||||
"lanes": "lanes",
|
||||
"pendingRequests": "Pending Requests",
|
||||
"noPendingRequests": "No pending requests",
|
||||
"dropToArchive": "Drop here to archive",
|
||||
"min": "min"
|
||||
},
|
||||
"customers": {
|
||||
"title": "Customers",
|
||||
@@ -412,6 +485,9 @@
|
||||
"tags": "Tags",
|
||||
"tagsPlaceholder": "e.g. VIP, Referral",
|
||||
"tagsCommaSeparated": "Tags (comma separated)",
|
||||
"namePlaceholder": "e.g. John Doe",
|
||||
"emailPlaceholder": "e.g. john@example.com",
|
||||
"phonePlaceholder": "e.g. (555) 123-4567",
|
||||
"appointmentHistory": "Appointment History",
|
||||
"noAppointments": "No appointments yet",
|
||||
"totalSpent": "Total Spent",
|
||||
@@ -481,10 +557,16 @@
|
||||
"duration": "Duration",
|
||||
"price": "Price",
|
||||
"category": "Category",
|
||||
"active": "Active"
|
||||
"active": "Active",
|
||||
"loadingServices": "Loading services...",
|
||||
"noServicesAvailable": "No services available",
|
||||
"availableServices": "Available Services",
|
||||
"bookNow": "Book Now"
|
||||
},
|
||||
"payments": {
|
||||
"title": "Payments",
|
||||
"paymentsAndAnalytics": "Payments & Analytics",
|
||||
"managePaymentsDescription": "Manage payments and view transaction analytics",
|
||||
"transactions": "Transactions",
|
||||
"invoices": "Invoices",
|
||||
"amount": "Amount",
|
||||
@@ -496,11 +578,194 @@
|
||||
"refunded": "Refunded",
|
||||
"pending": "Pending",
|
||||
"viewDetails": "View Details",
|
||||
"view": "View",
|
||||
"issueRefund": "Issue Refund",
|
||||
"sendReminder": "Send Reminder",
|
||||
"paymentSettings": "Payment Settings",
|
||||
"stripeConnect": "Stripe Connect",
|
||||
"apiKeys": "API Keys"
|
||||
"apiKeys": "API Keys",
|
||||
"transactionDetails": "Transaction Details",
|
||||
"failedToLoadTransaction": "Failed to load transaction details",
|
||||
"partialRefund": "Partial refund",
|
||||
"fullRefund": "Full refund",
|
||||
"refundAmount": "Refund Amount",
|
||||
"refundReason": "Refund Reason",
|
||||
"requestedByCustomer": "Requested by customer",
|
||||
"duplicate": "Duplicate charge",
|
||||
"fraudulent": "Fraudulent",
|
||||
"productNotReceived": "Product not received",
|
||||
"productUnacceptable": "Product unacceptable",
|
||||
"other": "Other",
|
||||
"processRefund": "Process Refund",
|
||||
"processing": "Processing...",
|
||||
"grossAmount": "Gross Amount",
|
||||
"platformFee": "Platform Fee",
|
||||
"netAmount": "Net Amount",
|
||||
"lastUpdated": "Last Updated",
|
||||
"paymentIntent": "Payment Intent",
|
||||
"chargeId": "Charge ID",
|
||||
"transactionId": "Transaction ID",
|
||||
"currency": "Currency",
|
||||
"customer": "Customer",
|
||||
"unknown": "Unknown",
|
||||
"paymentMethod": "Payment Method",
|
||||
"refundHistory": "Refund History",
|
||||
"amountBreakdown": "Amount Breakdown",
|
||||
"description": "Description",
|
||||
"timeline": "Timeline",
|
||||
"created": "Created",
|
||||
"technicalDetails": "Technical Details",
|
||||
"expires": "Expires",
|
||||
"enterValidRefundAmount": "Please enter a valid refund amount",
|
||||
"amountExceedsRefundable": "Amount exceeds refundable amount (${{max}})",
|
||||
"failedToProcessRefund": "Failed to process refund",
|
||||
"fullRefundAmount": "Full refund (${{amount}})",
|
||||
"refundAmountMax": "Refund Amount (max ${{max}})",
|
||||
"noReasonProvided": "No reason provided",
|
||||
"noRefunds": "No refunds issued",
|
||||
"refundedAmount": "Refunded Amount",
|
||||
"remainingAmount": "Remaining Amount",
|
||||
"cancelRefund": "Cancel",
|
||||
"stripeConnected": "Stripe Connected",
|
||||
"stripeConnectedDesc": "Your Stripe account is connected and ready to accept payments.",
|
||||
"accountDetails": "Account Details",
|
||||
"accountType": "Account Type",
|
||||
"standardConnect": "Standard Connect",
|
||||
"expressConnect": "Express Connect",
|
||||
"customConnect": "Custom Connect",
|
||||
"connect": "Connect",
|
||||
"charges": "Charges",
|
||||
"payouts": "Payouts",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"completeOnboarding": "Complete Onboarding",
|
||||
"onboardingIncomplete": "Your Stripe Connect account setup is incomplete. Click below to continue the onboarding process.",
|
||||
"continueOnboarding": "Continue Onboarding",
|
||||
"connectWithStripe": "Connect with Stripe",
|
||||
"tierPaymentDescription": "As a {{tier}} tier business, you'll use Stripe Connect to accept payments. This provides a seamless payment experience for your customers while the platform handles payment processing.",
|
||||
"securePaymentProcessing": "Secure payment processing",
|
||||
"automaticPayouts": "Automatic payouts to your bank account",
|
||||
"pciCompliance": "PCI compliance handled for you",
|
||||
"failedToStartOnboarding": "Failed to start onboarding",
|
||||
"failedToRefreshLink": "Failed to refresh onboarding link",
|
||||
"openStripeDashboard": "Open Stripe Dashboard",
|
||||
"onboardingComplete": "Onboarding Complete!",
|
||||
"stripeSetupComplete": "Your Stripe account has been set up. You can now accept payments.",
|
||||
"setupFailed": "Setup Failed",
|
||||
"tryAgain": "Try Again",
|
||||
"setUpPayments": "Set Up Payments",
|
||||
"tierPaymentDescriptionWithOnboarding": "As a {{tier}} tier business, you'll use Stripe Connect to accept payments. Complete the onboarding process to start accepting payments from your customers.",
|
||||
"startPaymentSetup": "Start Payment Setup",
|
||||
"initializingPaymentSetup": "Initializing payment setup...",
|
||||
"completeAccountSetup": "Complete Your Account Setup",
|
||||
"fillOutInfoForPayment": "Fill out the information below to finish setting up your payment account. Your information is securely handled by Stripe.",
|
||||
"failedToInitializePayment": "Failed to initialize payment setup",
|
||||
"failedToLoadPaymentComponent": "Failed to load payment component",
|
||||
"accountId": "Account ID",
|
||||
"keysAreValid": "Keys are valid!",
|
||||
"connectedTo": "Connected to",
|
||||
"notConfigured": "Not configured",
|
||||
"lastValidated": "Last Validated",
|
||||
"searchResults": "Search Results",
|
||||
"orderSummary": "Order Summary",
|
||||
"registrationPeriod": "Registration Period",
|
||||
"registrationFailed": "Registration failed. Please try again.",
|
||||
"loadingPaymentForm": "Loading payment form...",
|
||||
"settingUpPayment": "Setting up payment...",
|
||||
"exportData": "Export Data",
|
||||
"overview": "Overview",
|
||||
"settings": "Settings",
|
||||
"paymentSetupRequired": "Payment Setup Required",
|
||||
"paymentSetupRequiredDesc": "Complete your payment setup in the Settings tab to start accepting payments and see analytics.",
|
||||
"goToSettings": "Go to Settings",
|
||||
"totalRevenue": "Total Revenue",
|
||||
"transactionsCount": "transactions",
|
||||
"availableBalance": "Available Balance",
|
||||
"successRate": "Success Rate",
|
||||
"successful": "successful",
|
||||
"avgTransaction": "Avg Transaction",
|
||||
"platformFees": "Platform fees:",
|
||||
"recentTransactions": "Recent Transactions",
|
||||
"viewAll": "View All",
|
||||
"fee": "Fee:",
|
||||
"noTransactionsYet": "No transactions yet",
|
||||
"to": "to",
|
||||
"allStatuses": "All Statuses",
|
||||
"succeeded": "Succeeded",
|
||||
"failed": "Failed",
|
||||
"allTypes": "All Types",
|
||||
"payment": "Payment",
|
||||
"refund": "Refund",
|
||||
"refresh": "Refresh",
|
||||
"transaction": "Transaction",
|
||||
"net": "Net",
|
||||
"action": "Action",
|
||||
"noTransactionsFound": "No transactions found",
|
||||
"showing": "Showing",
|
||||
"of": "of",
|
||||
"page": "Page",
|
||||
"availableForPayout": "Available for Payout",
|
||||
"payoutHistory": "Payout History",
|
||||
"payoutId": "Payout ID",
|
||||
"arrivalDate": "Arrival Date",
|
||||
"noPayoutsYet": "No payouts yet",
|
||||
"exportTransactions": "Export Transactions",
|
||||
"exportFormat": "Export Format",
|
||||
"csv": "CSV",
|
||||
"excel": "Excel",
|
||||
"pdf": "PDF",
|
||||
"quickbooks": "QuickBooks",
|
||||
"dateRangeOptional": "Date Range (Optional)",
|
||||
"exporting": "Exporting...",
|
||||
"export": "Export",
|
||||
"billing": "Billing",
|
||||
"billingDescription": "Manage your payment methods and view invoice history.",
|
||||
"paymentMethods": "Payment Methods",
|
||||
"addCard": "Add Card",
|
||||
"endingIn": "ending in",
|
||||
"default": "Default",
|
||||
"setAsDefault": "Set as Default",
|
||||
"noPaymentMethodsOnFile": "No payment methods on file.",
|
||||
"invoiceHistory": "Invoice History",
|
||||
"noInvoicesYet": "No invoices yet.",
|
||||
"addNewCard": "Add New Card",
|
||||
"cardNumber": "Card Number",
|
||||
"cardholderName": "Cardholder Name",
|
||||
"expiry": "Expiry",
|
||||
"cvv": "CVV",
|
||||
"simulatedFormNote": "This is a simulated form. No real card data is required.",
|
||||
"accessDeniedOrUserNotFound": "Access Denied or User not found.",
|
||||
"confirmDeletePaymentMethod": "Are you sure you want to delete this payment method?",
|
||||
"stripeApiKeys": {
|
||||
"configured": "Stripe Keys Configured",
|
||||
"testMode": "Test Mode",
|
||||
"liveMode": "Live Mode",
|
||||
"publishableKey": "Publishable Key",
|
||||
"secretKey": "Secret Key",
|
||||
"account": "Account",
|
||||
"lastValidated": "Last Validated",
|
||||
"testKeysWarning": "You are using <strong>test keys</strong>. Payments will not be processed for real. Switch to live keys when ready to accept real payments.",
|
||||
"revalidate": "Re-validate",
|
||||
"remove": "Remove",
|
||||
"deprecated": "API Keys Deprecated",
|
||||
"deprecatedMessage": "Your API keys have been deprecated because you upgraded to a paid tier. Please complete Stripe Connect onboarding to accept payments.",
|
||||
"updateApiKeys": "Update API Keys",
|
||||
"addApiKeys": "Add Stripe API Keys",
|
||||
"enterKeysDescription": "Enter your Stripe API keys to enable payment collection. You can find these in your",
|
||||
"stripeDashboard": "Stripe Dashboard",
|
||||
"publishableKeyLabel": "Publishable Key",
|
||||
"secretKeyLabel": "Secret Key",
|
||||
"keysAreValid": "Keys are valid!",
|
||||
"connectedTo": "Connected to: {{accountName}}",
|
||||
"testKeysNote": "These are test keys. No real payments will be processed.",
|
||||
"validate": "Validate",
|
||||
"saveKeys": "Save Keys",
|
||||
"removeApiKeys": "Remove API Keys?",
|
||||
"removeApiKeysMessage": "Are you sure you want to remove your Stripe API keys? You will not be able to accept payments until you add them again.",
|
||||
"cancel": "Cancel",
|
||||
"validationFailed": "Validation failed",
|
||||
"failedToSaveKeys": "Failed to save keys"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
@@ -539,6 +804,43 @@
|
||||
"clientSecret": "Client Secret",
|
||||
"paidTierOnly": "Custom OAuth credentials are only available for paid tiers"
|
||||
},
|
||||
"domain": {
|
||||
"details": "Details",
|
||||
"searchPlaceholder": "Enter domain name or keyword...",
|
||||
"premium": "Premium",
|
||||
"select": "Select",
|
||||
"unavailable": "Unavailable",
|
||||
"yourRegisteredDomains": "Your Registered Domains",
|
||||
"expires": "Expires",
|
||||
"change": "Change",
|
||||
"year": "year",
|
||||
"years": "years",
|
||||
"whoisPrivacy": "WHOIS Privacy Protection",
|
||||
"whoisPrivacyDesc": "Hide your personal information from public WHOIS lookups",
|
||||
"autoRenewal": "Auto-Renewal",
|
||||
"autoRenewalDesc": "Automatically renew this domain before it expires",
|
||||
"autoConfigure": "Auto-configure as Custom Domain",
|
||||
"autoConfigureDesc": "Automatically set up this domain for your business",
|
||||
"registrantInfo": "Registrant Information",
|
||||
"firstName": "First Name",
|
||||
"lastName": "Last Name",
|
||||
"stateProvince": "State/Province",
|
||||
"zipPostalCode": "ZIP/Postal Code",
|
||||
"country": "Country",
|
||||
"countries": {
|
||||
"us": "United States",
|
||||
"ca": "Canada",
|
||||
"gb": "United Kingdom",
|
||||
"au": "Australia",
|
||||
"de": "Germany",
|
||||
"fr": "France"
|
||||
},
|
||||
"continue": "Continue",
|
||||
"domain": "Domain",
|
||||
"total": "Total",
|
||||
"registrant": "Registrant",
|
||||
"completePurchase": "Complete Purchase"
|
||||
},
|
||||
"payments": "Payments",
|
||||
"acceptPayments": "Accept Payments",
|
||||
"acceptPaymentsDescription": "Enable payment acceptance from customers for appointments and services.",
|
||||
@@ -547,6 +849,25 @@
|
||||
"quota": {
|
||||
"title": "Quota Management",
|
||||
"description": "Usage limits, archiving"
|
||||
},
|
||||
"booking": {
|
||||
"title": "Booking",
|
||||
"description": "Configure your booking page URL and customer redirect settings",
|
||||
"yourBookingUrl": "Your Booking URL",
|
||||
"shareWithCustomers": "Share this URL with your customers so they can book appointments with you.",
|
||||
"copyToClipboard": "Copy to clipboard",
|
||||
"openBookingPage": "Open booking page",
|
||||
"customDomainPrompt": "Want to use your own domain? Set up a",
|
||||
"customDomain": "custom domain",
|
||||
"returnUrl": "Return URL",
|
||||
"returnUrlDescription": "After a customer completes a booking, redirect them to this URL (e.g., a thank you page on your website).",
|
||||
"returnUrlPlaceholder": "https://yourbusiness.com/thank-you",
|
||||
"save": "Save",
|
||||
"saving": "Saving...",
|
||||
"leaveEmpty": "Leave empty to keep customers on the booking confirmation page.",
|
||||
"copiedToClipboard": "Copied to clipboard",
|
||||
"failedToSaveReturnUrl": "Failed to save return URL",
|
||||
"onlyOwnerCanAccess": "Only the business owner can access these settings."
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
@@ -584,9 +905,15 @@
|
||||
"priority": "Priority",
|
||||
"businessManagement": "Business Management",
|
||||
"userManagement": "User Management",
|
||||
"masquerade": "Masquerade",
|
||||
"masqueradeAs": "Masquerade as",
|
||||
"exitMasquerade": "Exit Masquerade",
|
||||
"masquerade": {
|
||||
"label": "Masquerade",
|
||||
"masqueradeAs": "Masquerade as",
|
||||
"exitMasquerade": "Exit Masquerade",
|
||||
"masqueradingAs": "Masquerading as",
|
||||
"loggedInAs": "Logged in as {{name}}",
|
||||
"returnTo": "Return to {{name}}",
|
||||
"stopMasquerading": "Stop Masquerading"
|
||||
},
|
||||
"businesses": "Businesses",
|
||||
"businessesDescription": "Manage tenants, plans, and access.",
|
||||
"addNewTenant": "Add New Tenant",
|
||||
@@ -609,6 +936,129 @@
|
||||
"confirmVerifyEmailMessage": "Are you sure you want to manually verify this user's email address?",
|
||||
"verifyEmailNote": "This will mark their email as verified and allow them to access all features that require email verification.",
|
||||
"noUsersFound": "No users found matching your filters.",
|
||||
"deleteTenant": "Delete Tenant",
|
||||
"confirmDeleteTenantMessage": "Are you sure you want to permanently delete this tenant? This action cannot be undone.",
|
||||
"deleteTenantWarning": "This will permanently delete all tenant data including users, appointments, resources, and settings.",
|
||||
"noBusinesses": "No businesses found.",
|
||||
"noBusinessesFound": "No businesses match your search.",
|
||||
"tier": "Tier",
|
||||
"owner": "Owner",
|
||||
"inviteTenant": "Invite Tenant",
|
||||
"inactiveBusinesses": "Inactive Businesses ({{count}})",
|
||||
"tierTenantOwner": "tenant owner",
|
||||
"staffTitle": "Platform Staff",
|
||||
"staffDescription": "Manage platform managers and support staff",
|
||||
"addStaffMember": "Add Staff Member",
|
||||
"searchStaffPlaceholder": "Search staff by name, email, or username...",
|
||||
"totalStaff": "Total Staff",
|
||||
"platformManagers": "Platform Managers",
|
||||
"supportStaff": "Support Staff",
|
||||
"staffMember": "Staff Member",
|
||||
"lastLogin": "Last Login",
|
||||
"permissionPluginApprover": "Plugin Approver",
|
||||
"permissionUrlWhitelister": "URL Whitelister",
|
||||
"noSpecialPermissions": "No special permissions",
|
||||
"noStaffFound": "No staff members found",
|
||||
"adjustSearchCriteria": "Try adjusting your search criteria",
|
||||
"addFirstStaffMember": "Add your first platform staff member to get started",
|
||||
"errorLoadingStaff": "Failed to load platform staff",
|
||||
"checkEmails": "Check for new emails",
|
||||
"checkEmailsButton": "Check Emails",
|
||||
"editPlatformUser": "Edit Platform User",
|
||||
"basicInformation": "Basic Information",
|
||||
"accountDetails": "Account Details",
|
||||
"roleAccess": "Role & Access",
|
||||
"platformRole": "Platform Role",
|
||||
"roleDescriptionManagerVsSupport": "Platform Managers have full administrative access. Support staff have limited access.",
|
||||
"noPermissionChangeRole": "You do not have permission to change this user's role.",
|
||||
"specialPermissions": "Special Permissions",
|
||||
"canApprovePlugins": "Can Approve Plugins",
|
||||
"permissionApprovePluginsDesc": "Allow this user to review and approve community plugins for the marketplace",
|
||||
"canWhitelistUrls": "Can Whitelist URLs",
|
||||
"permissionWhitelistUrlsDesc": "Allow this user to whitelist external URLs for plugin API calls (per-user and platform-wide)",
|
||||
"noSpecialPermissionsToGrant": "You don't have any special permissions to grant.",
|
||||
"resetPassword": "Reset Password (Optional)",
|
||||
"accountActive": "Account Active",
|
||||
"accountInactive": "Account Inactive",
|
||||
"userCanLogin": "User can log in and access the platform",
|
||||
"userCannotLogin": "User cannot log in or access the platform",
|
||||
"errorUpdateUser": "Failed to update user. Please try again.",
|
||||
"createNewBusiness": "Create New Business",
|
||||
"businessDetails": "Business Details",
|
||||
"placeholderBusinessName": "My Awesome Business",
|
||||
"placeholderSubdomain": "mybusiness",
|
||||
"subdomainRules": "Only lowercase letters, numbers, and hyphens. Must start with a letter.",
|
||||
"contactEmail": "Contact Email",
|
||||
"placeholderContactEmail": "contact@business.com",
|
||||
"placeholderPhone": "+1 (555) 123-4567",
|
||||
"activeStatus": "Active Status",
|
||||
"createBusinessAsActive": "Create business as active",
|
||||
"subscriptionTier": "Subscription Tier",
|
||||
"tierFreeLabel": "Free Trial",
|
||||
"tierStarterLabel": "Starter",
|
||||
"tierProfessionalLabel": "Professional",
|
||||
"tierEnterpriseLabel": "Enterprise",
|
||||
"maxUsers": "Max Users",
|
||||
"maxResources": "Max Resources",
|
||||
"platformPermissions": "Platform Permissions",
|
||||
"manageOAuthCredentials": "Manage OAuth Credentials",
|
||||
"permissionOAuthDesc": "Allow this business to configure their own OAuth app credentials",
|
||||
"createOwnerAccount": "Create Owner Account",
|
||||
"ownerEmail": "Owner Email",
|
||||
"placeholderOwnerEmail": "owner@business.com",
|
||||
"ownerName": "Owner Name",
|
||||
"placeholderOwnerName": "John Doe",
|
||||
"canCreateOwnerLater": "You can create an owner account later or invite one via email.",
|
||||
"createBusinessButton": "Create Business",
|
||||
"errorBusinessNameRequired": "Business name is required",
|
||||
"errorSubdomainRequired": "Subdomain is required",
|
||||
"errorOwnerEmailRequired": "Owner email is required",
|
||||
"errorOwnerNameRequired": "Owner name is required",
|
||||
"errorOwnerPasswordRequired": "Owner password is required",
|
||||
"inviteNewTenant": "Invite New Tenant",
|
||||
"inviteNewTenantDescription": "Send an invitation to create a new business",
|
||||
"suggestedBusinessName": "Suggested Business Name (Optional)",
|
||||
"ownerCanChangeBusinessName": "Owner can change this during onboarding",
|
||||
"tierDefaultsFromSettings": "Tier defaults are loaded from platform subscription settings",
|
||||
"overrideTierLimits": "Override Tier Limits",
|
||||
"customizeLimitsDesc": "Customize limits and permissions for this tenant",
|
||||
"limitsConfiguration": "Limits Configuration",
|
||||
"useMinusOneUnlimited": "Use -1 for unlimited",
|
||||
"limitsControlDescription": "Use -1 for unlimited. These limits control what this business can create.",
|
||||
"paymentsRevenue": "Payments & Revenue",
|
||||
"onlinePayments": "Online Payments",
|
||||
"communication": "Communication",
|
||||
"smsReminders": "SMS Reminders",
|
||||
"maskedCalling": "Masked Calling",
|
||||
"customization": "Customization",
|
||||
"customDomains": "Custom Domains",
|
||||
"whiteLabelling": "White Labelling",
|
||||
"pluginsAutomation": "Plugins & Automation",
|
||||
"usePlugins": "Use Plugins",
|
||||
"scheduledTasks": "Scheduled Tasks",
|
||||
"createPlugins": "Create Plugins",
|
||||
"advancedFeatures": "Advanced Features",
|
||||
"apiAccess": "API Access",
|
||||
"webhooks": "Webhooks",
|
||||
"calendarSync": "Calendar Sync",
|
||||
"dataExport": "Data Export",
|
||||
"videoConferencing": "Video Conferencing",
|
||||
"enterprise": "Enterprise",
|
||||
"manageOAuth": "Manage OAuth",
|
||||
"require2FA": "Require 2FA",
|
||||
"personalMessage": "Personal Message (Optional)",
|
||||
"personalMessagePlaceholder": "Add a personal note to the invitation email...",
|
||||
"sendInvitationButton": "Send Invitation",
|
||||
"invitationSentSuccess": "Invitation sent successfully!",
|
||||
"editBusiness": "Edit Business: {{name}}",
|
||||
"inactiveBusinessesCannotAccess": "Inactive businesses cannot be accessed",
|
||||
"resetToTierDefaults": "Reset to tier defaults",
|
||||
"changingTierUpdatesDefaults": "Changing tier will auto-update limits and permissions to tier defaults",
|
||||
"featuresPermissions": "Features & Permissions",
|
||||
"controlFeaturesDesc": "Control which features are available to this business.",
|
||||
"enablePluginsForTasks": "Enable \"Use Plugins\" to allow Scheduled Tasks and Create Plugins",
|
||||
"emailAddressesTitle": "Platform Email Addresses",
|
||||
"emailAddressesDescription": "Manage platform-wide email addresses hosted on mail.talova.net. These addresses are used for platform-level support and are automatically synced to the mail server.",
|
||||
"roles": {
|
||||
"superuser": "Superuser",
|
||||
"platformManager": "Platform Manager",
|
||||
@@ -627,7 +1077,32 @@
|
||||
"oauth": "OAuth Providers",
|
||||
"payments": "Payments",
|
||||
"email": "Email",
|
||||
"branding": "Branding"
|
||||
"branding": "Branding",
|
||||
"mailServer": "Mail Server",
|
||||
"emailDomain": "Email Domain",
|
||||
"platformInfo": "Platform Information",
|
||||
"stripeConfigStatus": "Stripe Configuration Status",
|
||||
"failedToLoadSettings": "Failed to load settings",
|
||||
"validation": "Validation",
|
||||
"accountId": "Account ID",
|
||||
"secretKey": "Secret Key",
|
||||
"publishableKey": "Publishable Key",
|
||||
"webhookSecret": "Webhook Secret",
|
||||
"baseTiers": "Base Tiers",
|
||||
"addOns": "Add-ons",
|
||||
"baseTier": "Base Tier",
|
||||
"addOn": "Add-on",
|
||||
"none": "None",
|
||||
"daysOfFreeTrial": "Days of free trial",
|
||||
"orderOnPricingPage": "Order on pricing page",
|
||||
"allowSmsReminders": "Allow businesses on this tier to send SMS reminders",
|
||||
"enabled": "Enabled",
|
||||
"maskedCalling": "Masked Calling",
|
||||
"allowAnonymousCalls": "Allow anonymous calls between customers and staff",
|
||||
"proxyPhoneNumbers": "Proxy Phone Numbers",
|
||||
"dedicatedPhoneNumbers": "Dedicated phone numbers for masked communication",
|
||||
"defaultCreditSettings": "Default Credit Settings",
|
||||
"autoReloadEnabledByDefault": "Auto-reload enabled by default"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
@@ -664,6 +1139,24 @@
|
||||
"tagline": "Orchestrate your business with precision.",
|
||||
"description": "The all-in-one scheduling platform for businesses of all sizes. Manage resources, staff, and bookings effortlessly.",
|
||||
"copyright": "Smooth Schedule Inc.",
|
||||
"benefits": {
|
||||
"rapidDeployment": {
|
||||
"title": "Rapid Deployment",
|
||||
"description": "Launch your branded booking portal in minutes with our pre-configured industry templates."
|
||||
},
|
||||
"enterpriseSecurity": {
|
||||
"title": "Enterprise Security",
|
||||
"description": "Sleep soundly knowing your data is physically isolated in its own dedicated secure vault."
|
||||
},
|
||||
"highPerformance": {
|
||||
"title": "High Performance",
|
||||
"description": "Built on a modern, edge-cached architecture to ensure instant loading times globally."
|
||||
},
|
||||
"expertSupport": {
|
||||
"title": "Expert Support",
|
||||
"description": "Our team of scheduling experts is available to help you optimize your automation workflows."
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"features": "Features",
|
||||
"pricing": "Pricing",
|
||||
@@ -781,19 +1274,16 @@
|
||||
},
|
||||
"business": {
|
||||
"name": "Business",
|
||||
"description": "For established teams",
|
||||
"price": "79",
|
||||
"annualPrice": "790",
|
||||
"trial": "14-day free trial",
|
||||
"features": [
|
||||
"Unlimited resources",
|
||||
"All Professional features",
|
||||
"Team management",
|
||||
"Advanced analytics",
|
||||
"API access",
|
||||
"Phone support"
|
||||
],
|
||||
"transactionFee": "0.5% + $0.20 per transaction"
|
||||
"description": "Full power of the platform for serious operations.",
|
||||
"features": {
|
||||
"0": "Unlimited Users",
|
||||
"1": "Unlimited Appointments",
|
||||
"2": "Unlimited Automations",
|
||||
"3": "Custom Python Scripts",
|
||||
"4": "Custom Domain (White-Label)",
|
||||
"5": "Dedicated Support",
|
||||
"6": "API Access"
|
||||
}
|
||||
},
|
||||
"enterprise": {
|
||||
"name": "Enterprise",
|
||||
@@ -809,6 +1299,42 @@
|
||||
"On-premise option"
|
||||
],
|
||||
"transactionFee": "Custom transaction fees"
|
||||
},
|
||||
"starter": {
|
||||
"name": "Starter",
|
||||
"description": "Perfect for solo practitioners and small studios.",
|
||||
"cta": "Start Free",
|
||||
"features": {
|
||||
"0": "1 User",
|
||||
"1": "Unlimited Appointments",
|
||||
"2": "1 Active Automation",
|
||||
"3": "Basic Reporting",
|
||||
"4": "Email Support"
|
||||
},
|
||||
"notIncluded": {
|
||||
"0": "Custom Domain",
|
||||
"1": "Python Scripting",
|
||||
"2": "White-Labeling",
|
||||
"3": "Priority Support"
|
||||
}
|
||||
},
|
||||
"pro": {
|
||||
"name": "Pro",
|
||||
"description": "For growing businesses that need automation.",
|
||||
"cta": "Start Trial",
|
||||
"features": {
|
||||
"0": "5 Users",
|
||||
"1": "Unlimited Appointments",
|
||||
"2": "5 Active Automations",
|
||||
"3": "Advanced Reporting",
|
||||
"4": "Priority Email Support",
|
||||
"5": "SMS Reminders"
|
||||
},
|
||||
"notIncluded": {
|
||||
"0": "Custom Domain",
|
||||
"1": "Python Scripting",
|
||||
"2": "White-Labeling"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1027,6 +1553,50 @@
|
||||
"terms": "Terms of Service"
|
||||
},
|
||||
"copyright": "Smooth Schedule Inc. All rights reserved."
|
||||
},
|
||||
"plugins": {
|
||||
"badge": "Limitless Automation",
|
||||
"headline": "Choose from our Marketplace, or build your own.",
|
||||
"subheadline": "Browse hundreds of pre-built plugins to automate your workflows instantly. Need something custom? Developers can write Python scripts to extend the platform endlessly.",
|
||||
"viewToggle": {
|
||||
"marketplace": "Marketplace",
|
||||
"developer": "Developer"
|
||||
},
|
||||
"marketplaceCard": {
|
||||
"author": "by SmoothSchedule Team",
|
||||
"installButton": "Install Plugin",
|
||||
"usedBy": "Used by 1,200+ businesses"
|
||||
},
|
||||
"cta": "Explore the Marketplace",
|
||||
"examples": {
|
||||
"winback": {
|
||||
"title": "Client Win-Back",
|
||||
"description": "Automatically re-engage customers who haven't visited in 60 days.",
|
||||
"stats": {
|
||||
"retention": "+15% Retention",
|
||||
"revenue": "$4k/mo Revenue"
|
||||
},
|
||||
"code": "# Win back lost customers\ndays_inactive = 60\ndiscount = \"20%\"\n\n# Find inactive customers\ninactive = api.get_customers(\n last_visit_lt=days_ago(days_inactive)\n)\n\n# Send personalized offer\nfor customer in inactive:\n api.send_email(\n to=customer.email,\n subject=\"We miss you!\",\n body=f\"Come back for {discount} off!\"\n )"
|
||||
},
|
||||
"noshow": {
|
||||
"title": "No-Show Prevention",
|
||||
"description": "Send SMS reminders 2 hours before appointments to reduce no-shows.",
|
||||
"stats": {
|
||||
"reduction": "-40% No-Shows",
|
||||
"utilization": "Better Utilization"
|
||||
},
|
||||
"code": "# Prevent no-shows\nhours_before = 2\n\n# Find upcoming appointments\nupcoming = api.get_appointments(\n start_time__within=hours(hours_before)\n)\n\n# Send SMS reminder\nfor appt in upcoming:\n api.send_sms(\n to=appt.customer.phone,\n body=f\"Reminder: Appointment in 2h at {appt.time}\"\n )"
|
||||
},
|
||||
"report": {
|
||||
"title": "Daily Reports",
|
||||
"description": "Get a summary of tomorrow's schedule sent to your inbox every evening.",
|
||||
"stats": {
|
||||
"timeSaved": "Save 30min/day",
|
||||
"visibility": "Full Visibility"
|
||||
},
|
||||
"code": "# Daily Manager Report\ntomorrow = date.today() + timedelta(days=1)\n\n# Get schedule stats\nstats = api.get_schedule_stats(date=tomorrow)\nrevenue = api.forecast_revenue(date=tomorrow)\n\n# Email manager\napi.send_email(\n to=\"manager@business.com\",\n subject=f\"Schedule for {tomorrow}\",\n body=f\"Bookings: {stats.count}, Est. Rev: ${revenue}\"\n)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"trial": {
|
||||
@@ -1178,5 +1748,64 @@
|
||||
},
|
||||
"goToDashboard": "Go to Dashboard"
|
||||
}
|
||||
},
|
||||
"trialExpired": {
|
||||
"title": "Your 14-Day Trial Has Expired",
|
||||
"subtitle": "Your trial of the {{plan}} plan ended on {{date}}",
|
||||
"whatHappensNow": "What happens now?",
|
||||
"twoOptions": "You have two options to continue using SmoothSchedule:",
|
||||
"freePlan": "Free Plan",
|
||||
"pricePerMonth": "$0/month",
|
||||
"recommended": "Recommended",
|
||||
"continueWhereYouLeftOff": "Continue where you left off",
|
||||
"moreFeatures": "+ {{count}} more features",
|
||||
"downgradeToFree": "Downgrade to Free",
|
||||
"upgradeNow": "Upgrade Now",
|
||||
"ownerLimitedFunctionality": "Your account has limited functionality until you choose an option.",
|
||||
"nonOwnerContactOwner": "Please contact your business owner to upgrade or downgrade the account.",
|
||||
"businessOwner": "Business Owner:",
|
||||
"supportQuestion": "Questions? Contact our support team at",
|
||||
"supportEmail": "support@smoothschedule.com",
|
||||
"confirmDowngrade": "Are you sure you want to downgrade to the Free plan? You will lose access to premium features immediately.",
|
||||
"features": {
|
||||
"professional": {
|
||||
"unlimitedAppointments": "Unlimited appointments",
|
||||
"onlineBooking": "Online booking portal",
|
||||
"emailNotifications": "Email notifications",
|
||||
"smsReminders": "SMS reminders",
|
||||
"customBranding": "Custom branding",
|
||||
"advancedAnalytics": "Advanced analytics",
|
||||
"paymentProcessing": "Payment processing",
|
||||
"prioritySupport": "Priority support"
|
||||
},
|
||||
"business": {
|
||||
"everythingInProfessional": "Everything in Professional",
|
||||
"multipleLocations": "Multiple locations",
|
||||
"teamManagement": "Team management",
|
||||
"apiAccess": "API access",
|
||||
"customDomain": "Custom domain",
|
||||
"whiteLabel": "White-label options",
|
||||
"accountManager": "Dedicated account manager"
|
||||
},
|
||||
"enterprise": {
|
||||
"everythingInBusiness": "Everything in Business",
|
||||
"unlimitedUsers": "Unlimited users",
|
||||
"customIntegrations": "Custom integrations",
|
||||
"slaGuarantee": "SLA guarantee",
|
||||
"customContracts": "Custom contract terms",
|
||||
"phoneSupport": "24/7 phone support",
|
||||
"onPremise": "On-premise deployment option"
|
||||
},
|
||||
"free": {
|
||||
"upTo50Appointments": "Up to 50 appointments/month",
|
||||
"basicOnlineBooking": "Basic online booking",
|
||||
"emailNotifications": "Email notifications",
|
||||
"smsReminders": "SMS reminders",
|
||||
"customBranding": "Custom branding",
|
||||
"advancedAnalytics": "Advanced analytics",
|
||||
"paymentProcessing": "Payment processing",
|
||||
"prioritySupport": "Priority support"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user