Files
descrybe/apps/web/src/lib/i18n/messages/en.ts
T

5769 lines
374 KiB
TypeScript
Raw Normal View History

import type { MessageDict } from "./types";
/** English (en) UI pack — source of truth for message keys. */
export const en: MessageDict = {
"app.name": "Descrybe",
"app.home": "Descrybe home",
"common.cancel": "Cancel",
"common.save": "Save changes",
"common.saveShort": "Save",
"common.continue": "Continue",
"common.open": "Open",
"common.markDone": "Mark done",
"common.viewAll": "View all",
"common.close": "Close",
"common.askAdmin": "Ask a company admin",
"common.you": "You",
"common.active": "Active",
"common.pending": "Pending",
"common.email": "Email",
"common.password": "Password",
"common.name": "Your name",
"common.viewPricing": "View pricing",
"common.backToSignIn": "Back to sign in",
"common.signingOut": "Signing out…",
"common.signOutAndContinue": "Sign out and continue",
"common.staySignedIn": "Stay signed in",
"a11y.skipToContent": "Skip to content",
"theme.switchToDark": "Switch to dark theme",
"theme.switchToLight": "Switch to light theme",
"header.signOut": "Sign out",
"header.signingOut": "Signing out…",
"status.emDash": "—",
"status.pending": "Pending",
"status.processing": "Processing",
"status.completed": "Completed",
"status.failed": "Failed",
"status.cancelled": "Cancelled",
"nav.section.overview": "Overview",
"nav.section.catalog": "Catalog",
"nav.section.feeds": "Feeds",
"nav.section.stores": "Stores",
"nav.section.processing": "Processing",
"nav.section.marketing": "Marketing",
"nav.section.integrations": "Integrations",
"nav.section.account": "Account",
"nav.section.platform": "Platform",
"nav.dashboard": "Dashboard",
"nav.products": "Products",
"nav.categories": "Categories",
"nav.attributes": "Attributes",
"nav.fields": "Fields",
"nav.feeds": "Feeds",
"nav.exports": "Exports",
"nav.stores": "Stores",
"nav.jobs": "Jobs",
"nav.campaigns": "Campaigns",
"nav.calendar": "Calendar",
"nav.seo": "SEO",
"nav.brand": "Brand",
"nav.reviews": "Reviews",
"nav.ai": "AI",
"nav.email": "Email",
"nav.billing": "Billing",
"nav.settings": "Settings",
"nav.support": "Support",
"nav.admin": "Admin",
"nav.main": "Main navigation",
"nav.sidebar": "App sidebar",
"nav.close": "Close navigation",
"nav.closeMenu": "Close menu",
"nav.open": "Open navigation",
"nav.commandPalette": "Search pages",
"nav.commandPaletteLabel": "Search",
"auth.login.title": "Sign in",
"auth.login.description": "Use your Descrybe email and password.",
"auth.login.submit": "Sign in",
"auth.login.submitting": "Signing in…",
"auth.login.failed": "Login failed",
"auth.login.passwordNotSet": "This account still needs a password. Open your invite link, or ask an admin to re-issue one.",
"auth.login.setPasswordFirstTitle": "Set password first:",
2026-08-17 21:20:45 +02:00
"auth.login.setPasswordFirstBody": "use the invite link from your email. If you need a new link, ask a company admin to re-issue a set-password link to {email}.",
"auth.login.yourEmail": "your email",
"auth.login.platformAdminsReissue": "Platform admins can re-issue from",
"auth.login.adminUsersLink": "Admin → Users",
"auth.login.haveToken": "Have a token? Open accept invite",
"auth.login.noAccount": "No account?",
"auth.login.createCompany": "Create company",
"auth.login.haveInvite": "Have an invite or set-password link?",
"auth.login.acceptInvite": "Accept invite",
"auth.login.forgotPassword": "Forgot password?",
"auth.login.forgotPasswordHelp": "Enter your email on the reset page. If you never set a password, use your invite / set-password link instead.",
"auth.forgot.title": "Forgot password",
"auth.forgot.description": "Enter your account email. If it matches an active account, we will send a reset link.",
"auth.forgot.submit": "Send reset link",
"auth.forgot.submitting": "Sending…",
"auth.forgot.failed": "Could not request a reset",
"auth.forgot.sentTitle": "Check your email",
"auth.forgot.sentBody": "If an account exists for that address, a reset link is on the way. The link expires in one hour.",
"auth.forgot.backToSignIn": "Back to sign in",
"auth.reset.title": "Reset password",
"auth.reset.description": "Choose a new password for your Descrybe account (at least 8 characters).",
"auth.reset.submit": "Save new password",
"auth.reset.submitting": "Saving…",
"auth.reset.failed": "Could not reset password",
"auth.reset.doneTitle": "Password updated",
"auth.reset.doneDescription": "Sign in with your email and new password.",
"auth.reset.goToSignIn": "Go to sign in",
"auth.reset.passwordConfirm": "Confirm password",
"auth.reset.passwordMismatch": "Passwords do not match",
"auth.reset.missingTitle": "Missing reset link",
"auth.reset.missingDescription": "Open the link from your email to choose a new password.",
"auth.reset.requestNewLink": "Request a new reset link",
"auth.reset.tokenMissing": "No reset link was provided. Use the link from your email, or request a new one.",
"auth.reset.tokenInvalid": "This reset link is invalid or expired. Request a new one from the forgot-password page.",
"auth.reset.linkRecognized": "Reset link recognized. Enter a new password below — the secret is not shown on this page.",
"auth.reset.tokenLabel": "Reset token",
"auth.reset.passwordHint": "At least 8 characters. No other complexity rules.",
"auth.register.title": "Create company",
"auth.register.description": "Registers a company and its admin user.",
"auth.register.companyName": "Company name",
"auth.register.submit": "Create account",
"auth.register.submitting": "Creating…",
"auth.register.failed": "Registration failed",
"auth.register.haveAccount": "Already have an account?",
"auth.register.signIn": "Sign in",
"auth.invite.title": "Accept invite",
"auth.invite.setPasswordTitle": "Set password",
"auth.invite.description": "Set your password to join the company. Your admin assigned either Member (day-to-day work) or Admin (team and billing).",
"auth.invite.setPasswordDescription": "Choose a password for your migrated Descrybe account (at least 8 characters).",
"auth.invite.checking": "Checking invite…",
"auth.invite.forEmail": "Invite for {email}.",
"auth.invite.linkRecognized": "Invite link recognized. Enter a password below to continue — the secret is not shown on this page.",
"auth.invite.resetLinkRecognized": "Reset link recognized. Enter a password below to continue — the secret is not shown on this page.",
"auth.invite.tokenLabel": "Invite token",
"auth.invite.resetTokenLabel": "Reset token",
"auth.invite.tokenHelp": "Paste the token from your invite email. It is masked in this field.",
"auth.invite.passwordHint": "At least 8 characters. No other complexity rules.",
"auth.invite.submit": "Accept invite",
"auth.invite.setPasswordSubmit": "Set password",
"auth.invite.accepting": "Accepting…",
"auth.invite.saving": "Saving…",
"auth.invite.verifyFailed": "Could not verify invite",
"auth.invite.verifySetPasswordFailed": "Could not verify set-password link",
"auth.invite.acceptFailed": "Could not accept invite",
"auth.invite.setPasswordFailed": "Could not set password",
"auth.invite.expired": "This invite is invalid or expired. Ask your company admin to send a new invite, then open the new link (or paste the new token below).",
2026-08-17 21:20:45 +02:00
"auth.invite.setPasswordExpired": "This set-password link is invalid or expired. Ask a company admin to re-issue a set-password link to this email, then open the new link (or paste the new token below).",
"auth.invite.emailMismatchDefault": "You're signed in as a different email than this invite.",
2026-08-17 21:20:45 +02:00
"auth.invite.expiredFooter": "Expired link? Ask a company admin to re-issue — there is no self-serve resend API.",
"auth.invite.adminUsersLink": "Admin → Users",
"auth.invite.doneTitle": "You're on the team",
"auth.invite.doneSetPasswordTitle": "Password saved",
"auth.invite.doneDescription": "Your account is ready. Next, open the dashboard to work with feeds and products, or review company settings.",
"auth.invite.doneSetPasswordDescription": "Sign in with your email and new password to open your workspace.",
"auth.invite.openDashboard": "Open dashboard",
"auth.invite.companySettings": "Company settings",
"auth.invite.goToSignIn": "Go to sign in",
"auth.invite.afterSignInNote": "After sign-in you land in your workspace — the greenfield setup tour is skipped.",
"auth.invite.mismatchTitle": "Wrong account for this invite",
"auth.invite.mismatchDescription": "This link is for a different email than the one you're signed in with. Sign out to continue as the invited user, or stay signed in and ask an admin to re-issue the invite.",
"auth.invite.mismatchDetail": "Signed in as {session}, but this invite is for {invite}.",
"auth.invite.mismatchFallback": "Signed-in email does not match this invite.",
"auth.invite.switchAccountTitle": "Switch account:",
"auth.invite.switchAccountBody": "sign out, then finish this form with the invited email{emailSuffix}.",
"auth.invite.reissueTitle": "Re-issue path:",
2026-08-17 21:20:45 +02:00
"auth.invite.reissueBody": "ask a company admin to re-issue a set-password link to this email, or to revoke this invite and send a new one to the email you use to sign in.",
"locale.switcher": "Interface language",
"locale.menu": "Choose interface language",
"locale.label": "Dashboard language",
"locale.help": "Changes labels in navigation and settings. Generated content language is set separately under Company.",
"settings.contentLanguage": "Content Language",
"settings.contentLanguageHelp": "Language used for product titles, descriptions, and other generated content",
"settings.tab.profile": "Profile",
"settings.tab.company": "Company",
"settings.tab.alerts": "Alerts",
"settings.tab.apiKeys": "API keys",
"settings.tab.team": "Team",
"settings.title": "Settings",
"settings.description": "Account, company, API keys, and team.",
"settings.accessDenied": "You don't have permission to open company settings. Ask a company admin for help.",
"settings.loadFailed": "Failed to load settings",
"settings.profileHeading": "Profile",
"settings.personalInfo": "Personal Information",
"settings.personalInfoHelp": "Update your personal details",
"settings.firstName": "First Name",
"settings.firstNamePlaceholder": "Your first name",
"settings.lastName": "Last Name",
"settings.lastNamePlaceholder": "Your last name",
"settings.email": "Email",
"settings.profileUpdated": "Profile updated.",
"settings.profileUpdateFailed": "Could not update profile",
"settings.setPasswordTitle": "Set password",
"settings.setPasswordHelp": "This account still needs a password. Choose one with at least 8 characters.",
"settings.changePasswordTitle": "Change password",
"settings.changePasswordHelp": "Update the password you use to sign in. Other sessions will be signed out.",
"settings.currentPassword": "Current password",
"settings.newPassword": "New password",
"settings.confirmPassword": "Confirm new password",
"settings.passwordHint": "At least 8 characters.",
"settings.setPasswordSubmit": "Set password",
"settings.changePasswordSubmit": "Change password",
"settings.forgotPasswordLink": "Forgot password?",
"settings.passwordTooShort": "Password must be at least 8 characters.",
"settings.passwordMismatch": "New password and confirmation do not match.",
"settings.currentPasswordRequired": "Enter your current password.",
"settings.passwordSet": "Password set.",
"settings.passwordChanged": "Password changed.",
"settings.passwordSetFailed": "Could not set password",
"settings.passwordChangeFailed": "Could not change password",
"settings.walletLabel": "Wallet",
"settings.walletRemainingHint": "remaining",
"settings.role.member": "Member",
"settings.role.admin": "Admin",
2026-08-17 00:39:25 +02:00
"settings.cannotRemoveOwner": "Transfer ownership before removing the company owner.",
"settings.transferFailed": "Could not transfer ownership",
"settings.ownershipTransferred": "{email} is now the company owner.",
"settings.transferOwnershipConfirm": "Make {email} the company owner? They will handle billing for this company.",
"settings.transferOwnership": "Transfer ownership",
"settings.ownerBadge": "Owner",
"settings.role.owner": "Owner",
"settings.teamHeading": "Team Members",
"settings.inviteUser": "Invite user",
"settings.teamAdminOnly": "Only company admins can invite, promote, demote, or remove teammates.",
"settings.shareAcceptLink": "Share accept link",
2026-08-17 00:53:51 +02:00
"settings.shareAcceptLinkHelp": "Copy this one-time link and send it to the invitee (chat, SMS, etc.). They'll set a password (at least 8 characters) and join with the role you chose.",
"settings.acceptLinkLabel": "One-time accept invite link",
"settings.copyLink": "Copy link",
"settings.linkCopied": "Accept link copied.",
"settings.table.email": "Email",
"settings.table.role": "Role",
"settings.table.status": "Status",
"settings.table.joined": "Joined / expires",
"settings.table.actions": "Actions",
"settings.teamForbidden": "You don't have permission to view the team list. Ask a company admin for help.",
"settings.noTeammates": "No teammates yet",
"settings.noTeammatesHelp": "Invite colleagues as Member (products and feeds) or Admin (team and company settings). Pending invites show here until accepted.",
"settings.noTeammatesMemberHelp": "No teammates listed yet. Ask a company admin to send invites.",
"settings.memberActions": "Member actions",
"settings.makeAdmin": "Make admin",
"settings.makeMember": "Make member",
"settings.removeMember": "Remove",
"settings.revokeInvite": "Revoke invite",
"settings.needOneAdmin": "Companies need at least one admin",
"settings.expires": "Expires {date}",
"settings.invalidEmail": "Enter a valid email address.",
2026-08-17 00:53:51 +02:00
"settings.inviteCreatedNoMail": "Invite created for {email} as {role}. Copy the accept link below and share it with them.",
"settings.inviteSent": "Invite created for {email} as {role}. Share the accept link before it expires.",
"settings.inviteFailed": "Could not create invite",
"settings.revokeConfirm": "Revoke this invitation?",
"settings.revoked": "Invitation revoked.",
"settings.revokeFailed": "Could not revoke invite",
"settings.removeConfirm": "Remove {email} from this company?",
"settings.memberRemoved": "{email} removed.",
"settings.removeFailed": "Could not remove user",
"settings.roleChangeConfirm": "{action} {email} to {role}?",
"settings.roleChanged": "{email} is now {role}.",
"settings.roleChangeFailed": "Could not update role",
"settings.promote": "Promote",
"settings.demote": "Demote",
"settings.inviteTitle": "Invite teammate",
2026-08-17 00:53:51 +02:00
"settings.inviteDescription": "Enter their email, then copy the one-time link and share it. They'll set a password (at least 8 characters) and join this company.",
"settings.inviteEmail": "Email",
"settings.inviteEmailPlaceholder": "colleague@example.com",
"settings.inviteRole": "Role",
"settings.inviteRoleHint": "Members manage products and feeds. Admins can also invite teammates and change company settings.",
2026-08-17 00:53:51 +02:00
"settings.sendInvite": "Create invite link",
"settings.companyHeading": "Company Settings",
"settings.activeCompany": "Active company",
"settings.creditsOverview": "Credits overview",
"settings.plan": "Plan",
"settings.used": "Used",
"settings.companyInfo": "Company Information",
"settings.companyInfoHelp": "Update your company details",
"settings.companyName": "Company Name",
"settings.companyNamePlaceholder": "Your company name",
"settings.contentSettings": "Content Settings",
"settings.mergeProducts": "Merge products with the same GTIN",
"settings.emailIntegration": "Email integration",
"settings.aiIntegrations": "AI integrations",
"settings.alertsHeading": "Operator alerts",
"settings.inAppToasts": "In-app toasts",
"settings.emailAlerts": "Email alerts",
"settings.apiKeysHeading": "API Keys",
"settings.createApiKey": "Create API Key",
"settings.createApiKeyShort": "Create API key",
"settings.createApiKeyTitle": "Create API key",
"settings.apiKeyLabel": "API key",
"settings.keyName": "Key name",
"settings.storeKeySafe": "Store it somewhere safe — you cannot view the full secret again.",
"settings.apiKeysIntro": "Create a company API key to call the public /api/v1 endpoints. The full secret is shown only once when you create it — copy it immediately.",
"settings.apiKeysUseWhere": "Send it as Authorization: Bearer <key> (preferred) or X-API-Key.",
"settings.apiKeysDocsLink": "API authentication docs",
"settings.apiKeyOnceWarning": "This is the only time the full secret is shown. Copy it now before you close this dialog.",
"settings.table.name": "Name",
"settings.table.key": "Key",
"settings.table.lastUsed": "Last Used",
"dashboard.demoSandbox": "Demo sandbox",
"dashboard.demoEmptyTitle": "Demo sandbox is empty",
2026-08-17 21:20:45 +02:00
"dashboard.demoEmptyHint": "Demo sandbox is empty — connect a feed to see catalog stats.",
"dashboard.overviewTitle": "Overview",
"dashboard.quickLinks": "Quick links",
"dashboard.whatsNew": "What's new",
"dashboard.startTutorial": "Start tutorial",
"dashboard.resumeTutorial": "Resume tutorial",
"dashboard.restartTutorial": "Restart tutorial",
"dashboard.tourTopics": "Tour topics",
"dashboard.browseTutorialSections": "Browse tutorial sections",
"dashboard.connectFeed": "Connect a feed",
"dashboard.processProducts": "Process products",
"dashboard.openProducts": "Open products",
"dashboard.welcomeTo": "Welcome to {name}",
"dashboard.trialBadge": "Trial",
"dashboard.actions": "Dashboard actions",
"dashboard.emptyPaygHint": "Descrybe brings a catalog in, enriches and processes it, then exports or pushes to stores. Use Getting started below.",
"dashboard.emptyCreditsHint": "Descrybe brings a catalog in, enriches and processes it, then exports or pushes to stores. You have {credits} — start with Getting started below.",
"dashboard.workflowTitle": "Catalog workflow",
"dashboard.recentActivity": "Recent activity",
"dashboard.loadFailed": "Failed to load dashboard",
"dashboard.workspaceFallback": "This workspace",
"dashboard.jobFallback": "Job {id}",
"dashboard.workflow.feeds.connect": "Connect a source",
"dashboard.workflow.feeds.sources": "{count} source",
"dashboard.workflow.feeds.sourcesPlural": "{count} sources",
"dashboard.workflow.products.build": "Build catalog",
"dashboard.workflow.products.count": "{count} in catalog",
"dashboard.workflow.map": "Map",
"dashboard.workflow.map.detail": "Match columns after you add a feed",
"dashboard.workflow.map.ready": "Open Map on a feed",
"dashboard.workflow.sync": "Sync",
"dashboard.workflow.sync.detail": "Pull a sample after mapping",
"dashboard.workflow.sync.ready": "Sync a sample into products",
"dashboard.workflow.process": "Process",
"dashboard.workflow.processActive": "{count} active",
"dashboard.workflow.processWaiting": "{count} waiting",
"dashboard.workflow.processDone": "{count} done",
"dashboard.workflow.processRun": "Run AI jobs",
"dashboard.workflow.export": "Export",
"dashboard.workflow.exportReady": "Templates & download",
"dashboard.workflow.exportMap": "Map then export",
"dashboard.workflowHint": "Catalog in → enrich / process → export or push to stores. Jump to the next step for {name}.",
"dashboard.overviewHint": "Live totals for {name}",
2026-08-17 21:20:45 +02:00
"dashboard.demoEmptyMessage": "Connect a feed here to populate this sandbox, or switch to another company in the header.",
"dashboard.emptyTitle": "Bring a catalog in",
"dashboard.emptyMessage": "Catalog in → enrich / process → export or push to stores. Start with Getting started below (or connect a feed / upload a CSV).",
"dashboard.connectFeedAnyway": "Connect feed anyway",
"dashboard.connectFeedShort": "Connect feed",
"dashboard.uploadCsv": "Upload CSV",
"dashboard.goToBilling": "Go to Billing",
"dashboard.freePlanTitle": "You're on the Free plan",
"dashboard.freePlanMessageWithLimit": "{used} of {max} products used. Feed mapping, basic cleanup, and EU energy labels (EPREL) are included; upgrade for AI titles and descriptions, and more capacity.",
"dashboard.freePlanMessage": "Feed mapping, basic cleanup, and EU energy labels (EPREL) are included; upgrade for AI titles and descriptions, and more capacity.",
"dashboard.outOfCreditsTitle": "You're out of AI credits",
"dashboard.outOfCreditsMessage": "Buy more credits or upgrade your plan to keep processing.",
"dashboard.productLimitTitle": "Product limit reached",
"dashboard.productLimitMessage": "Your {plan} plan allows {max} products ({count} in catalog). Upgrade to process more.",
"dashboard.productLimitMessageFull": "Your {plan} plan product limit is reached. Upgrade to process more.",
"dashboard.comparePlans": "Compare plans",
"dashboard.viewPlans": "View plans",
"dashboard.trialTitle": "Trial · {plan}",
"dashboard.trialMessageDated": "Trial ends {date}. {credits} credits remaining.",
"dashboard.trialMessage": "{credits} credits remaining on your trial.",
"dashboard.lowCreditsTitle": "Credits running low",
"dashboard.lowCreditsMessage": "{remaining} of {total} credits left. Top up or upgrade before jobs stall.",
"dashboard.latestJobs": "Latest processing jobs",
2026-08-16 16:57:36 +02:00
"dashboard.jobsRunning": "{count} job running",
"dashboard.jobsRunningPlural": "{count} jobs running",
"dashboard.activeJobs": "{count} active job",
"dashboard.activeJobsPlural": "{count} active jobs",
"dashboard.noJobsEmpty": "No jobs yet — import products first.",
"dashboard.noJobsReady": "No recent jobs. Start one from Products when you are ready.",
"dashboard.startJob": "Start a job",
"dashboard.quickLinksHint": "Feeds, products, jobs, and export.",
"dashboard.feedsImportMap": "Import and map",
"dashboard.productsBrowse": "Browse and process",
"dashboard.jobsMonitor": "Monitor tasks",
"dashboard.exportsTemplates": "Templates & download",
"activation.title": "Getting started",
"activation.description": "Descrybe brings a catalog in, enriches and processes it, then exports or pushes to stores. Finish the current step, then continue — the demo tour explains screens without changing checklist progress.",
"activation.descriptionShort": "Start with the highlighted step below — one action at a time. Store connect is optional.",
"activation.nextCta": "Do this step",
"activation.valueProp": "Descrybe brings a catalog in, enriches and processes it, then exports or pushes to your stores.",
"activation.alreadyDone": "Already done",
"activation.skipForNow": "Skip for now",
"activation.showAllSteps": "Show all {total} steps",
"activation.showFewerSteps": "Show fewer steps",
"activation.corePathLabel": "In short",
"activation.corePath": "Catalog in → Enrich / process → Export or push to stores",
"activation.storeWizardHint": "Not required for feeds or exports — skip unless you want to push products to a live shop.",
"activation.storeWizardCta": "Open guided store setup",
"activation.focus.map": "Next: open Map on a feed, match columns, then save. Add a feed first if the list is empty.",
"activation.focus.sync": "Next: Sync a sample after mappings are saved. Use Sync on a mapped feed — avoid syncing unmapped sources.",
"activation.focus.dismiss": "Dismiss hint",
"activation.dismiss": "Dismiss checklist",
2026-08-17 21:20:45 +02:00
"hypercare.report.title": "Need help after the move?",
"hypercare.report.message": "See missing or wrong data after the move? Report it so we can fix your workspace.",
"hypercare.report.cta": "Report missing or wrong data",
"hypercare.report.dismiss": "Dismiss",
"hypercare.report.adminTriage": "Open hypercare queue",
2026-08-17 21:20:45 +02:00
"etl.gaps.title": "What still needs setup",
"etl.gaps.message": "Some items weren't copied when we moved your workspace. Nothing is broken — recreate or reconnect as needed.",
"etl.gaps.dismiss": "Dismiss",
"etl.gaps.apiKeys.title": "API keys",
2026-08-17 21:20:45 +02:00
"etl.gaps.apiKeys.body": "Previous API keys weren't copied. Create a new key to restore API access — the secret is shown only once.",
"etl.gaps.apiKeys.cta": "Open API keys",
2026-08-17 21:20:45 +02:00
"etl.gaps.blobs.title": "Uploaded files",
"etl.gaps.blobs.body": "File names may appear even when the file itself wasn't copied. Re-upload CSVs if you need the originals.",
"etl.gaps.blobs.countHint": "{count} files are listed without their contents (they weren't copied).",
"etl.gaps.blobs.cta": "Open Files",
"etl.gaps.jobs.title": "Processing history",
2026-08-17 21:20:45 +02:00
"etl.gaps.jobs.body": "Earlier job history wasn't imported. New jobs you start here will appear normally.",
"etl.gaps.jobs.emptyHint": "Processing history wasn't imported — an empty list is expected.",
"etl.gaps.jobs.migratedHint": "{count} jobs were imported from the previous workspace.",
"etl.gaps.jobs.cta": "Open Processing",
"etl.gaps.woo.title": "Store credentials",
2026-08-17 21:20:45 +02:00
"etl.gaps.woo.body": "WooCommerce and Shopify passwords may need to be re-entered after the move — reconnect your store; sync is not broken.",
"etl.gaps.woo.cta": "Open Stores",
"etl.gaps.settings.title": "Company settings",
"etl.gaps.settings.body": "Only language and merge-products settings were imported. Re-check other company preferences in Settings.",
"etl.gaps.settings.cta": "Open company settings",
"activation.progress": "{done} of {total} complete",
"activation.stepsLabel": "Activation steps",
"activation.pausedTitle": "Getting started is paused",
"activation.pausedBody": "Resume anytime — from product fields through export. Store connect stays optional.",
"activation.resume": "Resume checklist",
"activation.step.enable-fields.title": "Turn on product fields",
"activation.step.enable-fields.body": "Choose which standard product columns Descrybe should map and clean.",
"activation.step.connect-source.title": "Add a product feed",
"activation.step.connect-source.body": "Add a CSV or XML catalog feed so products can enter Descrybe. Connecting a live store is a later optional step.",
"activation.step.map.title": "Map feed columns",
"activation.step.map.body": "On Feeds, open Map on your feed, match supplier columns to Descrybe fields, then save.",
"activation.step.sync-sample.title": "Sync a sample",
"activation.step.sync-sample.body": "On Feeds, sync a small sample from a mapped feed to verify the mapping before a full run.",
"activation.step.process.title": "Process products",
"activation.step.process.body": "Open unprocessed products and run processing to generate cleaned catalog content.",
"activation.step.store-connect.title": "Connect a store",
"activation.step.store-connect.body": "Optional. Link WooCommerce or Shopify to push products to your shop. Skip if you only use feeds and exports.",
"activation.step.export.title": "Create an export",
"activation.step.export.body": "Create an export feed to download or publish cleaned products as XML or CSV.",
"stats.products": "Imported products",
"stats.categories": "Categories",
"stats.attributes": "Attributes",
"stats.feeds": "Feeds",
"stats.credits": "Credits",
"stats.openCatalog": "Open catalog",
"stats.productsHint": "Catalog {processed} · queue {unprocessed} (separate counts)",
"stats.catalogTree": "Catalog tree",
"stats.attributeLibrary": "Attribute library",
"stats.importSources": "Import sources",
"stats.payAsYouGo": "Pay as you go",
"stats.walletBilling": "Wallet · Billing",
"stats.enterpriseBilling": "Enterprise · Billing",
"stats.usedBilling": "{used} used · Billing",
"processing.jobStatus.processing": "Processing",
"processing.jobStatus.completed": "Completed",
"processing.jobStatus.failed": "Failed",
"processing.jobStatus.cancelled": "Cancelled",
"processing.jobStatus.pending": "Pending",
"processing.jobStatus.queued": "Queued",
"processing.jobStatus.skipped": "Skipped",
"processing.jobStatus.unknown": "Unknown",
"processing.job.error.all_failed": "All {count} products failed.",
"processing.job.error.partial_failed": "{count} products failed.",
"processing.step.normalize": "Normalize",
"processing.step.parse_specs": "Parse specs",
"processing.step.fill_fields": "Fill fields",
"processing.step.eprel": "EPREL",
"processing.step.ai_enhance": "AI enhance",
"processing.type.full": "Full processing",
"processing.type.enhance_only": "Enhance only",
"processing.type.title": "Title only",
"processing.type.description": "Description only",
"processing.type.attributes": "Attributes",
"processing.type.category": "Category",
"processing.type.eprel": "EPREL",
"processing.type.seo": "SEO",
"processing.type.normalize": "Normalize",
"errors.requestFailed": "Request failed",
"errors.maintenance": "The system is under maintenance. Try again later.",
"errors.readOnly": "The system is in read-only mode. Changes are temporarily disabled.",
"errors.companyAdminDenied": "Only company admins can {action}. Ask a company admin for help.",
"errors.companyAdminDenied.actionDefault": "do this",
2026-08-17 21:20:45 +02:00
"docs.tryIt.memberCannotCreate": "Only company admins can create API keys. Keys from the previous platform were not migrated — paste a key below, or ask an admin to create a new one.",
"docs.tryIt.noKeysLegacyAdmin": "API keys from the previous platform were not migrated. Create a new key via Use my API key or Settings → API keys — the secret is shown only once.",
"docs.tryIt.noKeysLegacyMember": "No API keys listed. Keys from the previous platform were not migrated — ask a company admin to create one, or paste a dk_ key.",
"errors.couldNotUpdateLanguage": "Could not update language",
"toast.support.replyTitle": "Support reply",
"toast.support.replyBody": "Staff replied to your support ticket.",
"toast.support.replyRe": "Re: {subject}",
"toast.support.statusTitle": "Ticket status updated",
"toast.support.statusBody": "Your support ticket status changed.",
"toast.support.updateTitle": "Support update",
"assistant.label": "Assistant",
"assistant.open": "Open system assistant",
"assistant.close": "Close system assistant",
"tutorial.demoTour": "Demo tour",
"tutorial.jumpToTopic": "Jump to a topic",
"tutorial.whereNeedHelp": "Where do you need help?",
"tutorial.skipTour": "Skip tour",
"tutorial.skipAria": "Skip tutorial",
"tutorial.pickerBody": "Pick a section to reopen that part of the demo. Your account data is not changed by browsing the tour.",
"tutorial.sectionsAria": "Tutorial sections",
"tutorial.open": "Open",
"tutorial.close": "Close",
"tutorial.resumeLastStep": "Resume last step",
"tutorial.startFromBeginning": "Start from beginning",
"tutorial.stepOf": "Step {current} of {total}",
"tutorial.jumpTo": "Jump to…",
"tutorial.jumpToSectionAria": "Jump to section",
"tutorial.back": "Back",
"tutorial.pause": "Pause",
"tutorial.continue": "Continue",
"tutorial.finishTour": "Finish tour",
"tutorial.missingTargetHint": "That control isnt on this screen yet. You can still Continue — the tour never requires a save or sync.",
"tutorial.section.welcome": "Welcome",
"tutorial.section.catalog": "Catalog setup",
"tutorial.section.sources": "Feeds",
"tutorial.section.mapping": "Map & sync",
"tutorial.section.products": "Process",
"tutorial.section.export": "Export & stores",
"tutorial.section.grow": "Grow",
"tutorial.section.done": "Done",
"tutorial.step.welcome.title": "Welcome to Descrybe",
"tutorial.step.welcome.body": "Descrybes core loop is Feeds → Process → Export / Stores. This guided demo highlights those screens on your real dashboard — without requiring you to save, sync, enable fields, or create feeds. Pause anytime; resume from the header. Jump to a section when you only need help with one topic.",
"tutorial.step.welcome.tip": "Demo tour — your data stays unchanged until you choose to act outside the tour.",
"tutorial.step.welcome.nextLabel": "Start tour",
"tutorial.step.welcome.missingHint": "Youre on the dashboard — continue when ready.",
"tutorial.step.dashboard-overview.title": "Your command center",
"tutorial.step.dashboard-overview.body": "The catalog workflow strip shows the path youll use every day: Feeds → Map → Sync → Process. Getting started tracks real workspace progress (separate from this demo). When youre ready for live work, use Manage feeds or Start processing — then export or connect a store.",
"tutorial.step.dashboard-overview.tip": "Completing this tour does not mark checklist steps done — only real workspace progress does.",
"tutorial.step.dashboard-overview.missingHint": "The workflow strip and checklist appear after the dashboard loads.",
"tutorial.step.enable-fields.title": "Standard fields",
"tutorial.step.enable-fields.body": "Standard Fields are the product columns Descrybe maps, processes, and exports — title, description, GTIN, images, and more. Enable recommended turns on a sensible default set for most catalogs. You can refine the list later without breaking existing mappings.",
"tutorial.step.enable-fields.tip": "In the demo you dont need to click Enable recommended — Continue when you understand the idea.",
"tutorial.step.enable-fields.warning": "Enabling or disabling fields affects mapping and processing for this company. Prefer Enable recommended once, then tweak carefully.",
"tutorial.step.enable-fields.missingHint": "Wait for the Fields page to load, or open Fields from the Catalog section in the sidebar.",
"tutorial.step.catalog-depth.title": "Categories & attributes",
"tutorial.step.catalog-depth.body": "In the sidebar Catalog section youll also find Categories and Attributes. Categories organize the catalog; attributes power filters and structured descriptions. You dont need to configure them to finish this tour.",
"tutorial.step.catalog-depth.tip": "Return to this section anytime from Jump to… if you revisit taxonomy later.",
"tutorial.step.catalog-depth.missingHint": "Expand Catalog in the sidebar to open Categories or Attributes after the tour.",
"tutorial.step.connect-source.title": "Add a product source",
"tutorial.step.connect-source.body": "Feeds are how supplier catalogs enter Descrybe — CSV, XML, or URL-based files. Add Feed creates a new source; each row shows status (ready for mapping, mapped, active). Map opens the field-matching screen for that feed.",
"tutorial.step.connect-source.tip": "You dont need to add a feed for the demo. When ready for real setup, add one sample file first.",
"tutorial.step.connect-source.warning": "Avoid deleting live feeds unless you intend to remove that source and its sync history.",
"tutorial.step.connect-source.missingHint": "Open Feeds from the sidebar if this screen hasnt loaded.",
"tutorial.step.map.title": "Map source fields",
"tutorial.step.map.body": "On a feeds Map screen you match supplier columns to Descrybe standard fields. Auto-map suggests matches from column names; confirm fuzzy matches, then fix anything wrong. Save Mappings stores the map so sync and processing know how to read each row.",
"tutorial.step.map.tip": "Demo tip: open Map on a feed when you have one — you are not required to save.",
"tutorial.step.map.warning": "Dont Save Mappings until Auto-map looks right — a bad map makes bad products.",
"tutorial.step.map.missingHint": "Add a feed and click Map to see the mapping UI; or Continue to keep learning.",
"tutorial.step.sync-sample.title": "Sync a sample (when ready)",
"tutorial.step.sync-sample.body": "After mappings are saved, Sync + Process sample pulls a small batch and runs processing so you can verify titles, images, and attributes before a full run. Full Sync now on the feeds list is for larger imports once the sample looks good.",
"tutorial.step.sync-sample.tip": "Skip Sync during the demo — use it only after Save Mappings on a real feed.",
"tutorial.step.sync-sample.warning": "Syncing writes products into this company. Prefer a sample first; avoid Sync now on unmapped feeds.",
"tutorial.step.sync-sample.missingHint": "Sync controls appear on feed rows and on the mapping screen footer.",
"tutorial.step.process.title": "Review products",
"tutorial.step.process.body": "Products lists synced and processed catalog items. Filter by status, open a row for details, and use EPREL badges when energy-label data exists. This is where you spot mapping mistakes before export or store sync.",
"tutorial.step.process.tip": "Browsing products is read-only for exploration — editing a row changes live catalog data.",
"tutorial.step.process.missingHint": "Wait for the products table, or Continue if the catalog is still empty.",
"tutorial.step.processing-hub.title": "Background processing",
"tutorial.step.processing-hub.body": "Jobs under Processing show AI and pipeline progress: completed runs and failures. Start jobs from the dashboard or products when you intentionally want to spend credits on a batch.",
"tutorial.step.processing-hub.tip": "Jobs consume credits — watch Billing before large runs.",
"tutorial.step.processing-hub.missingHint": "Open Jobs from the Processing section in the sidebar if the page is empty.",
"tutorial.step.stores-hub.title": "Stores & platforms",
"tutorial.step.stores-hub.body": "After products are processed, Stores connects WooCommerce or Shopify so you can push cleaned catalog data to your shop. Use this when a marketplace or CMS is your destination — or skip to Export feeds if partners only need a file/URL.",
"tutorial.step.stores-hub.tip": "Reconnect banners appear if a token expires — fix those before relying on sync.",
"tutorial.step.stores-hub.missingHint": "Open Stores from the sidebar to see connection cards.",
"tutorial.step.export.title": "Export cleaned products",
"tutorial.step.export.body": "Export feeds publish cleaned products as XML or CSV for channels, partners, or your store. Create an export, choose format and filters, then share the feed URL or download. Exports read processed catalog data — map and process first for best results.",
"tutorial.step.export.tip": "You dont need to create an export during the demo.",
"tutorial.step.export.warning": "Creating or deleting export feeds affects what partners can download — avoid deleting production feeds casually.",
"tutorial.step.export.missingHint": "Wait for Export feeds to load, or open Exports from the Feeds section in the sidebar.",
"tutorial.step.billing-hub.title": "Credits & billing",
"tutorial.step.billing-hub.body": "Billing shows your plan, wallet, and remaining credits. Processing and some AI features draw from this balance. Keep an eye on usage before large catalog runs.",
"tutorial.step.billing-hub.tip": "Demo accounts may show unlimited or large balances — treat production credits carefully.",
"tutorial.step.billing-hub.missingHint": "Open Billing from the Account section in the sidebar.",
"tutorial.step.grow-hub.title": "Campaigns, SEO & reviews",
"tutorial.step.grow-hub.body": "In the Marketing section: Campaigns generate marketing content, Content calendar plans posts, SEO checks listing readiness, and Reviews ties into WooCommerce. These build on a healthy mapped catalog — finish Feeds → Process → Export / Stores before leaning on them.",
"tutorial.step.grow-hub.tip": "Jump back here when youre ready to market, not during first mapping.",
"tutorial.step.grow-hub.missingHint": "Open Campaigns from Marketing in the sidebar, or Continue.",
"tutorial.step.tour-done.title": "Youre set to explore",
"tutorial.step.tour-done.body": "Thats the product map: Feeds → Map → Sync → Process → Export / Stores. Use Getting started on the dashboard for real setup. Resume or Restart this tour from the header anytime, or Jump to… a section when you need a refresher. Skip tour ends the demo without changing your checklist.",
"tutorial.step.tour-done.tip": "Demo complete — no cleanup needed. Your account was not modified by Continue alone.",
"tutorial.step.tour-done.nextLabel": "Finish tour",
"tutorial.step.tour-done.missingHint": "Return to the dashboard to finish.",
"news.uxImprovements.title": "User Experience Improvements",
"flash.contentLanguageUpdated": "Content language updated.",
"theme.darkMode": "Dark mode",
"theme.lightMode": "Light mode",
"forbidden.title.accessRestricted": "Access restricted",
"forbidden.title.permissionDenied": "Permission denied",
"forbidden.message.support": "This area is only available to support staff and platform admins.",
"forbidden.message.platform": "This area is only available to platform admins.",
"forbidden.message.company": "You dont have permission for this. Ask a company admin for help.",
"forbidden.backToDashboard": "Back to dashboard",
"admin.chrome.platformOps": "Platform ops",
"admin.chrome.sidebar": "Platform ops sidebar",
"admin.chrome.nav": "Platform ops",
"admin.chrome.mobileMenu": "Platform ops mobile menu",
"admin.chrome.opsBadge": "Ops",
"admin.chrome.backToApp": "Back to app",
"admin.chrome.uiLanguage": "UI language",
"admin.chrome.staff.supportDesk": "Support desk",
"admin.chrome.staff.platformAdmin": "Platform admin",
"admin.chrome.staff.staff": "Staff",
"admin.chrome.staff.admin": "Admin",
"admin.nav.section.overview": "Overview",
"admin.nav.section.directory": "Directory",
"admin.nav.section.support": "Support",
"admin.nav.section.ops": "Operations",
"admin.nav.section.commerce": "Commerce",
"admin.nav.section.system": "System",
"admin.nav.commandCenter": "Command center",
"admin.nav.analytics": "Analytics",
"admin.nav.usersOrgs": "Users & orgs",
"admin.nav.tickets": "Tickets",
"admin.nav.knowledge": "Knowledge",
"admin.nav.diagnostics": "Diagnostics",
"admin.nav.stuckProducts": "Stuck products",
"admin.nav.orphanProcessed": "Orphan processed",
"admin.nav.billing": "Billing",
"admin.nav.sales": "Sales",
"admin.nav.translations": "Translations",
"admin.nav.settings": "Settings",
"admin.sales.title": "Sales leads",
"admin.sales.description": "Inbound Contact sales messages and custom payment quotes.",
"admin.sales.listTitle": "Leads",
"admin.sales.listDesc": "{total} matching leads",
"admin.sales.searchPlaceholder": "Search name, email, company…",
"admin.sales.statusAll": "All statuses",
"admin.sales.status.new": "New",
"admin.sales.status.contacted": "Contacted",
"admin.sales.status.quoted": "Quoted",
"admin.sales.status.won": "Won",
"admin.sales.status.closed": "Closed",
"admin.sales.empty": "No sales leads yet.",
"admin.sales.loadError": "Could not load sales leads.",
"admin.sales.saveError": "Could not save lead.",
"admin.sales.saved": "Lead updated.",
"admin.sales.notFound": "Lead not found.",
"admin.sales.leadTitle": "Lead details",
"admin.sales.estimatedSkus": "Estimated SKUs",
"admin.sales.linkCompany": "Link company",
"admin.sales.noCompany": "No company linked",
"admin.sales.adminNotes": "Admin notes",
"admin.sales.companyRequired": "Link a company before creating a payment quote.",
"admin.sales.prepareQuote": "Prepare custom plan",
"admin.sales.prepareQuoteDesc": "Creates an is_custom plan and optional Stripe Checkout link (one-time or installments).",
"admin.sales.planName": "Plan name",
"admin.sales.monthlyCredits": "Monthly AI credits",
"admin.sales.maxProducts": "Max SKUs",
"admin.sales.unlimitedHint": "Leave blank for unlimited",
"admin.sales.totalUsd": "Total price (USD)",
"admin.sales.termMonths": "Term (months)",
"admin.sales.installmentCount": "Installments",
"admin.sales.installmentInterval": "Interval",
"admin.sales.interval.month": "Monthly",
"admin.sales.interval.quarter": "Quarterly",
"admin.sales.interval.year": "Yearly",
"admin.sales.prepareCheckoutNow": "Create Stripe Checkout link now",
"admin.sales.createQuote": "Create quote",
"admin.sales.quoteCreated": "Quote created.",
"admin.sales.quoteError": "Could not create quote.",
"admin.sales.quotesTitle": "Quotes",
"admin.sales.noQuotes": "No quotes yet for this lead.",
"admin.sales.prepareCheckout": "Prepare Checkout",
"admin.sales.checkoutReady": "Checkout link ready.",
"admin.sales.checkoutError": "Could not prepare Checkout.",
"admin.sales.markSent": "Mark sent",
"admin.sales.markedSent": "Quote marked as sent.",
"admin.sales.col.name": "Name",
"admin.sales.col.email": "Email",
"admin.sales.col.company": "Company",
"admin.sales.col.status": "Status",
"admin.sales.col.created": "Created",
"sales.contact.title": "Contact sales",
"sales.contact.lead": "Tell us about your catalog and capacity needs — we will prepare a custom plan you can pay online.",
"sales.contact.formTitle": "Send a message",
"sales.contact.formLead": "Enterprise and custom deals are prepared by our team, then paid via Stripe Checkout.",
"sales.contact.name": "Name",
"sales.contact.email": "Work email",
"sales.contact.company": "Company",
"sales.contact.phone": "Phone (optional)",
"sales.contact.estimatedSkus": "Estimated SKUs (optional)",
"sales.contact.message": "How can we help?",
"sales.contact.submit": "Send message",
"sales.contact.submitting": "Sending…",
"sales.contact.error": "Could not send your message. Please try again.",
"sales.contact.toast.success": "Message sent — we will follow up soon.",
"sales.contact.thanksTitle": "Thanks — we got your message",
"sales.contact.thanksBody": "A platform admin will review your request and can send a Checkout link for a custom plan.",
"sales.contact.bookDemo": "Book a live demo",
"sales.contact.orBookDemo": "Or book a Calendly demo",
"sales.contact.backPricing": "Back to pricing",
"admin.overview.eyebrow": "Command center",
"admin.overview.title": "Platform overview",
"admin.overview.description": "Live platform pulse from analytics summary — jump to ops, insight, and support.",
"admin.overview.tokens": "Tokens",
"admin.overview.tokensHint": "All-time · period",
"admin.overview.credits": "Credits",
"admin.overview.creditsHint": "Across all companies",
"admin.overview.jobs": "Jobs",
"admin.overview.jobsHint": "Queue snapshot",
"admin.overview.platform": "Platform",
"admin.overview.platformHint": "Tenants · volume",
"admin.overview.signals": "Recent signals",
"admin.overview.shortcuts": "Ops shortcuts",
"admin.overview.providers": "AI provider mix",
"admin.overview.internalAi": "Internal AI",
"admin.overview.internalAiHint": "Platform settings",
"admin.overview.popularKeys": "Popular keys",
"admin.overview.popularKeysHint": "Tenant popular providers",
"admin.overview.customUrl": "Custom URL",
"admin.overview.customUrlHint": "Tenant custom base URL",
"admin.overview.linkBilling": "Billing",
"admin.overview.linkSettings": "Settings",
"admin.overview.shortcut.diagnostics.title": "Diagnostics",
"admin.overview.shortcut.diagnostics.desc": "Health checks, queue, recent failures",
"admin.overview.shortcut.analytics.title": "Analytics",
"admin.overview.shortcut.analytics.desc": "Tokens, jobs, signups, providers",
"admin.overview.shortcut.knowledge.title": "Knowledge",
"admin.overview.shortcut.knowledge.desc": "Articles, templates, auto-reply",
"admin.overview.shortcut.users.title": "Users & orgs",
"admin.overview.shortcut.users.desc": "Accounts, companies, invites",
"admin.overview.shortcut.stuck.title": "Stuck products",
"admin.overview.shortcut.stuck.desc": "Running longer than 2 hours",
"admin.overview.signal.stuckTitle": "{count} stuck job",
"admin.overview.signal.stuckTitlePlural": "{count} stuck jobs",
"admin.overview.signal.stuckDetail": "Running longer than 2 hours — review and reset if needed.",
"admin.overview.signal.stuckCta": "Open stuck jobs",
"admin.overview.signal.failedTitle": "{count} failed in last {days}d",
"admin.overview.signal.failedDetail": "{completed} completed in the same window.",
"admin.overview.signal.failedDetailRate": "{rate}% fail rate · {completed} completed.",
"admin.overview.signal.failedCta": "Open diagnostics",
"admin.overview.signal.runningTitle": "{count} job running",
"admin.overview.signal.runningTitlePlural": "{count} jobs running",
"admin.overview.signal.runningDetail": "Active processing jobs right now.",
"admin.overview.signal.runningCta": "View queue",
"admin.overview.signal.ticketsTitle": "{count} open support ticket",
"admin.overview.signal.ticketsTitlePlural": "{count} open support tickets",
"admin.overview.signal.ticketsDetail": "Open or pending tickets in the support desk.",
"admin.overview.signal.ticketsCta": "Open support",
"admin.overview.signal.clearTitle": "No elevated signals",
"admin.overview.signal.clearDetail": "No stuck jobs, period failures, or open tickets in the live summary (last {days}d).",
"admin.overview.signal.clearCta": "Confirm in diagnostics",
"admin.overview.badge.action": "Action",
"admin.overview.badge.watch": "Watch",
"admin.overview.badge.live": "Live",
"admin.overview.badge.clear": "Clear",
"admin.overview.summaryLoadFailed": "Could not load live summary. Shortcuts below still work.",
"admin.overview.keyMetrics": "Key metrics",
"admin.overview.summaryWindow": "Last {days}d · summary endpoint",
"admin.overview.tokensPeriod": "{count} in last {days}d",
"admin.overview.creditsFoot": "{remaining} remaining of {allocated} allocated",
"admin.overview.jobsFoot": "{failed} failed · {running} running · {stuck} stuck",
"admin.overview.platformFoot": "{users} users · {processed} processed · {feeds} input feeds",
"admin.overview.fullDiagnostics": "Full diagnostics",
"admin.overview.also": "Also:",
"admin.overview.linkSupport": "Support desk",
"admin.overview.charts": "Charts",
"admin.overview.providerFoot": "{jobs} jobs · {products} products",
"admin.analytics.eyebrow": "Insight",
"admin.analytics.title": "Analytics & Reporting",
"admin.analytics.description": "Live platform KPIs and trends from tokens, jobs, signups, feeds, tickets, and billing.",
"admin.analytics.period": "Period",
"admin.analytics.refreshing": "Refreshing…",
"admin.analytics.llmTokens": "LLM tokens",
"admin.analytics.credits": "Credits",
"admin.analytics.jobs": "Jobs",
"admin.analytics.volume": "Volume",
"admin.analytics.failureRate": "Failure rate",
"admin.analytics.stuckJobs": "Stuck jobs",
"admin.analytics.apiKeys": "API keys",
"admin.analytics.signups": "Signups",
"admin.analytics.internalAi": "Internal AI",
"admin.analytics.internalAiHint": "Platform OpenAI (admin settings)",
"admin.analytics.popularKeys": "Popular keys",
"admin.analytics.popularKeysHint": "Tenant OpenAI / Groq / …",
"admin.analytics.customUrl": "Custom URL/model",
"admin.analytics.customUrlHint": "Tenant base URL + model + key",
"admin.analytics.tokensByDay": "Tokens by day",
"admin.analytics.tokensByProvider": "Tokens by provider class",
"admin.analytics.tokensByProviderAria": "Tokens by provider class",
"admin.analytics.internalCount": "Internal {count}",
"admin.analytics.popularCount": "Popular {count}",
"admin.analytics.customCount": "Custom {count}",
"admin.analytics.jobsByDay": "Jobs by day",
"admin.analytics.jobsByDayHint": "Jobs created (secondary = failed).",
"admin.analytics.signupsByDay": "Signups by day",
"admin.analytics.signupsByDayHint": "New users (primary) and companies (secondary)",
"admin.analytics.processingJobsStatus": "processing_jobs by status",
"admin.analytics.feedSyncStatus": "feed_sync_jobs by status",
"admin.analytics.ticketsStatus": "support_tickets by status",
"admin.analytics.providerDetail": "Provider detail",
"admin.analytics.providerDetailHint": "Top provider modes (capped for payload size).",
"admin.analytics.noProviderRows": "No provider rows",
"admin.analytics.provider": "Provider",
"admin.analytics.class": "Class",
"admin.analytics.tokensCol": "Tokens",
"admin.analytics.productsCol": "Products",
"admin.analytics.companiesHint": "Top companies by tokens with provider split",
"admin.analytics.noCompanies": "No companies",
"admin.analytics.noCompaniesMsg": "Company list is empty.",
"admin.analytics.company": "Company",
"admin.analytics.internal": "Internal",
"admin.analytics.popular": "Popular",
"admin.analytics.custom": "Custom",
"admin.analytics.noBillingCycles": "No billing cycles yet",
"admin.analytics.linkDiagnostics": "Diagnostics",
"admin.analytics.linkStuck": "Stuck products",
"admin.users.eyebrow": "Platform admin",
"admin.users.title": "Users & organizations",
"admin.users.description": "Platform user directory, staff roles, and company plan assignments.",
"admin.users.staffRoleUnavailable": "Staff role updates are not available on this deployment yet. Contact your platform administrator if you need them.",
"admin.users.search": "Search",
"admin.users.tabUsers": "Users",
"admin.users.tabCompanies": "Companies",
"admin.users.filterWithoutPlan": "Without plan",
"admin.users.filterWithoutApiKeys": "Keys needing reissue",
"admin.users.needsApiKeyReissue": "Needs API key reissue",
"admin.users.colName": "Name",
"admin.users.colStaffRole": "Staff role",
"admin.users.colStatus": "Status",
"admin.users.colCreated": "Created",
"admin.users.colActions": "Actions",
"admin.users.mustSetPassword": "Must set password",
"admin.users.inactive": "Inactive",
"admin.users.reissueInvite": "Re-issue invite",
2026-08-16 11:37:42 +02:00
"admin.users.setLocalPassword": "Set password",
"admin.users.setPasswordTitle": "Set password",
2026-08-17 00:39:25 +02:00
"admin.users.copyInviteLink": "Copy link",
"admin.users.inviteLinkLabel": "One-time set-password / accept invite link",
"admin.users.inviteLinkCopied": "Set-password link copied.",
"admin.users.inviteLinkReady": "Copy the set-password link below and share it securely.",
2026-08-16 11:37:42 +02:00
"admin.users.setPasswordDesc": "Force-set a login password for this user (works for legacy or fake emails that cannot receive invites).",
"admin.users.newPassword": "New password",
"admin.users.setPasswordSubmit": "Set password",
"admin.users.switchToUser": "Switch to user",
"admin.users.colCompany": "Company",
"admin.users.colPlan": "Plan",
"admin.users.colCredits": "Credits",
"admin.users.colLanguage": "Language",
"admin.users.assignPlan": "Assign plan",
2026-08-16 11:37:42 +02:00
"admin.users.cloneCatalog": "Copy to my company",
"admin.users.cloneCatalogAria": "Copy {name} catalog into your sandbox company",
"admin.users.cloneCatalogTitle": "Copy company catalog",
"admin.users.cloneCatalogDesc": "Stay on your admin account. Source data is not changed.",
"admin.users.cloneCatalogFrom": "Source: {name}",
"admin.users.cloneCatalogInto": "Destination: {name}",
"admin.users.cloneCatalogWarning": "Replaces categories, feeds, products, attributes, mappings, and brand on the destination. Plan, billing, members, API keys, and store connectors are not copied.",
"admin.users.cloneCatalogCancel": "Cancel",
"admin.users.cloneCatalogConfirm": "Copy catalog",
"admin.users.cloneDestFallback": "your sandbox company",
2026-08-16 18:49:02 +02:00
"admin.users.cloneDestLabel": "Destination company",
"admin.users.cloneDestSelect": "Select destination",
"admin.users.cloneDestRequired": "Choose a destination company different from the source.",
2026-08-16 18:36:56 +02:00
"admin.users.syncA1": "Sync A1",
"admin.users.syncA1Aria": "Sync A1 categories from dump and repair catalog hygiene for {name}",
"admin.users.syncA1Title": "Sync A1 catalog",
2026-08-17 09:33:07 +02:00
"admin.users.syncA1Desc": "Applies Title/Description/Meta/Attributes category prompts from the repo seed (scripts/seed/wp_product_categories.sql), optionally backfills mapped categories from a MySQL product dump on the API host, then runs catalog hygiene. Does not wipe or reimport the full catalog.",
2026-08-16 18:36:56 +02:00
"admin.users.syncA1Company": "Company: {name}",
2026-08-17 09:33:07 +02:00
"admin.users.syncA1Warning": "Category prompts load automatically from scripts/seed/wp_product_categories.sql on the API host (SEED_A1_WP_CATEGORIES overrides). Optional: place descrybe_new.sql on the API server for product-dump category coverage. No mass reprocess.",
2026-08-16 18:36:56 +02:00
"admin.users.syncA1Cancel": "Cancel",
"admin.users.syncA1Confirm": "Sync A1",
"admin.users.noUsers": "No users match this filter.",
"admin.users.noCompanies": "No companies match this filter.",
"admin.users.assignRoleTitle": "Assign staff role",
"admin.users.assignRoleDesc": "Platform roles gate the admin panel (Admin & Developer) and the support desk (Support staff).",
"admin.users.staffRole": "Staff role",
"admin.users.saveRole": "Save role",
"admin.users.assignPlanTitle": "Assign plan",
"admin.users.assignPlanDesc": "Attach a public, legacy, or custom plan to this company.",
"admin.users.selectPlan": "Select plan",
"admin.users.assign": "Assign",
"admin.settings.title": "Platform settings",
"admin.settings.description": "Platform credentials, AI roles, mail, and integrations for this deployment",
"admin.settings.intro": "Configure platform AI roles, SMTP, OAuth, EPREL, Pinecone, and Stripe here. Leave secret fields blank to keep the stored value. Per-company keys stay under tenant Integrations.",
"admin.settings.aiRolesUnavailable": "Full AI roles are not available on this deployment yet. Processing still saves via platform OpenAI settings; other roles will persist once supported.",
"admin.settings.tab.integrations": "Overview",
"admin.settings.tab.ai": "AI roles",
"admin.settings.tab.mail": "Mail",
"admin.settings.tab.other": "Other",
"admin.settings.tab.admins": "Admin Users",
"admin.settings.mailCardDesc": "Set-password invites and platform outbound email",
"admin.settings.integrationsCardDesc": "OAuth, EPREL, Pinecone, Stripe, feeds",
"admin.settings.tenantVsPlatform": "Tenant vs platform",
"admin.settings.hostSecrets": "Server database, session, and signing secrets — configure on the host only",
"admin.settings.linkAi": "AI",
"admin.settings.linkEmail": "Email",
"admin.settings.linkBilling": "Billing",
"admin.settings.provider": "Provider",
"admin.settings.model": "Model",
"admin.settings.baseUrl": "Base URL",
"admin.settings.apiKey": "API key",
"admin.settings.embeddingDims": "Embedding dimensions (optional)",
"admin.settings.smtpHost": "SMTP host",
"admin.settings.port": "Port",
"admin.settings.username": "Username",
"admin.settings.fromAddress": "From address",
"admin.settings.testRecipient": "Test recipient (optional)",
"admin.settings.testRecipientPlaceholder": "Defaults to your admin email",
"admin.settings.googleOauth": "Google OAuth",
"admin.settings.googleOauthDesc": "Optional platform Google OAuth client credentials.",
"admin.settings.clientId": "Client ID",
"admin.settings.eprel": "EPREL",
"admin.settings.timeout": "Timeout",
"admin.settings.ficheLanguage": "Fiche language",
"admin.settings.pinecone": "Pinecone",
"admin.settings.host": "Host",
"admin.settings.namespace": "Namespace",
"admin.settings.namespacePlaceholder": "optional",
"admin.settings.stripe": "Stripe",
"admin.settings.priceStarterMo": "Starter monthly price ID",
"admin.settings.priceStarterYr": "Starter yearly price ID",
"admin.settings.pricePlusMo": "Plus monthly price ID",
"admin.settings.pricePlusYr": "Plus yearly price ID",
"admin.settings.priceGrowthMo": "Growth monthly price ID",
"admin.settings.priceGrowthYr": "Growth yearly price ID",
"admin.settings.priceBusinessMo": "Business monthly price ID",
"admin.settings.priceBusinessYr": "Business yearly price ID",
"admin.settings.priceScaleMo": "Scale monthly price ID",
"admin.settings.priceScaleYr": "Scale yearly price ID",
"admin.settings.creditPackPrices": "AI credit pack price IDs (one-time)",
"admin.settings.creditPackPricesHint":
"Creates/updates Stripe Products + one-time Prices using the configured secret key (sk_test_ = test Dashboard, sk_live_ = live). Mock must be off. Price IDs are written into the fields below — Save Integrations if you also change other Stripe values.",
"admin.settings.syncCreditPacks": "Sync Stripe packs",
"admin.settings.syncCreditPacksOk": "Synced {count} credit pack price(s) ({mode} mode).",
"admin.settings.syncCreditPacksModeHint": "Stripe mode for this sync: {mode}. Switch the secret key (sk_test_ vs sk_live_) to sync the other environment.",
"admin.settings.syncCreditPacksFailed": "Could not sync credit packs to Stripe.",
"admin.settings.pricePackSmall": "Starter pack (65 credits / $59) price ID",
"admin.settings.pricePackMedium": "Plus pack (200 credits / $149) price ID",
"admin.settings.pricePackLarge": "Catalog pack (1,200 credits / $599) price ID",
"admin.settings.pricePackXL": "Scale pack (8,000 credits / $2,999) price ID",
"admin.settings.feedAllowlist": "Feed private URL allowlist",
"admin.settings.allowlist": "Allowlist",
"admin.settings.platformAdmins": "Platform administrators",
"admin.settings.colUserId": "User ID",
"admin.settings.colEmail": "Email",
"admin.settings.colName": "Name",
"admin.settings.colAddedOn": "Added On",
"admin.settings.colRole": "Role",
"admin.settings.platformAdminBadge": "Platform admin",
"admin.settings.noAdmins": "No admin users found",
"admin.settings.adminStatusCheck": "Admin status check",
"admin.settings.bootstrapPage": "bootstrap page",
"admin.readiness.title": "Cutover readiness",
"admin.readiness.detail": "Hypercare counts that still need attention before DNS switch.",
"admin.readiness.mustSetPassword": "{count} users must set password",
"admin.readiness.withoutAdmin": "{count} companies without an admin",
"admin.readiness.withoutPlan": "{count} companies without an active plan",
"admin.readiness.withoutApiKeys": "{count} companies needing API key reissue",
"admin.readiness.linksAria": "Readiness deep links",
"admin.readiness.linkUsers": "Users",
"admin.readiness.linkBilling": "Billing",
"admin.readiness.linkSettings": "Settings",
"admin.readiness.linkApiKeys": "Keys needing reissue",
"admin.diagnostics.eyebrow": "Platform",
"admin.diagnostics.title": "Diagnostics",
"admin.diagnostics.description": "Ops console for app health, queue depth, recent jobs, and config presence flags. Secrets and DSNs are never shown; job errors are sanitized.",
"admin.diagnostics.filterAria": "Job status filter",
"admin.diagnostics.queue": "Queue",
"admin.diagnostics.noJobsInQueue": "No jobs in queue.",
"admin.diagnostics.sanitizedErrors": "Sanitized errors · max 25",
"admin.diagnostics.colId": "ID",
"admin.diagnostics.colCompany": "Company",
"admin.diagnostics.colStatus": "Status",
"admin.diagnostics.colProgress": "Progress",
"admin.diagnostics.colUpdated": "Updated",
"admin.diagnostics.colError": "Error",
"admin.diagnostics.colTicket": "Ticket",
"admin.diagnostics.colWhen": "When",
"admin.diagnostics.noJobsFilter": "No jobs for this filter.",
"admin.stuck.title": "Stuck products",
"admin.stuck.description": "Review recent processing jobs and reset jobs stuck running longer than 2 hours",
"admin.stuck.noJobs": "No jobs found.",
"admin.stuck.filterAria": "Filter jobs by status",
"admin.orphan.title": "Orphan processed",
"admin.orphan.description": "Cutover ops #7 — report stale catalog rows first (dry-run), then confirm delete only if needed.",
"admin.orphan.cutoverHint": "Safe by default: refresh and dry-run never delete. Confirm delete sends confirm=true only after you approve the dialog.",
"admin.orphan.refreshReport": "Refresh report",
"admin.orphan.dryRunBtn": "Dry-run cleanup",
"admin.orphan.deleteBtn": "Confirm delete…",
"admin.orphan.loadFailed": "Could not load orphan report",
"admin.orphan.dryRunFailed": "Dry-run cleanup failed",
"admin.orphan.deleteFailed": "Confirmed orphan cleanup failed",
"admin.orphan.metric.total": "Total orphans",
"admin.orphan.metric.missingRaw": "Missing raw",
"admin.orphan.metric.unprocessedRaw": "Unprocessed raw",
"admin.orphan.samplesTitle": "Sample rows",
"admin.orphan.samplesDesc": "Up to 25 most recently updated orphan catalog rows",
"admin.orphan.cleanBadge": "Clean",
"admin.orphan.needsCleanupBadge": "Needs cleanup",
"admin.orphan.noneFound": "No orphan processed rows — cutover ops #7 report is clean.",
"admin.orphan.noSamples": "No sample rows in this report.",
"admin.orphan.colProcessed": "Processed ID",
"admin.orphan.colCompany": "Company",
"admin.orphan.colRaw": "Raw ID",
"admin.orphan.colReason": "Reason",
"admin.orphan.colRawStatus": "Raw status",
"admin.orphan.reason.missingRaw": "Missing raw",
"admin.orphan.reason.unprocessedRaw": "Unprocessed raw",
"admin.orphan.reason.other": "Other",
"admin.orphan.rawProcessedYes": "is_processed=true",
"admin.orphan.rawProcessedNo": "is_processed=false",
"admin.orphan.confirmTitle": "Delete orphan processed rows?",
"admin.orphan.confirmDesc": "This permanently deletes {total} processed_products row(s) whose raw is missing or unprocessed. Job product links use ON DELETE SET NULL.",
"admin.orphan.confirmDelete": "Delete orphans",
"admin.billing.title": "Billing Admin",
"admin.billing.description": "Manage plans, credits, per-package feature permissions, and platform-wide feature switches.",
"admin.billing.noCompanies": "No companies found.",
"admin.billing.noCompaniesFilter": "No companies match this filter.",
"admin.billing.assignPlanTitle": "Assign plan",
"admin.billing.assignPlanDesc": "Attach a billing plan to a company. Optional trial credits reset the company balance for the trial period.",
"admin.billing.creditsTitle": "Add / adjust credits",
"admin.billing.creditsDesc": "Credit or debit a companys balance.",
"admin.billing.searchCompany": "Search company…",
"admin.knowledge.draft": "Draft",
"admin.knowledge.badge.draft": "Draft",
"admin.knowledge.newArticle": "New article",
"admin.knowledge.editArticle": "Edit article",
"admin.knowledge.noMatchingArticles": "No matching articles",
"admin.knowledge.noArticles": "No knowledge articles",
"admin.knowledge.emptyCategoryMsg": "Category \"{category}\" is ready — add an article shell for a content agent to fill.",
"admin.knowledge.emptyArticlesMsg": "Add FAQ-style shells with categories and keywords. Leave body placeholders for content agents.",
"admin.knowledge.col.title": "Title",
"admin.knowledge.col.name": "Name",
"admin.knowledge.edit": "Edit",
"admin.knowledge.newTemplate": "New template",
"admin.knowledge.editTemplate": "Edit template",
"admin.knowledge.allCategories": "All",
"admin.settings.enablePlatformSmtp": "Enable platform SMTP",
"admin.plans.title": "Subscription plans",
"admin.plans.description": "Public ladder, A1 / Legacy, Platform Demo, and custom deals. Ephemeral test and obsolete ladder rows stay under Hidden.",
"admin.plans.searchPlaceholder": "Search name or description…",
"admin.plans.searchAria": "Search plans",
"admin.plans.filterAria": "Filter plans by visibility",
"admin.plans.filter.catalog": "Catalog",
"admin.plans.filter.public": "Public",
"admin.plans.filter.legacy": "Legacy",
"admin.plans.filter.custom": "Custom",
"admin.plans.filter.hidden": "Hidden",
"admin.plans.filter.all": "All",
"admin.plans.col.plan": "Plan",
"admin.plans.col.visibility": "Visibility",
"admin.plans.col.monthlyCredits": "Monthly credits",
"admin.plans.col.maxProducts": "Max products",
"admin.plans.col.term": "Term",
"admin.plans.customPackageFlag": "Custom package flag",
"admin.plans.visibility.public": "Public",
"admin.plans.visibility.legacy": "Legacy",
"admin.plans.visibility.hidden": "Hidden",
"admin.plans.visibility.custom": "Custom",
"admin.plans.edit": "Edit",
"admin.plans.editAria": "Edit {name}",
"admin.plans.assign": "Assign",
"admin.plans.assignAria": "Assign {name}",
"admin.plans.permissions": "Plan permissions",
"admin.plans.permissionsAria": "Edit plan permissions for {name}",
"admin.plans.showing": "Showing {filtered} of {total} plans",
"admin.plans.unlimited": "Unlimited",
"admin.plans.optionLabel": "{name} ({credits} credits) · {kind}",
"admin.permissions.noteStrong": "Plan entitlements only.",
"admin.permissions.noteBody": "These toggles set what this package may include. Platform-wide on/off masters are on the {global} tab — a plan can enable a feature that still stays off when the platform switch is disabled.",
"admin.permissions.globalTab": "Global switches",
"admin.permissions.title": "Plan permissions",
"admin.permissions.descCount": "{enabled}/{total} enabled",
"admin.permissions.matchesProfile": "matches {profile}",
"admin.permissions.customizedOverrides": "customized overrides",
"admin.permissions.planDefaults": "plan defaults",
"admin.permissions.badge.legacy": "Migrated legacy package",
"admin.permissions.badge.publicLadder": "Public ladder",
"admin.permissions.badge.ladderCustom": "Public ladder · custom flag",
"admin.permissions.badge.customDeal": "Custom deal",
"admin.permissions.badge.clientDeal": "Client deal",
"admin.permissions.badge.customOverrides": "Custom overrides",
"admin.permissions.badge.defaults": "Defaults",
"admin.permissions.badge.customFlag": "Custom flag",
"admin.permissions.package": "Package",
"admin.permissions.noPlans": "No plans",
"admin.permissions.suffix.legacy": " · legacy",
"admin.permissions.suffix.default": " · default",
"admin.permissions.suffix.custom": " · custom",
"admin.permissions.section": "Section",
"admin.permissions.allSections": "All sections",
"admin.permissions.state": "State",
"admin.permissions.stateAll": "All",
"admin.permissions.stateOn": "Enabled",
"admin.permissions.stateOff": "Disabled",
"admin.permissions.stateDiffers": "Differs from default",
"admin.permissions.search": "Search",
"admin.permissions.searchPlaceholder": "Filter by key or label",
"admin.permissions.profilesAria": "Plan feature profiles",
"admin.permissions.applyProfile": "Apply profile",
"admin.permissions.applyLegacy": "Apply legacy profile",
"admin.permissions.profilesHint": "One-click matrices for public ladder packages and migrated legacy navigation. Saves overrides for the selected package only.",
"admin.permissions.applyNamed": "Apply {label}",
"admin.permissions.applyGeneric": "Apply profile",
"admin.permissions.enableAll": "Enable all",
"admin.permissions.disableAll": "Disable all",
"admin.permissions.clearOverrides": "Clear overrides",
"admin.permissions.globallyOff": "Globally off",
"admin.permissions.enableSection": "Enable section",
"admin.permissions.disableSection": "Disable section",
"admin.permissions.noMatch": "No features match the current filters.",
"admin.permissions.differs": "Differs",
"admin.permissions.platformOffHint": "Off platform-wide even if this plan enables it.",
"admin.permissions.sectionToggled": "{label} {state} for this plan.",
"admin.permissions.state.enabled": "enabled",
"admin.permissions.state.disabled": "disabled",
"admin.permissions.loadFailed": "Failed to load plan permissions",
"admin.permissions.saveFailed": "Failed to save feature",
"admin.permissions.enableAllFailed": "Enable all failed",
"admin.permissions.disableAllFailed": "Disable all failed",
"admin.permissions.profileFailed": "Failed to apply profile",
"admin.permissions.resetFailed": "Failed to reset defaults",
"admin.permissions.sectionFailed": "Section update failed",
"admin.profile.legacy.label": "Legacy",
"admin.profile.legacy.description": "Migrated legacy navigation: catalog, feeds, billing, and settings; no Background Tasks, stores, or marketing.",
"admin.profile.free.label": "Free",
"admin.profile.free.description": "Public Free ladder — AI, API keys, live email, and own-key AI off.",
"admin.profile.starter.label": "Starter",
"admin.profile.starter.description": "Public Starter — AI on; own-key AI off.",
"admin.profile.growth.label": "Growth",
"admin.profile.growth.description": "All catalog features on.",
"admin.profile.business.label": "Business",
"admin.profile.business.description": "All catalog features on.",
"admin.profile.enterprise.label": "Enterprise / all-on",
"admin.profile.enterprise.description": "Full feature matrix (custom and Enterprise default).",
"admin.gates.noteStrong": "Platform-wide masters.",
"admin.gates.noteBody": "These switches apply to every package. Effective access is {combo}. Per-package entitlements stay on the {permissions} tab.",
"admin.gates.combo": "plan permission AND global section AND global feature",
"admin.gates.permissionsTab": "Plan permissions",
"admin.gates.sectionsOff": "{count} section off",
"admin.gates.sectionsOffPlural": "{count} sections off",
"admin.gates.featuresOff": "{count} feature master off",
"admin.gates.featuresOffPlural": "{count} feature masters off",
"admin.gates.title": "Global feature masters",
"admin.gates.description": "Disable a feature here to turn it off for every package, even when a plan enables it.",
"admin.gates.section": "Section",
"admin.gates.allSections": "All sections",
"admin.gates.search": "Search",
"admin.gates.searchPlaceholder": "Filter by key or label",
"admin.gates.sectionOff": "Section off",
"admin.gates.noMatch": "No features match the current filters.",
"admin.gates.featureAria": "{label} global",
"admin.gates.sectionsTitle": "Global section switches",
"admin.gates.sectionsDesc": "Turn an entire product area on or off for all packages. “Section + features” also updates every feature master in that section.",
"admin.gates.sectionAria": "{label} global section",
"admin.gates.enableSectionFeatures": "Enable section + features",
"admin.gates.disableSectionFeatures": "Disable section + features",
"admin.gates.sectionSuccess": "{label} {state} for all packages.",
"admin.gates.sectionSuccessWithFeatures": "{label} {state} for all packages (section and feature masters).",
"admin.gates.featureSuccess": "{key} {state} globally.",
"admin.gates.state.enabled": "enabled",
"admin.gates.state.disabled": "disabled",
"admin.gates.loadFailed": "Failed to load global feature switches",
"admin.gates.sectionFailed": "Failed to update global section",
"admin.gates.saveFailed": "Failed to save global feature",
"admin.billing.createPlan": "Create plan",
"admin.billing.assignPlanBtn": "Assign plan",
"admin.billing.stat.plans": "Plans",
"admin.billing.stat.catalogHidden": "{catalog} catalog · {hidden} hidden",
"admin.billing.stat.creditsAllocated": "Credits allocated",
"admin.billing.stat.acrossCompanies": "Across companies on this page (first 50)",
"admin.billing.stat.creditsUsed": "Credits used",
"admin.billing.stat.creditsConsumed": "Credits consumed on this page",
"admin.billing.stat.noActivePlan": "No active plan",
"admin.billing.stat.noActivePlanHint": "Companies with no active subscription (this page)",
"admin.billing.tab.plans": "Plans",
"admin.billing.tab.permissions": "Plan permissions",
"admin.billing.tab.global": "Global switches",
"admin.billing.tab.companies": "Companies",
"admin.billing.cyclesTitle": "Billing cycles",
"admin.billing.cyclesDesc": "Process due renewals for companies on scheduled billing cycles.",
"admin.billing.runCycles": "Run due billing cycles",
"admin.billing.companiesTitle": "Companies",
"admin.billing.companiesDesc": "Credit balances and plan status — assign plans or adjust credits.",
"admin.billing.searchCompaniesAria": "Search companies",
"admin.billing.planStatusAria": "Plan status",
"admin.billing.filter.all": "All companies",
"admin.billing.filter.withPlan": "Has active plan",
"admin.billing.filter.withoutPlan": "No active plan",
"admin.billing.col.company": "Company",
"admin.billing.col.planStatus": "Plan status",
"admin.billing.col.creditsRemaining": "Credits remaining",
"admin.billing.col.total": "Total",
"admin.billing.col.used": "Used",
"admin.billing.col.usagePct": "Usage %",
"admin.billing.badge.noPlan": "No plan",
"admin.billing.badge.active": "Active",
"admin.billing.assignPlanAria": "Assign plan to {name}",
"admin.billing.addCredits": "Add credits",
"admin.billing.addCreditsAria": "Add credits for {name}",
"admin.billing.showingCompanies": "Showing {filtered} of {total} companies",
"admin.billing.editPlanTitle": "Edit plan",
"admin.billing.createPlanTitle": "Create plan",
"admin.billing.editPlanDesc": "Update credits, product caps, and whether this plan is marked custom.",
"admin.billing.createPlanDesc": "Create a package. Custom plans stay hidden from public pricing.",
"admin.billing.field.name": "Name",
"admin.billing.field.description": "Description",
"admin.billing.field.descriptionPlaceholder": "Optional short summary for admins",
"admin.billing.field.monthlyCredits": "Monthly credits",
"admin.billing.field.yearlyCredits": "Yearly credits",
"admin.billing.field.maxProducts": "Max products",
"admin.billing.field.maxProductsPlaceholder": "Blank = unlimited",
"admin.billing.field.term": "Term",
"admin.billing.term.monthly": "Monthly",
"admin.billing.term.yearly": "Yearly",
"admin.billing.customPackage": "Custom package",
"admin.billing.customPackageHint": "Hidden from public pricing. Use for client deals; leave off for FreeBusiness.",
"admin.billing.previewBadge": "Preview badge: {preview}.",
"admin.billing.company": "Company",
"admin.billing.selectCompany": "Select company",
"admin.billing.noPlanSuffix": " · no plan",
"admin.billing.plan": "Plan",
"admin.billing.selectPlan": "Select plan",
"admin.billing.trialAssignment": "Trial assignment",
"admin.billing.trialHint": "Optional trial flag + credit grant for sales or evaluation trials.",
"admin.billing.trialCredits": "Trial credits",
"admin.billing.assign": "Assign",
"admin.billing.amount": "Amount",
"admin.billing.amountHint": "Use a negative value to debit.",
"admin.billing.apply": "Apply",
"admin.billing.planUpdated": "Plan updated.",
"admin.billing.planCreated": "Plan created.",
"admin.billing.loadFailed": "Failed to load billing data",
"admin.billing.updateFailed": "Update plan failed",
"admin.billing.createFailed": "Create plan failed",
"admin.billing.assignFailed": "Assign failed",
"admin.billing.creditsFailed": "Add credits failed",
"admin.billing.cyclesFailed": "Run cycles failed",
"admin.knowledge.supportInbox": "Support inbox",
"admin.knowledge.aiRoles": "AI roles",
"admin.knowledge.tab.articles": "Articles",
"admin.knowledge.tab.templates": "Templates",
"admin.knowledge.tab.settings": "Auto-reply",
"admin.knowledge.allStatuses": "All statuses",
"admin.knowledge.published": "Published",
"admin.knowledge.createArticle": "Create article",
"admin.knowledge.col.categories": "Categories",
"admin.knowledge.col.status": "Status",
"admin.knowledge.col.keywords": "Keywords",
"admin.knowledge.badge.published": "Published",
"admin.knowledge.createTemplate": "Create template",
"admin.knowledge.badge.active": "Active",
"admin.knowledge.badge.inactive": "Inactive",
"admin.knowledge.autoFirstResponses": "Enable automatic first responses",
"admin.knowledge.faqMatching": "FAQ / template matching",
"admin.knowledge.retryOnReply": "Retry on first customer reply (if no prior auto)",
"admin.knowledge.matchThreshold": "Match confidence threshold",
"admin.knowledge.enableAiFallback": "Enable AI fallback",
"admin.knowledge.deliveryMode": "Delivery mode",
"admin.knowledge.delivery.draft": "Draft only (internal note)",
"admin.knowledge.delivery.autoSend": "Auto-send to customer",
"admin.knowledge.aiThreshold": "AI confidence threshold",
"admin.knowledge.usePlatformRole": "Use platform support AI role (recommended)",
"admin.knowledge.modelOverride": "Model override",
"admin.knowledge.providerOverride": "Provider override",
"admin.knowledge.baseUrlOverride": "Base URL override",
"admin.knowledge.supportAiRoleTitle": "Support AI role (fallback provider)",
"admin.knowledge.configured": "Configured",
"admin.knowledge.notReadyBadge": "Not ready",
"admin.knowledge.enabled": "Enabled",
"admin.knowledge.disabled": "Disabled",
"admin.knowledge.openAiRoles": "Open Platform settings → AI roles",
"admin.knowledge.field.title": "Title",
"admin.knowledge.field.slug": "Slug",
"admin.knowledge.field.body": "Body (markdown)",
"admin.knowledge.field.keywords": "Keywords",
"admin.knowledge.keywordsPlaceholder": "comma-separated",
"admin.knowledge.field.intents": "Intent keys",
"admin.knowledge.intentsPlaceholder": "comma-separated",
"admin.knowledge.field.categories": "Category slugs",
"admin.knowledge.categoriesPlaceholder": "billing, account…",
"admin.knowledge.field.weight": "Priority weight",
"admin.knowledge.publishedEligible": "Published (eligible for matching)",
"admin.knowledge.field.name": "Name",
"admin.knowledge.field.templateBody": "Body",
"admin.knowledge.active": "Active",
"admin.settings.card.aiRolesTitle": "Platform AI roles",
"admin.settings.card.aiRolesDesc": "Processing, vectorization, docs/API, and support — separate keys/models",
"admin.settings.roleOff": " (off)",
"admin.settings.roleNotSet": " · not set",
"admin.settings.someRolesUnavailable": "Some AI roles are not available on this deployment yet. Processing still uses the platform OpenAI settings until all roles are supported.",
"admin.settings.configure": "Configure",
"admin.settings.card.smtpTitle": "Platform SMTP",
"admin.settings.configured": "Configured",
"admin.settings.notConfigured": "Not configured",
"admin.settings.source": "source: {source}",
"admin.settings.smtpEnabled": "SMTP enabled",
"admin.settings.smtpDisabled": "SMTP disabled",
"admin.settings.passwordSet": " · password set",
"admin.settings.card.otherTitle": "Other integrations",
"admin.settings.oauthSet": "Google OAuth set",
"admin.settings.oauthOff": "Google OAuth off",
"admin.settings.eprelOn": "EPREL on",
"admin.settings.eprelOff": "EPREL off",
"admin.settings.pineconeSet": "Pinecone set",
"admin.settings.pineconeOff": "Pinecone off",
"admin.settings.stripeSet": "Stripe set",
"admin.settings.stripeOff": "Stripe off",
"admin.settings.password": "Password",
"admin.settings.passwordSavedHint": "(saved — leave blank to keep)",
"admin.settings.secretKey": "Secret key",
"admin.settings.secretConfiguredHint": "(configured — leave blank to keep)",
"admin.settings.passwordConfigured": "Password configured",
"admin.settings.noSmtpPassword": "No SMTP password",
"admin.settings.enabled": "Enabled",
"admin.settings.disabled": "Disabled",
"admin.settings.saveRole": "Save {label}",
"admin.settings.testConnection": "Test connection",
"admin.settings.saveMail": "Save mail settings",
"admin.settings.saveIntegrations": "Save integrations",
"admin.settings.eprelEnabled": "EPREL enrichment enabled",
"admin.settings.loadFailed": "Platform settings could not be loaded. Saving is disabled until reload succeeds.",
"admin.settings.testAccepted": "Test message accepted by SMTP",
"admin.stuck.cleanupBtn": "Stuck job cleanup (>2h running)",
"admin.stuck.jobsTitle": "Processing Jobs",
"admin.stuck.jobsDesc": "Latest 100 jobs · {running} currently running",
"admin.stuck.filterAll": "All",
"admin.stuck.filterRunning": "Running",
"admin.stuck.filterFailed": "Failed",
"admin.stuck.filterPending": "Pending",
"admin.stuck.filterCompleted": "Completed",
"admin.stuck.colId": "ID",
"admin.stuck.colCompany": "Company",
"admin.stuck.colStatus": "Status",
"admin.stuck.colProgress": "Progress",
"admin.stuck.colUpdated": "Updated",
"admin.stuck.colError": "Error",
"admin.stuck.loadFailed": "Failed to load jobs",
"admin.stuck.cleanupFailed": "Cleanup failed",
"admin.support.knowledgeLink": "Knowledge & auto-reply",
"admin.support.queueTitle": "Ticket queue",
"admin.support.queueMeta": "{total} · scope {scope}",
"admin.support.queueMetaStatus": "· status {status}",
"admin.support.ticketCountOne": "{count} ticket",
"admin.support.ticketCountMany": "{count} tickets",
"admin.support.statusAll": "All statuses",
"admin.support.scopeAll": "All tickets",
"admin.support.scopeInbox": "Inbox",
"admin.support.scopeMine": "Mine",
"admin.support.scopeUnassigned": "Unassigned",
"admin.support.flagAny": "Any auto state",
"admin.support.flagNeedsHuman": "Needs human",
"admin.support.flagAiDraft": "AI draft",
"admin.support.colSubject": "Subject",
"admin.support.colStatus": "Status",
"admin.support.colAuto": "Auto",
"admin.support.colPriority": "Priority",
"admin.support.colAssignee": "Assignee",
"admin.support.colCompany": "Company",
"admin.support.colUpdated": "Updated",
"admin.support.colActions": "Actions",
"admin.support.autoOff": "Auto off",
"admin.support.claim": "Claim",
"admin.support.claimAria": "Claim ticket {subject}",
"admin.support.unassigned": "Unassigned",
"admin.support.you": "You",
"admin.support.assigned": "Assigned",
"admin.support.loadQueueFailed": "Failed to load support queue",
"admin.support.claimFailed": "Failed to claim ticket",
"admin.support.ticketFallbackTitle": "Support ticket",
"admin.support.ticketMeta": "{company} · {requester}",
"admin.support.ticketMetaFallback": "Staff review thread",
"admin.support.companyFallback": "Company",
"admin.support.requesterFallback": "requester",
"admin.support.backQueue": "Queue",
"admin.support.resolve": "Resolve",
"admin.support.markPending": "Mark pending",
"admin.support.reopen": "Reopen",
"admin.support.assigneeLabel": "Assignee:",
"admin.support.unassign": "Unassign",
"admin.support.assignToStaff": "Assign to staff",
"admin.support.apply": "Apply",
"admin.support.autoPanelTitle": "Auto-match / AI assist",
"admin.support.autoPanelDesc": "Staff-only outcome of FAQ match and AI draft/send. Customers never see drafts.",
"admin.support.autoDisabledBadge": "Auto disabled",
"admin.support.autoStatusLabel": "Status:",
"admin.support.lastAttempt": "Last attempt:",
"admin.support.reenableAuto": "Re-enable auto",
"admin.support.disableAuto": "Disable auto for this ticket",
"admin.support.aiDraftTitle": "AI draft (approve or edit)",
"admin.support.aiDraftDesc": "Draft-only mode left an internal note. Edit if needed, then send to the customer — or discard and take over manually.",
"admin.support.confidence": "Confidence {value}",
"admin.support.statusAfterSend": "Status after send",
"admin.support.approveSend": "Approve & send",
"admin.support.discardDraft": "Discard draft",
"admin.support.threadTitle": "Thread",
"admin.support.threadMeta": "{count} · last activity {when}",
"admin.support.messageCountOne": "{count} message",
"admin.support.messageCountMany": "{count} messages",
"admin.support.replyTitle": "Reply",
"admin.support.replyDesc": "Public replies notify the customer. Internal notes stay staff-only. Default status after a public reply is pending.",
"admin.support.internalNote": "Internal note (not visible to customer)",
"admin.support.setStatus": "Set status",
"admin.support.statusDefault": "Default",
"admin.support.saveNote": "Save note",
"admin.support.sendReply": "Send reply",
"admin.support.replyAndResolve": "Reply & resolve",
"admin.support.closedBanner": "This ticket is closed. Reopen it to continue the conversation.",
"admin.support.priorityMeta": "priority {priority}",
"admin.support.authorAiDraft": "AI draft (staff only)",
"admin.support.authorInternal": "Internal note",
"admin.support.authorStaff": "Staff",
"admin.support.authorCustomer": "Customer",
"admin.support.flash.noteSaved": "Internal note saved.",
"admin.support.flash.replySent": "Reply sent.",
"admin.support.flash.resolved": "Ticket marked resolved.",
"admin.support.flash.pending": "Ticket marked pending (waiting on customer).",
"admin.support.flash.reopened": "Ticket reopened.",
"admin.support.flash.statusSet": "Ticket status set to {status}.",
"admin.support.flash.autoDisabled": "Automatic replies disabled for this ticket.",
"admin.support.flash.autoEnabled": "Automatic replies re-enabled for this ticket.",
"admin.support.loadTicketFailed": "Failed to load ticket",
"admin.support.replyFailed": "Failed to send reply",
"admin.support.statusFailed": "Failed to update status",
"admin.support.unassignFailed": "Failed to unassign ticket",
"admin.support.assignFailed": "Failed to assign ticket",
"admin.support.autoFailed": "Failed to update auto-reply setting",
"admin.support.approveFailed": "Failed to approve AI draft",
"admin.support.discardFailed": "Failed to discard AI draft",
"admin.settings.sourceResolved": "Resolved from {sources}",
"admin.settings.sourceUpdated": " · updated {when}",
"admin.settings.updatedAt": "Updated {when}",
"admin.settings.tenantDesc": "Company AI keys and marketing email stay under Integrations. Session and encryption secrets stay in the server environment and are not edited here.",
"admin.settings.perCompanyAiEmail": "Per-company AI/email —",
"admin.settings.plansCredits": "Plans and credits —",
"admin.settings.fromDatabase": "From database",
"admin.settings.fromEnvironment": "From environment",
"admin.settings.sourceBadge": "Source: {source}",
"admin.settings.storedKey": "Stored key: {masked}",
"admin.settings.enableRole": "Enable this role",
"admin.settings.clearApiKey": "Clear stored API key",
"admin.settings.apiKeyKeepPlaceholder": "•••• leave blank to keep",
"admin.settings.apiKeyNewPlaceholder": "sk-… or local",
"admin.settings.smtpCardTitle": "Platform SMTP",
"admin.settings.smtpCardDesc": "Used for set-password invites and platform outbound email. Marketing Resend/SMTP remains per-company under Integrations → Email.",
"admin.settings.smtpBadgeOn": "SMTP enabled",
"admin.settings.smtpBadgeOff": "SMTP disabled",
"admin.settings.enableSmtp": "Enable platform SMTP",
"admin.settings.storedPassword": "Stored password: {masked}",
"admin.settings.clearSmtpPassword": "Clear stored SMTP password",
"admin.settings.sendTestEmail": "Send test email",
"admin.settings.enableGoogle": "Enable Google OAuth",
"admin.settings.clientSecret": "Client secret",
"admin.settings.leaveBlankKeep": "(leave blank to keep)",
"admin.settings.storedSecret": "Stored secret: {masked}",
"admin.settings.clearClientSecret": "Clear stored client secret",
"admin.settings.eprelDesc": "Free public EU energy-label data during product processing. On by default for all plans — no activation or paid upgrade required. Use the controls below only to disable or tune the client.",
"admin.settings.optionalKeySaved": "Optional API key saved",
"admin.settings.noApiKeyNeeded": "No API key needed",
"admin.settings.optionalApiKey": "Optional API key",
"admin.settings.optionalApiKeySavedHint": "(saved — leave blank to keep)",
"admin.settings.optionalApiKeyPublicHint": "(public API works without one)",
"admin.settings.clearEprelKey": "Clear stored EPREL API key",
"admin.settings.pineconeDesc": "Optional vector category suggestions during processing. Host environment values are used when fields here are left empty.",
"admin.settings.apiKeyConfigured": "API key configured",
"admin.settings.noApiKey": "No API key",
"admin.settings.apiKeyLabel": "API key",
"admin.settings.clearPineconeKey": "Clear stored Pinecone API key",
"admin.settings.stripeDesc": "Optional overrides of server Stripe configuration. Prefer password fields; values are never re-shown after save.",
"admin.settings.stripeMock": "Force Stripe mock mode (non-production only — disables real charges)",
"admin.settings.webhookSecret": "Webhook secret",
"admin.settings.clearStripeSecret": "Clear Stripe secret key",
"admin.settings.clearStripeWebhook": "Clear Stripe webhook secret",
"admin.settings.feedAllowlistDesc": "Comma-separated hosts/CIDRs allowed for private feed URLs.",
"admin.settings.adminsDesc": "Platform administrators currently on this deployment",
"admin.settings.onboardingTitle": "Admin onboarding helpers",
"admin.settings.onboardingDesc": "Use set-password invite emails to onboard eligible users who still need a password.",
"admin.settings.sendInvites": "Send set-password emails",
"admin.settings.adminStatusBefore": "Platform admins cannot be created from this screen. Confirm your access on the",
"admin.settings.adminStatusAfter": ", or ask an existing platform admin / ops to promote your account.",
"admin.settings.loadUsersFailed": "Failed to load admin users",
"admin.settings.sendFailed": "Send failed",
"admin.settings.saveMailFailed": "Could not save mail settings",
"admin.settings.smtpNotConfigured": "SMTP is not configured — enable and save mail settings first.",
"admin.settings.smtpTestFailed": "SMTP test failed",
"admin.settings.testEmailFailed": "Could not send test email",
"admin.settings.saveIntegrationFailed": "Could not save integration settings",
"admin.settings.aiSaved": "{label} AI settings saved. API keys are never shown again.",
"admin.settings.aiSaveFailed": "Could not save {label} AI settings",
"admin.settings.aiTestOk": "{label}: connection ok",
"admin.settings.aiTestSkipped": "{label}: skipped — save credentials (and enable the role) to test.",
"admin.settings.aiTestFailed": "{label}: connection failed",
"admin.settings.aiTestError": "Could not test {label} connection",
"admin.settings.aiRole.processing.label": "Processing",
"admin.settings.aiRole.processing.desc": "Product pipeline chat/completions (titles, descriptions, enhance).",
"admin.settings.aiRole.vectorization.label": "Vectorization",
"admin.settings.aiRole.vectorization.desc": "Embeddings for search / Pinecone indexing (match index dimensions).",
"admin.settings.aiRole.docs_api.label": "Docs / API",
"admin.settings.aiRole.docs_api.desc": "Future docs/API assistant slot — /docs Ask stays rule-based and must never call this role.",
"admin.settings.aiRole.support.label": "Support",
"admin.settings.aiRole.support.desc": "Ticket auto-reply AI fallback — configure provider/key/model here; enable delivery in Support knowledge → Auto-reply.",
"admin.settings.providerOption.openai": "OpenAI",
"admin.settings.providerOption.openrouter": "OpenRouter",
"admin.settings.providerOption.azure": "Azure OpenAI",
"admin.settings.providerOption.ollama": "Ollama",
"admin.settings.providerOption.custom": "Custom / other",
"admin.support.title": "Support Center",
"admin.support.description": "Staff inbox — claim from the queue, filter by scope, open threads, and resolve",
"admin.support.unavailable": "Support queue isnt available. Contact your platform administrator if this persists.",
"admin.support.noTickets": "No tickets in this queue.",
"admin.support.ticketNotFound": "Ticket not found.",
"admin.support.notAvailable": "Support isnt available on this deployment.",
"admin.support.loadFailed": "Unable to load this ticket.",
"admin.support.noMessages": "No messages yet.",
"admin.support.queueScopeAria": "Queue scope",
"admin.support.statusFilterAria": "Status filter",
"admin.support.autoAssistFilterAria": "Auto-assist filter",
"admin.support.searchPlaceholder": "Search subject, email, or company",
"admin.support.searchAria": "Search tickets",
"admin.support.assignStaffAria": "Assign to staff",
"admin.support.aiDraftAria": "AI draft body",
"admin.support.replyPlaceholder": "Write a reply…",
"admin.support.replyAria": "Reply body",
"admin.knowledge.eyebrow": "Platform admin",
"admin.knowledge.title": "Support knowledge",
"admin.knowledge.description": "Structure help articles for FAQ auto-match. Content agents fill bodies — keep facts accurate.",
"admin.knowledge.notReady": "Support knowledge not ready",
"admin.knowledge.noTemplates": "No reply templates",
"admin.knowledge.articleDesc": "Markdown body supports images via secure upload. Do not invent product facts — leave placeholders for content agents.",
"admin.knowledge.templateDesc": "Allowlisted placeholders: subject, category.",
"admin.knowledge.searchPlaceholder": "Search title, slug, keywords…",
"admin.knowledge.searchAria": "Search articles",
"admin.knowledge.publishFilterAria": "Publish status filter",
"admin.knowledge.deleteArticleAria": "Delete article",
"admin.knowledge.deleteTemplateAria": "Delete template",
"admin.support.autoReplyStatus.matched": "FAQ matched",
"admin.support.autoReplyStatus.aiDraft": "AI draft pending",
"admin.support.autoReplyStatus.aiSent": "AI reply sent",
"admin.support.autoReplyStatus.skipped": "Auto skipped",
"admin.support.autoReplyStatus.failed": "Auto failed",
"admin.support.autoReplyStatus.handedOff": "Needs human",
"admin.support.autoReplyStatus.none": "No auto attempt",
"admin.support.autoSource.kb": "Knowledge base",
"admin.support.autoSource.template": "Template",
"admin.support.autoSource.ai": "AI-assisted",
"admin.support.autoSource.automated": "Automated",
"admin.knowledge.categoriesHeading": "Categories",
"admin.knowledge.categoriesHint": "Seeded empty buckets for content agents.",
"admin.knowledge.showingArticles": "Showing {shown} articles (bodies load on edit).",
"admin.knowledge.showingArticlesOf": "Showing {shown} of {total} articles (bodies load on edit).",
"admin.knowledge.templatesHint": "Canned replies with optional {{subject}} / {{category}} placeholders.",
"admin.knowledge.faqAutoMatchTitle": "FAQ auto-match",
"admin.knowledge.faqAutoMatchDesc": "Sync keyword match on ticket create. Default threshold 0.78 (range 0.500.95).",
"admin.knowledge.aiFallbackTitle": "AI fallback",
"admin.knowledge.aiFallbackDesc": "Used when FAQ match is below threshold. Replies use the platform {role} AI role.",
"admin.knowledge.noModel": "no model",
"admin.knowledge.keyLast4": "key …{last4}",
"admin.knowledge.sourceLabel": "source {source}",
"admin.knowledge.apiKeyNote": "API key always comes from this role; overrides above only change provider / model / base URL.",
"admin.knowledge.saveAutoSettings": "Save auto-reply settings",
"admin.knowledge.insertImage": "Insert image",
"admin.knowledge.uploading": "Uploading…",
"admin.knowledge.imageUploadHint": "PNG / JPEG / WebP, max 2 MiB. Stored under UPLOAD_DIR/support-kb (HMAC public URL).",
"admin.knowledge.unavailableMsg": "Support knowledge isnt available on this deployment. Contact your platform administrator.",
"admin.knowledge.loadFailed": "Failed to load support knowledge",
"admin.knowledge.loadArticleFailed": "Failed to load article",
"admin.knowledge.loadTemplateFailed": "Failed to load template",
"admin.knowledge.saveArticleFailed": "Failed to save article",
"admin.knowledge.saveTemplateFailed": "Failed to save template",
"admin.knowledge.deleteArticleFailed": "Failed to delete article",
"admin.knowledge.deleteTemplateFailed": "Failed to delete template",
"admin.knowledge.saveAutoFailed": "Failed to save auto-reply settings",
"admin.knowledge.uploadImageFailed": "Failed to upload image",
"admin.translations.eyebrow": "Platform",
"admin.translations.title": "Translations",
"admin.translations.description": "Review dashboard UI coverage and edit file-based locale packs.",
"admin.translations.unavailable": "Translations unavailable",
"admin.translations.sourceOfTruth": "Source of truth",
"admin.translations.sourceOfTruthLabel": "Source of truth:",
"admin.translations.colLocale": "Locale",
"admin.translations.colTranslated": "Translated",
"admin.translations.colMissing": "Missing",
"admin.translations.colStatus": "Status",
"admin.translations.badgeBase": "Base",
"admin.translations.badgeComplete": "Complete",
"admin.translations.badgeUnregistered": "Unregistered",
"admin.translations.badgeGaps": "Gaps",
"admin.translations.language": "Language",
"admin.translations.show": "Show",
"admin.translations.filterMissing": "Missing only",
"admin.translations.filterTranslated": "Translated only",
"admin.translations.filterAll": "All keys",
"admin.translations.search": "Search",
"admin.translations.searchPlaceholder": "Key or text…",
"admin.translations.noKeysMatch": "No keys match",
"admin.translations.badgeMissing": "Missing",
"admin.translations.badgeUnsaved": "Unsaved",
"admin.translations.english": "English",
"admin.bootstrap.title": "Bootstrap Admin Access",
"admin.bootstrap.description": "Confirm whether your account already has platform admin access. New admins must be granted by an existing administrator.",
"admin.bootstrap.statusTitle": "Platform admin status",
"admin.bootstrap.statusDesc": "Platform admin access is granted by an existing administrator. There is no self-serve bootstrap for this role.",
"admin.bootstrap.alreadyAdmin": "You already have platform admin access.",
"admin.bootstrap.signedInAs": "Signed in as {email}. Open the admin panel to continue.",
"admin.bootstrap.signedInAsShort": "Signed in as {email}",
"admin.bootstrap.notAdminTitle": "Not a platform admin",
"admin.bootstrap.notAdminMsg": "Your account is signed in but is not marked as platform admin. Ask an existing platform admin to grant access, then sign out and sign in again.",
"admin.bootstrap.goToPanel": "Go to Admin Panel",
"admin.bootstrap.loadFailed": "Failed to load profile",
"admin.migrate.title": "Organization migration",
"admin.migrate.description": "This migration tool is retired and does not change any data.",
"admin.migrate.notAvailable": "Not available",
"admin.migrate.body": "Organization migration from the previous identity provider is no longer needed. Companies and local auth are managed in Users & organizations.",
"admin.migrate.hint": "If you opened this from an old bookmark, continue with Users & organizations, Platform billing, or Stuck products instead.",
"admin.migrate.adminHome": "Admin home",
"admin.migrate.users": "Users",
"admin.redirect.diagnostics": "Redirecting to Diagnostics…",
"admin.redirect.stuck": "Redirecting to Stuck products…",
"common.refresh": "Refresh",
"common.delete": "Delete",
"common.clearSearch": "Clear search",
"common.loading": "Loading…",
"common.never": "Never",
"common.back": "Back",
"common.startOver": "Start over",
"common.create": "Create",
"common.required": "Required",
"common.actions": "Actions",
"common.status": "Status",
"common.nameCol": "Name",
"common.products": "Products",
"common.more": "+{count} more",
"feeds.title": "Your Feeds",
"feeds.loadingDesc": "Loading your supplier feeds…",
"feeds.desc": "{page} on this page · {total} total feeds — supplier CSV/XML URLs and uploads. Connect from Stores for guided options.",
"feeds.storesHub": "Stores hub",
"feeds.addFeed": "Add Feed",
"feeds.searchPlaceholder": "Search feeds...",
"feeds.emptyTitle": "Connect your first product feed",
"feeds.emptyMessage": "Add a supplier CSV/XML URL or upload a file. Next you will map columns, then sync products into your catalog.",
"feeds.connectFeed": "Connect feed",
"feeds.uploadCsvCta": "Upload CSV",
"feeds.noMatchTitle": "No matching feeds",
"feeds.noMatchMessage": "Try a different search term, or clear search to see all feeds.",
"feeds.col.source": "Source",
"feeds.col.mapping": "Mapping",
"feeds.col.lastData": "Last sync",
"feeds.copyUrl": "Copy URL",
"feeds.fieldsMapped": "{count} fields",
"feeds.fieldsMappedTitle": "{count} field mapped",
"feeds.fieldsMappedTitlePlural": "{count} fields mapped",
"feeds.mappingsSaved": "Field mappings saved",
"feeds.mapped": "Mapped",
"feeds.notMapped": "Not mapped",
"feeds.notMappedTitle": "No field mappings yet — open Map to configure",
"feeds.productsFromFeed": "{count} products from this feed",
"feeds.noProductsYet": "No products imported from this feed yet",
"feeds.syncing": "Syncing…",
"feeds.syncingShort": "Syncing",
"feeds.syncingHint": "May take a few minutes for large feeds",
"feeds.liveSync": "Feed sync",
"feeds.productData": "Catalog data",
"feeds.mapFields": "Map fields",
"feeds.map": "Map",
"feeds.sync": "Sync",
"feeds.syncNow": "Sync now",
"feeds.syncManualTitle": "Run a one-off sync now. Auto-sync uses the interval set when editing the feed.",
"feeds.syncInProgress": "Sync in progress",
"feeds.addTitle": "Add Feed",
"feeds.addDesc": "Connect a product feed URL or upload a CSV. Use the samples below to match the expected structure.",
"feeds.field.name": "Name",
"feeds.field.namePlaceholder": "My product feed",
"feeds.tab.url": "Feed URL",
"feeds.tab.file": "CSV file",
"feeds.field.url": "Feed URL",
"feeds.field.urlPlaceholder": "https://…",
"feeds.field.type": "Type",
"feeds.field.file": "CSV file",
"feeds.fileHint": "Max 5 MiB. After create, map columns then sync — same flow as URL feeds.",
"feeds.field.interval": "Auto-sync interval (minutes)",
"feeds.field.intervalHint": "How often Descrybe should pull this feed automatically while it is active. Use Sync on the feed list for a one-off pull — that does not change this schedule.",
"feeds.createFeed": "Create Feed",
"feeds.editTitle": "Edit Feed",
"feeds.editDesc": "Update name, type, auto-sync schedule, or source URL. Sync on the feed list runs a one-off pull.",
"feeds.csvSource": "CSV source",
"feeds.uploadedCsv": "Uploaded CSV",
"feeds.replaceFileHint": "To replace the file, create a new feed. Sync re-reads the stored upload.",
"feeds.csvTypeLocked": "Uploaded CSV feeds stay type CSV.",
"feeds.saveChanges": "Save Changes",
"feeds.historyTitle": "Sync History",
"feeds.historyDesc": "Recent sync jobs for “{name}”.",
"feeds.historyLastSynced": "Last successful sync {relative} ({absolute}).",
"feeds.historyNeverSynced": "No successful sync yet.",
"feeds.historyLoading": "Loading sync history…",
"feeds.historyEmpty": "No sync jobs yet.",
"feeds.history.started": "Started",
"feeds.history.completed": "Completed",
"feeds.loadFailed": "Failed to load feeds",
"feeds.copyFailed": "Could not copy URL",
"feeds.created": "Feed created",
"feeds.updated": "Feed updated.",
"feeds.mapBeforeSync": "Map fields before syncing this feed.",
"feeds.activateBeforeSync": "Activate the feed before syncing.",
"feeds.syncFinished": "Sync finished",
"feeds.viewProducts": "View products",
"feeds.processing": "Processing",
"feeds.syncFailed": "Sync failed",
"feeds.statusUpdateFailed": "Could not update status",
"feeds.deleteConfirm": "Delete feed “{name}”? This cannot be undone.",
"feeds.deleted": "Feed deleted.",
"feeds.deleteFailed": "Could not delete feed",
"feeds.historyLoadFailed": "Could not load sync history",
"feeds.ftpUnsupported": "FTP/FTPS sync is not supported. Ask your supplier for a public HTTPS feed URL, upload a CSV feed here, or import a file from Uploads.",
"feeds.ftpUnsupportedShort": "FTP sync not supported",
"feeds.ftpBadge": "FTP",
"feeds.ftpMigrateBanner": "Some feeds still use FTP/FTPS. Descrybe cannot pull those links. Switch to a public HTTPS URL, add a CSV feed, or upload from Uploads.",
"feeds.ftpUploadCta": "Go to Uploads",
"feeds.ftpHttpsCta": "Add HTTPS feed",
"feeds.ftpCsvCta": "Upload CSV feed",
"feeds.status.mappingIncomplete": "Mapping incomplete",
"feeds.status.readyForMapping": "Ready for Mapping",
"feeds.status.mapped": "Mapped",
"feeds.status.active": "Active",
"feeds.status.inactive": "Inactive",
"feeds.status.error": "Error",
"feeds.status.unknown": "Unknown",
"feeds.actions.menu": "Feed actions",
"feeds.actions.menuSyncing": "Feed actions (sync in progress)",
"feeds.actions.editFeed": "Edit Feed",
"feeds.actions.editMapping": "Edit Mapping",
"feeds.actions.syncNow": "Sync Now",
"feeds.actions.syncInProgress": "Sync in progress…",
"feeds.actions.activateToSync": "Activate feed to sync",
"feeds.actions.viewHistory": "View Sync History",
"feeds.actions.deactivate": "Deactivate Feed",
"feeds.actions.activate": "Activate Feed",
"feeds.actions.delete": "Delete Feed",
"feeds.stats.totalFeeds": "Total Feeds",
"feeds.stats.activeMapped": "{active} active · {mapped} mapped",
"feeds.stats.activeOnly": "{active} active",
"feeds.stats.totalProducts": "Imported products",
"feeds.stats.acrossFeeds": "Raw rows across feeds (not catalog + queue)",
"feeds.stats.processed": "In catalog",
"feeds.stats.readyCatalog": "Processed catalog rows — not a share of imported",
"feeds.stats.unprocessed": "Awaiting process",
"feeds.stats.waiting": "Raw queue — not a share of imported",
"feeds.format.howTo": "How to structure your feed",
"feeds.format.required": "Required:",
"feeds.preview.title": "Feed source preview",
"feeds.preview.truncated": "Truncated",
"feeds.preview.refresh": "Refresh preview",
"feeds.preview.copy": "Copy preview",
"feeds.preview.loading": "Loading preview…",
"feeds.preview.empty": "Extract schema to preview the feed source.",
"feeds.schema.search": "Search fields…",
"feeds.schema.fieldName": "Field name",
"feeds.schema.sourcePath": "Source path",
"feeds.schema.confirm": "Confirm",
"feeds.schema.apply": "Apply",
"feeds.preflight.missingItemPath": "First, choose the repeating product block in your feed (the product element path).",
"feeds.preflight.emptyMappings": "Connect at least one feed column to a product field so we know what to import.",
"feeds.preflight.missingRequired": "These required product fields still need a mapping: {fields}.",
"feeds.preflight.unknownSource": "We could not find these columns in the latest extract: {fields}{more}. Re-extract the schema or pick different sources.",
"feeds.preflight.emptySample": "These required fields are mapped, but sample values look empty: {fields}. Double-check the source columns.",
"feeds.preflight.fix": "Finish the mapping checklist below, then try again.",
"mapping.title": "Feed Mapping",
"mapping.titleNamed": "Map: {name}",
"mapping.description": "Select the repeating product element, extract source fields, then map them to Descrybe product fields.",
"mapping.autoMap": "Auto-map",
"mapping.fuzzy": "{count} fuzzy",
"mapping.extractSchema": "Extract schema",
"mapping.backToFeeds": "Back to Feeds",
"mapping.ftpStillEdit": "{message} You can still edit mappings. To refresh products, switch this feed to HTTPS or upload a file.",
"mapping.ftpUploadCta": "Go to Uploads",
"mapping.ftpHttpsCta": "Add HTTPS feed",
"mapping.ftpCsvCta": "Upload CSV feed",
"mapping.loading": "Loading feed details…",
"mapping.step1": "Select Product Element",
"mapping.step2": "Map Fields",
"mapping.step1Heading": "Step 1: Select Product Element",
"mapping.csvHint": "CSV feeds use column headers as source fields. Extract the schema to load columns, then continue to map them.",
"mapping.howToSelect": "How to select the product element",
"mapping.howToHint": "Optional guide",
"mapping.howTo.1": "Extract schema or click a repeating tag in the preview",
"mapping.howTo.2": "Each element should contain details for a single product",
"mapping.howTo.3": "Confirm the path (for example",
"mapping.howTo.4": "Continue to map source fields to product fields",
"mapping.productElementPath": "Product Element Path",
"mapping.pathPlaceholder": "e.g. rss/channel/item or products/product",
"mapping.continue": "Continue →",
"mapping.continueFields": "Continue to field mapping →",
"mapping.discovered": "Discovered {fields} source fields from {rows} sample row(s).",
"mapping.suggestionsCount": "· {count} auto-mapping suggestion(s)",
"mapping.step2Heading": "Step 2: Map Fields",
"mapping.requiredFieldsBadge": "{count} Required Fields",
"mapping.unmappedRequired": "{count} unmapped required",
"mapping.sourceFieldsBadge": "{count} source fields",
"mapping.suggestedBadge": "{count} suggested",
"mapping.step2Help": "Match each important column from your feed to a Descrybe product field. Required fields are marked with *. Hover the help icon for a short tip.",
"mapping.requiredFields": "Required fields",
"mapping.requiredMapped": "{mapped} of {total} mapped",
"mapping.requiredProgressDone": "All required fields mapped — ready for the next step.",
"mapping.requiredProgressHint": "Fields marked * must be mapped before this feed can sync products.",
"mapping.requiredProgressAria": "Required field progress: {mapped} of {total} mapped",
"mapping.nextAfterSaveReady": "Mappings saved. Next, sync a small sample to check products look right.",
"mapping.nextAfterSaveIncomplete": "Mappings saved. Finish the remaining required fields, then sync a sample.",
"mapping.nextCtaSyncSample": "Sync + process sample",
"mapping.nextCtaFinishRequired": "Show missing required fields",
"mapping.highConfidence": "{count} high-confidence mapping ready",
"mapping.highConfidencePlural": "{count} high-confidence mappings ready",
"mapping.highConfidenceHelp": "Exact and alias matches (for example EAN → GTIN). Apply all, or accept per-row chips in the table.",
"mapping.reviewMappings": "Review mappings",
"mapping.needItemPath": "Enter a product element path before mapping fields.",
"mapping.removeMapping": "Remove mapping",
"mapping.sourcePlaceholder": "column name or xpath",
"mapping.processAfterSync": "Products to process after sync",
"mapping.noFuzzyLeft": "No fuzzy matches left to confirm.",
"mapping.syncedQueued": "Synced feed and queued {queued} product(s) for processing{jobId}.",
"mapping.saveMappings": "Save Mappings",
"mapping.syncProcessSample": "Sync + Process sample",
"mapping.badgeCsv": "CSV",
"mapping.requiredAria": "Required fields help",
"mapping.applySuggestions": "Apply suggestions ({count})",
"mapping.confirmFuzzy": "Confirm fuzzy ({count})",
"mapping.fuzzyNeedConfirm": "{count} fuzzy match needs confirm",
"mapping.fuzzyNeedConfirmPlural": "{count} fuzzy matches need confirm",
"mapping.fuzzyHelp": "Low-confidence name matches are not applied automatically. Confirm here or accept per-row in the table.",
"mapping.missingRequiredTitle": "Still need to connect these required fields:",
"mapping.applyTip": "Tip: Apply suggestions above — many required fields match common source names.",
"mapping.formatLabel": "Format:",
"mapping.itemPathLabel": "Item path:",
"mapping.reExtract": "Re-extract",
"mapping.manualRows": "Manual rows",
"mapping.schemaTable": "Schema table",
"mapping.addField": "Add field",
"mapping.noSchemaYet": "No extracted schema yet.",
"mapping.orManualRows": "or use manual rows below.",
"mapping.sourceField": "Source field",
"mapping.selectSource": "Select source…",
"mapping.mapsTo": "Maps to",
"mapping.none": "None",
"mapping.backToItem": "← Back to Item Selection",
"mapping.unsaved": "Unsaved changes",
"mapping.requiredFieldsColon": "Required fields:",
"mapping.sampleOptions": "Sample options",
"mapping.sampleSize": "Sample size",
"mapping.noExactAlias": "No exact/alias suggestions to apply. Review fuzzy matches below.",
"mapping.noSuggestionsExtract": "No suggestions available — extract the schema first.",
"mapping.schemaExtracted": "Schema extracted: {fields} fields from {rows} sample row(s).",
"mapping.saved": "Field mappings saved{version}.",
"mapping.savedVersion": " (v{version})",
"mapping.syncNoProducts": "Sync finished; no products to process.",
"mapping.jobSuffix": " (job {jobId})",
"mapping.appliedReplace": "Applied {count} {kind} mapping(s).",
"mapping.appliedNew": "Applied {count} new {kind} mapping(s) ({total} total).",
"mapping.kindHighConfidence": "high-confidence",
"mapping.kindFuzzy": "fuzzy",
"mapping.fuzzyConfirmFlash": "{count} fuzzy match need confirm — use Confirm fuzzy below or per-row chips.",
"mapping.fuzzyConfirmFlashPlural": "{count} fuzzy matches need confirm — use Confirm fuzzy below or per-row chips.",
"mapping.formatHelp.title": "How to structure your feed",
"mapping.formatHelp.required": "Required:",
"mapping.formatHelp.requiredBody": "{gtin} (EAN/UPC), {title} (or {name}), {brand}",
"mapping.formatHelp.https": "Use public HTTPS URLs for remote feeds (not FTP or localhost). CSV upload works for local files.",
"mapping.formatHelp.specs": "Specs as Label: value pairs (e.g. {ram}). Dimensions: {height}, {width}, {depth}, {mass}",
"mapping.formatHelp.also": "Also supported: prices, stock, images, category, warranty, EPREL ID, HTML descriptions, extra images, video URL, and more — download the full sample.",
"mapping.formatHelp.downloadXml": "Download sample XML",
"mapping.formatHelp.downloadCsv": "Download sample CSV",
"mapping.formatHelp.xmlExample": "XML example",
"mapping.formatHelp.csvExample": "CSV example (header + rows)",
"mapping.sourcePreview.title": "Feed source preview",
"mapping.sourcePreview.truncated": "Truncated",
"mapping.sourcePreview.refresh": "Refresh preview",
"mapping.sourcePreview.copy": "Copy preview",
"mapping.sourcePreview.loading": "Loading feed sample…",
"mapping.sourcePreview.errorHint": "You can still enter the product element path manually. Extract schema when the feed URL is reachable.",
"mapping.sourcePreview.retry": "Retry",
"mapping.sourcePreview.empty": "No preview yet",
"mapping.sourcePreview.emptyHintXml": "Click “Extract schema” to download a sample and discover fields, or enter an item path manually.",
"mapping.sourcePreview.emptyHintCsv": "Click “Extract schema” to download a sample and discover fields.",
"mapping.sourcePreview.selectPath": "Select path: {path}",
"mapping.sourcePreview.clickTag": "Click a tag line to set the product element path.",
"mapping.table.search": "Search fields…",
"mapping.table.all": "All fields",
"mapping.table.mapped": "Mapped",
"mapping.table.unmapped": "Unmapped",
"mapping.table.fieldName": "Field name",
"mapping.table.sourcePath": "Source path",
"mapping.table.sampleValues": "Sample values",
"mapping.table.type": "Type",
"mapping.table.mapTo": "Map to",
"mapping.table.emptySchema": "Extract the feed schema to populate source fields, or add mappings manually.",
"mapping.table.noMatch": "No fields match your criteria.",
"mapping.table.unique": "{count} unique",
"mapping.table.nested": "nested",
"mapping.table.apply": "Apply",
"mapping.table.confirm": "Confirm",
"mapping.table.suggestedMatch": "Suggested {confidence} match",
"mapping.table.confirmFuzzyMatch": "Confirm fuzzy match ({percent}%)",
"mapping.preview.title": "Mapping preview",
"mapping.preview.subtitle": "Sample product shape from your current field mappings",
"mapping.preview.usingSamples": "· using extracted samples",
"mapping.preview.formatCsv": "format: csv",
"mapping.preview.item": "item: {path}",
"mapping.preview.sourceFields": "· {count} source fields",
"mapping.preview.empty": "No fields mapped yet",
"mapping.preview.emptyHint": "Map source columns or XPath nodes to product fields. A sample product preview will appear here.",
"mapping.preview.rawSample": "Raw sample snippet",
"imports.title": "Uploads",
"imports.description": "CSV imports saved for this workspace — products, categories, and attributes.",
"imports.importProducts": "Import products",
"imports.emptyTitle": "No uploads yet",
"imports.emptyMessage": "Product, category, and attribute CSV imports will show up here after you upload them.",
"imports.goProducts": "Go to products",
"imports.categories": "Categories",
"imports.recent": "Recent uploads",
"imports.fileCount": "{count} file",
"imports.fileCountPlural": "{count} files",
"imports.col.fileName": "File name",
"imports.col.kind": "Kind",
"imports.col.uploaded": "Uploaded",
"imports.col.size": "Size",
"imports.actions": "Upload actions",
"imports.loadFailed": "Failed to load uploads",
"imports.metadataOnlyNotice": "{count} upload records are metadata-only — file bytes were not migrated. Re-upload or resync storage if you need the originals.",
"imports.metadataOnlyBadge": "Metadata only (blob not migrated)",
"imports.deleteConfirm": "Delete “{name}”? This removes the upload record (and local blob when present).",
"imports.deleted": "Upload deleted.",
"imports.deleteFailed": "Could not delete upload",
"imports.status.uploaded": "Uploaded",
"reviews.redirectLoading": "Opening WooCommerce reviews…",
"reviews.tab": "Reviews",
"reviews.syncTitle": "Reviews import (store → Descrybe)",
"reviews.syncDesc": "Inbound import — pull WooCommerce product reviews into Descrybe for campaign and reputation workflows",
"reviews.syncQueued": "Reviews sync queued",
"reviews.statusBadge": "Reviews: {status}",
"reviews.syncedCount": "{count} synced",
"reviews.lastSync": "Last sync: {date}",
"reviews.noSyncYet": "No reviews sync has completed yet.",
"reviews.needsReconnect": "Reviews import cannot run until credentials are reconnected after migration. On the Connection tab: Save, then Test Connection.",
"reviews.queueImport": "Queue reviews import (store → Descrybe)",
"reviews.queueing": "Queueing...",
"reviews.saveTestFirst": "Save credentials and Test Connection before queueing sync",
"reviews.refreshList": "Refresh list",
"reviews.loading": "Loading reviews…",
"reviews.emptyTitle": "No reviews yet",
"reviews.emptyMessage": "Queue a reviews sync after connecting your store. This tab stays usable with an empty list.",
"reviews.col.product": "Product",
"reviews.col.reviewer": "Reviewer",
"reviews.col.rating": "Rating",
"reviews.col.review": "Review",
"reviews.queuedSuccess": "Reviews sync queued. Sync will run shortly.",
"reviews.queueFailed": "Could not queue reviews sync",
"campaigns.title": "Campaigns",
"campaigns.description": "Build seasonal email campaigns from your catalog — choose a season, pick products, set the audience, then generate.",
"campaigns.new": "New campaign",
"campaigns.loading": "Loading campaigns…",
"campaigns.loadFailed": "Failed to load campaigns",
"campaigns.deleteConfirm": "Delete campaign “{name}”? This cannot be undone.",
"campaigns.deleted": "Campaign deleted",
"campaigns.deleteFailed": "Failed to delete campaign",
"campaigns.partialUnavailable": "Campaigns arent fully reachable right now. Generate and send may fail until the service is back.",
"campaigns.searchPlaceholder": "Search campaigns…",
"campaigns.unavailableTitle": "Campaigns unavailable",
"campaigns.unavailableMessage": "The campaigns service isnt reachable right now. You can open the create wizard, but generate and send will wait until the service is back.",
"campaigns.openWizard": "Open create wizard",
"campaigns.backDashboard": "Back to dashboard",
"campaigns.browseProducts": "Browse products",
"campaigns.emptyTitle": "No campaigns yet",
"campaigns.noMatches": "No matches",
"campaigns.emptyMessage": "Create a Black Friday, Christmas, or custom campaign in a few steps — seasonal defaults are ready to start from.",
"campaigns.noMatchesMessage": "Try a different name, season, or status.",
"campaigns.create": "Create campaign",
"campaigns.col.season": "Season",
"campaigns.col.updated": "Updated",
"campaigns.scheduled": "Scheduled {date}",
"campaigns.newTitle": "New campaign",
"campaigns.newDesc": "Choose a season, select products and audience, write the prompt, then generate, test, and schedule.",
"campaigns.editTitle": "Edit campaign",
"campaigns.editDesc": "Update the season, products, and audience — then regenerate, send a test, or schedule.",
"campaignWizard.loading": "Loading campaign wizard…",
"campaignWizard.apiMissing": "Campaigns API is temporarily unavailable. You can explore the wizard; save / generate / send need a reachable /api/campaigns.",
"campaignWizard.upgradeTitle": "AI campaigns are a paid feature",
"campaignWizard.upgradeMessage": "Free plans can prepare seasons and audiences, but Generate AI requires Starter or higher. Upgrade to unlock AI email drafts.",
"campaignWizard.comparePlans": "Compare plans",
"campaignWizard.step.season": "Season",
"campaignWizard.step.catalog": "Products",
"campaignWizard.step.audience": "Audience",
"campaignWizard.step.prompt": "Prompt",
"campaignWizard.step.preview": "Preview",
"campaignWizard.step.send": "Send",
"campaignWizard.pickSeason": "Pick a season",
"campaignWizard.pickSeasonHelp": "Start from a template — you can edit everything later.",
"campaignWizard.name": "Campaign name",
"campaignWizard.namePlaceholder": "Black Friday 2026",
"campaignWizard.catalogTitle": "Categories & products",
"campaignWizard.catalogHelp": "Select what this email should feature. Categories alone are enough for a quick start.",
"campaignWizard.categories": "Categories",
"campaignWizard.noCategories": "No categories yet — add some under Catalog.",
"campaignWizard.categoriesSelected": "{count} category selected",
"campaignWizard.categoriesSelectedPlural": "{count} categories selected",
"campaignWizard.productsOptional": "Products (optional)",
"campaignWizard.selectedCount": "{count} selected",
"campaignWizard.searchProducts": "Search products…",
"campaignWizard.noProducts": "No products found.",
"campaignWizard.audienceTitle": "Who should receive this?",
"campaignWizard.audienceHelp": "Defaults to everyone. Narrow with categories or past buyers when orders are synced.",
"campaignWizard.audience.all": "All contacts",
"campaignWizard.audience.allHint": "Send to your full list (when email provider is configured).",
"campaignWizard.audience.byCategory": "By category interest",
"campaignWizard.audience.byCategoryHint": "People associated with selected categories.",
"campaignWizard.audience.purchased": "Purchased in category",
"campaignWizard.audience.purchasedHint": "Customers who bought products in the audience categories (from synced orders).",
"campaignWizard.audience.notPurchased": "Not purchased yet",
"campaignWizard.audience.notPurchasedHint": "Contacts who have not bought those categories — great for win-back.",
"campaignWizard.ordersHint": "Purchased / not-purchased targeting appears after WooCommerce orders are synced.",
"campaignWizard.audienceCategories": "Audience categories",
"campaignWizard.promptTitle": "Email prompt",
"campaignWizard.promptHelp": "We filled a solid default for {season}. Edit freely, or keep it.",
"campaignWizard.promptSeasonFallback": "this season",
"campaignWizard.useDefaultPrompt": "Use default seasonal prompt",
"campaignWizard.promptLabel": "Prompt",
"campaignWizard.advanced": "Advanced options",
"campaignWizard.advancedHelp": "AI generation uses your brand kit (if set) and selected products. Template-only preview skips AI and works as a layout stub.",
"campaignWizard.planFree": "Free",
"campaignWizard.planPaid": "Paid",
"campaignWizard.planLine": "Plan:",
"campaignWizard.aiLocked": "— Generate AI is locked.",
"campaignWizard.generateAi": "Generate AI",
"campaignWizard.templatePreview": "Template preview",
"campaignWizard.saveDraft": "Save draft",
"campaignWizard.previewTitle": "Preview",
"campaignWizard.status": "Status:",
"campaignWizard.generateToSee": "Generate a draft to see the email body.",
"campaignWizard.noPreview": "No preview yet. Go back to Prompt and run Generate AI or Template preview.",
"campaignWizard.backToPrompt": "Back to prompt",
"campaignWizard.subject": "Subject",
"campaignWizard.emailPreview": "Email preview",
"campaignWizard.regenerateAi": "Regenerate with AI",
"campaignWizard.regenerate": "Regenerate",
"campaignWizard.continueSend": "Continue to send",
"campaignWizard.testSend": "Test send",
"campaignWizard.testSendHelp": "Send one copy to yourself before scheduling.",
"campaignWizard.testEmail": "Test email",
"campaignWizard.testEmailPlaceholder": "you@company.com",
"campaignWizard.sendTest": "Send test",
"campaignWizard.scheduleTitle": "Schedule",
"campaignWizard.scheduleHelp": "Pick when this campaign should go out.",
"campaignWizard.sendAt": "Send at",
"campaignWizard.schedule": "Schedule campaign",
"campaignWizard.generateToContinue": "Generate to continue",
"campaignWizard.done": "Done",
"campaignWizard.loadFailed": "Failed to load wizard",
"campaignWizard.pickCatalog": "Pick at least one category or product",
"campaignWizard.pickAudienceCats": "Pick audience categories for this filter",
"campaignWizard.completeStep": "Complete this step to continue",
"campaignWizard.aiDraftReady": "AI draft generated",
"campaignWizard.templateReady": "Template preview ready",
"campaignWizard.unavailableSave": "Campaigns are not available right now. Drafts cannot be saved until the feature is live.",
"campaignWizard.generateFailed": "Generate failed",
"campaignWizard.generateFirst": "Generate a preview first",
"campaignWizard.enterTestEmail": "Enter a test email address",
"campaignWizard.testFailed": "Test send failed",
"campaignWizard.pickSchedule": "Pick a schedule date and time",
"campaignWizard.scheduled": "Campaign scheduled",
"campaignWizard.scheduleFailed": "Schedule failed",
"campaignWizard.draftSaved": "Draft saved",
"campaignWizard.unavailableShort": "Campaigns are not available right now.",
"campaignWizard.saveFailed": "Save failed",
"marketing.calendarTitle": "Content calendar",
"marketing.calendarDesc": "Link seasonal campaigns to dates, then prepare an export feed with shopping defaults.",
"marketing.loadFailed": "Failed to load calendar",
"marketing.prepared": "Campaign prepared",
"marketing.alreadyReady": "Campaign already ready",
"marketing.exportFeedsHint": "{name} → Export Feeds",
"marketing.prepareFailed": "Could not prepare campaign",
"marketing.requestFailed": "Request failed",
"marketing.emptyTitle": "No seasonal presets",
"marketing.emptyMessage": "Calendar presets will appear here when the marketing API is available.",
"marketing.openCampaigns": "Open email campaigns",
"marketing.window": "Window:",
"marketing.linkedExport": "Linked export:",
"marketing.openPrepared": "Open prepared feed",
"marketing.preparing": "Preparing…",
"marketing.prepareNamed": "Prepare {name} campaign",
"marketing.footer": "Email campaigns stay at {link} — this page only prepares catalog export feeds.",
"common.done": "Done",
"common.copied": "Copied to clipboard.",
"common.copyFailed": "Could not copy. Select the text and copy manually.",
"common.submitting": "Submitting…",
"common.sending": "Sending…",
"settings.companyAdminOnlyView": "Only company admins can change company settings. You can view the current workspace details.",
"settings.activeCompanyHelp": "Workspace used for catalog, feeds, billing, and API keys. Switch anytime from here or the header.",
"settings.noCompanySelected": "No company selected",
"settings.creditsOverviewHelp": "AI credit balance for the active company. Detailed usage lives on Billing.",
"settings.billingLabel": "Billing",
"settings.remainingLabel": "Remaining",
"settings.creditsUnavailable": "Credit balance is unavailable for this workspace yet.",
"settings.openBilling": "Open usage & billing",
"settings.companyNameHelp": "This name appears in invitations and organization settings",
"settings.contentSettingsHelp": "Configure language and product matching for generated content",
"settings.mergeProductsHelp": "When enabled, CSV imports combine rows that share a GTIN into one product. Turn off to keep each row independent.",
2026-08-17 00:53:51 +02:00
"settings.emailIntegrationHelp": "Set up Resend or SMTP for campaigns and transactional mail.",
"settings.configureEmail": "Configure email",
"settings.aiIntegrationsHelp": "Platform credits or your own key, plus editable prompts for titles, descriptions, SEO, and campaigns. Encrypted keys at rest.",
"settings.openAiIntegrations": "Open AI integrations",
"settings.companyNameRequired": "Enter a company name.",
"settings.companySaved": "Company settings saved.",
"settings.companyUpdateFailed": "Could not update company",
"settings.mergeOn": "Products with the same GTIN will be merged across feeds.",
"settings.mergeOff": "Products with the same GTIN stay separate.",
"settings.mergeUpdateFailed": "Could not update merge setting",
"settings.inAppToastsHelp": "Stored in this browser only. Failures are on by default; completions are muted to reduce noise. Form feedback and Undo actions are never muted.",
"settings.emailAlertsHelp": "Email alert preferences are coming soon. Failure alerts will default on (like in-app); completion emails stay off unless you opt in.",
"settings.emailAlertsBody": "For now, configure transactional mail under Company → Email integration. In-app alerts above still apply.",
"settings.apiKeysLegacyNotice": "Legacy API keys were not migrated. Create a new key to restore API access — the secret is shown only once.",
2026-08-17 09:33:07 +02:00
"settings.apiKeysAdminOnly": "Only company admins can create, rename, or revoke API keys. You can view existing key prefixes.",
"settings.apiKeysCopyUnavailableNotice": "After you create a key, copy the full secret immediately (or from the row menu while this page stays open). Existing keys only store a prefix — create a new key if you lost the secret.",
"settings.apiKeysForbidden": "You don't have permission to view API keys. Ask a company admin for help.",
"settings.noApiKeys": "No API keys yet",
"settings.noApiKeysHelpAdmin": "Legacy API keys were not migrated. Create a new key to authenticate Descrybe API requests (X-API-Key). The full secret is shown only once.",
"settings.noApiKeysHelpMember": "No API keys for this company yet. Legacy keys were not migrated — ask a company admin to create one.",
"settings.unnamedKey": "Unnamed Key",
"settings.neverUsed": "Never used",
"settings.apiKeyActions": "API key actions",
2026-08-17 09:33:07 +02:00
"settings.renameApiKey": "Rename",
"settings.renameApiKeyTitle": "Rename API key",
"settings.renameApiKeyHelp": "Update the display name for this key. The secret itself does not change.",
"settings.saveRename": "Save name",
"settings.copyApiKey": "Copy secret",
"settings.copyUnavailable": "Copy unavailable",
2026-08-17 09:33:07 +02:00
"settings.copyUnavailableTitle": "Full secret is shown only once when the key is created (kept copyable on this page until you refresh)",
"settings.revoke": "Revoke",
"settings.apiKeyNameRequired": "Enter a name for this API key.",
"settings.apiKeyCreatedOnce": "API key created. Copy it now - it won't be shown again.",
"settings.apiKeyCreated": "API key created.",
"settings.apiKeyCreateFailed": "Could not create API key",
2026-08-17 09:33:07 +02:00
"settings.apiKeyRenamed": "API key renamed.",
"settings.apiKeyRenameFailed": "Could not rename API key",
"settings.apiKeyRevokeConfirm": "Revoke this API key? Requests using it will stop working.",
"settings.apiKeyRevoked": "API key revoked.",
"settings.apiKeyRevokeFailed": "Could not revoke API key",
"settings.apiKeyCopied": "API key copied.",
"settings.createApiKeyOnceHelp": "Copy this key now — it won't be shown again. Use it as Authorization: Bearer or X-API-Key on /api/v1.",
"settings.createApiKeyNameHelp": "Name the key so you can tell it apart later. After create, send it as Authorization: Bearer (preferred) or X-API-Key.",
"settings.keyNamePlaceholder": "e.g. Production",
"settings.newApiKeyAria": "New API key shown once",
"settings.copyApiKeyAria": "Copy API key",
"settings.alert.sync_fail.title": "Sync failures",
"settings.alert.sync_fail.description": "When a feed sync times out or the API returns an error.",
"settings.alert.sync_done.title": "Sync completed",
"settings.alert.sync_done.description": "When a feed sync finishes successfully.",
"settings.alert.ai_fail.title": "AI / processing failures",
"settings.alert.ai_fail.description": "When starting or running a processing job fails.",
"settings.alert.ai_done.title": "AI / processing completed",
"settings.alert.ai_done.description": "When a background processing job finishes successfully. Job-start toasts stay always-on so Undo remains available.",
"settings.alert.export_fail.title": "Export failures",
"settings.alert.export_fail.description": "When a product or export-feed export fails.",
"settings.alert.export_done.title": "Export completed",
"settings.alert.export_done.description": "When an export finishes successfully.",
"settings.alert.support_reply.title": "Support staff replies",
"settings.alert.support_reply.description": "When a platform agent replies to your support ticket.",
"settings.alert.support_status.title": "Support status changes",
"settings.alert.support_status.description": "When a support ticket moves to pending or resolved.",
"empty.forbidden.title.company": "Permission denied",
"empty.forbidden.title.platform": "Access restricted",
"empty.forbidden.message.company": "You dont have permission for this. Ask a company admin for help.",
"empty.forbidden.message.platform": "This area is only available to platform admins.",
"empty.forbidden.message.support": "This area is only available to support staff and platform admins.",
"empty.forbidden.backDashboard": "Back to dashboard",
"empty.forbidden.apiKeys": "You dont have permission to view API keys. Ask a company admin for help.",
"empty.forbidden.ai": "You dont have permission to view AI provider settings. Ask a company admin for help.",
"empty.forbidden.email": "You dont have permission to view email provider settings. Ask a company admin for help.",
"confirm.defaultTitle": "Confirm Deletion",
"confirm.defaultDescription": "Are you sure?",
"confirm.defaultConfirm": "Confirm",
"confirm.deleteFeed": "Delete feed “{name}”? This cannot be undone.",
"confirm.deleteCampaign": "Delete campaign “{name}”? This cannot be undone.",
"confirm.deleteExportFeed": "Are you sure you want to delete this export feed?",
"confirm.rotateExportToken": "Rotate this feed URL token? The old public URL will stop working immediately.",
"confirm.deleteUpload": "Delete “{name}”? This removes the upload record (and local blob when present).",
"confirm.revokeApiKey": "Revoke this API key? Requests using it will stop working.",
"confirm.deleteKnowledgeArticle": "Delete this knowledge article?",
"confirm.deleteReplyTemplate": "Delete this reply template?",
"confirm.deleteStructuredField": "Are you sure you want to delete this field? This action cannot be undone.",
"toast.campaign.pickAudience": "Pick at least one category or product",
"toast.campaign.pickCategories": "Pick audience categories for this filter",
"toast.campaign.completeStep": "Complete this step to continue",
"toast.campaign.aiDraft": "AI draft generated",
"toast.campaign.templatePreview": "Template preview ready",
"toast.campaign.generateFirst": "Generate a preview first",
"toast.campaign.testSent": "Test email sent to {email}",
"toast.campaign.scheduled": "Campaign scheduled",
"toast.campaign.draftSaved": "Draft saved",
"toast.campaign.deleted": "Campaign deleted",
"toast.campaign.prepared": "Campaign prepared",
"toast.campaign.alreadyReady": "Campaign already ready",
"toast.campaign.prepareFailed": "Could not prepare campaign",
"toast.campaign.deleteFailed": "Failed to delete campaign",
"toast.feed.copyFailed": "Could not copy URL",
"toast.feed.created": "Feed created",
"toast.feed.updated": "Feed updated.",
"toast.feed.mapBeforeSync": "Map fields before syncing this feed.",
"toast.feed.activateBeforeSync": "Activate the feed before syncing.",
"toast.feed.syncFinished": "Sync finished",
"toast.feed.deleted": "Feed deleted.",
"toast.feed.mappingLoadFailed": "Could not load field mappings. Open mapping to fix before syncing.",
"toast.feed.syncFailed": "Sync failed",
"toast.feed.statusFailed": "Could not update status",
"toast.feed.deleteFailed": "Could not delete feed",
"toast.feed.beforeSampling": "Before sampling",
"toast.processing.jobCompleted": "Processing finished",
"toast.processing.jobFailed": "Processing failed",
"toast.products.startFailed": "Could not start processing",
"toast.products.jobStarted": "Processing job started",
"toast.products.acceptUndone": "Accept undone",
"toast.products.resetComplete": "Reset complete",
"toast.products.nameAcceptUndone": "Name accept undone",
"toast.products.descAcceptUndone": "Description accept undone",
"toast.products.cancelOne": "Processing cancelled",
"toast.products.cancelMany": "Processing jobs cancelled",
"toast.products.startJobFailed": "Could not start processing job",
"toast.products.acceptFailed": "Could not accept enrichment",
"toast.products.updateFailed": "Could not update product",
"toast.products.undoAcceptFailed": "Could not undo accept",
"toast.products.undoFieldAcceptFailed": "Could not undo field accept",
"toast.products.undoFieldDiscardFailed": "Could not undo field discard",
"toast.products.rejectFailed": "Could not reject enrichment",
"toast.products.exportFailed": "Could not export selected products",
"toast.products.resetFailed": "Could not reset products",
"toast.products.cancelFailed": "Could not cancel processing job",
"toast.support.ticketCreated": "Ticket created",
"toast.support.replySent": "Reply sent",
"toast.support.thanksFeedback": "Thanks for your feedback",
"toast.support.createFailed": "Could not create ticket",
"toast.support.unavailable": "Support unavailable",
"toast.support.loadFailed": "Failed to load support tickets",
"toast.support.loadTicketFailed": "Failed to load ticket",
"toast.support.replyFailed": "Could not send reply",
"toast.support.ratingUnavailable": "Rating unavailable",
"toast.support.alreadyRated": "Already rated",
"toast.support.ratingFailed": "Could not submit rating",
"toast.structured.fieldAdded": "Field added",
"toast.structured.fieldAddedBody": "The structured description field has been added.",
"toast.structured.fieldDeleted": "Field deleted",
"toast.structured.fieldDeletedBody": "The structured description field has been deleted.",
"toast.structured.addFailed": "Failed to add field",
"toast.structured.deleteFailed": "Failed to delete field",
"toast.brand.saved": "Brand kit saved",
"toast.brand.logoUploaded": "Logo uploaded",
"toast.brand.saveFailed": "Failed to save brand kit",
"toast.brand.uploadFailed": "Failed to upload logo",
"toast.vector.indexCreated": "Vector index created successfully",
"toast.vector.dbInitialized": "Vector database initialized successfully",
"toast.vector.indexFailed": "Failed to create vector index",
"toast.vector.initFailed": "Failed to initialize vector database",
"toast.vector.searchFailed": "Failed to search categories",
"toast.export.refreshFailed": "Failed to refresh the feed",
"toast.mapping.loadFailed": "Failed to load feed mapping",
"toast.mapping.extractFailed": "Failed to extract schema",
"toast.mapping.saveFailed": "Failed to save field mappings",
"toast.mapping.sampleFailed": "Sync + process sample failed",
"toast.attrs.createFailed": "Create failed",
"toast.attrs.importFailed": "Import failed",
"toast.attrs.updateFailed": "Update failed",
"toast.attrs.deleteFailed": "Delete failed",
"toast.switcher.loadUsersFailed": "Could not load switchable users",
"toast.switcher.switchFailed": "Could not switch user",
"toast.switcher.returnFailed": "Could not return to original user",
"toast.switcher.companyFailed": "Could not switch company",
"toast.requestFailed": "Request failed",
"flash.campaign.unavailableDraft": "Campaigns are not available right now. Drafts cannot be saved until the feature is live.",
"flash.campaign.testEmailRequired": "Enter a test email address",
"flash.campaign.scheduleRequired": "Pick a schedule date and time",
"flash.campaign.unavailable": "Campaigns are not available right now.",
"flash.campaign.generateFailed": "Generate failed",
"flash.campaign.testFailed": "Test send failed",
"flash.campaign.scheduleFailed": "Schedule failed",
"flash.campaign.saveFailed": "Save failed",
"flash.feed.copyFailed": "Could not copy URL",
"flash.feed.csvRequired": "Please choose a .csv file.",
"flash.feed.csvFileRequired": "Please choose a CSV file.",
"flash.feed.urlRequired": "Feed URL is required.",
"flash.feed.updated": "Feed updated.",
"flash.feed.syncFinishedNamed": "Sync finished for \"{name}\" ({status}: {products}).",
"flash.feed.deleted": "Feed deleted.",
"flash.feed.createFailed": "Could not create feed",
"flash.feed.updateFailed": "Could not update feed",
"flash.settings.companyNameRequired": "Enter a company name.",
"flash.settings.companySaved": "Company settings saved.",
"flash.settings.companyFailed": "Could not update company",
"flash.settings.mergeFailed": "Could not update merge setting",
"flash.settings.apiKeyNameRequired": "Enter a name for this API key.",
"flash.settings.apiKeyCreatedFailed": "Could not create API key",
"flash.settings.apiKeyRevoked": "API key revoked.",
"flash.settings.apiKeyRevokeFailed": "Could not revoke API key",
2026-08-17 09:33:07 +02:00
"flash.settings.apiKeyRenameFailed": "Could not rename API key",
"flash.settings.copyFailed": "Could not copy. Select the text and copy manually.",
"flash.products.accepted": "Accepted {count} product(s) — moved to Processed.",
"flash.products.updated": "Product updated.",
"flash.products.enrichmentAccepted": "Enrichment accepted — moved to Processed.",
"flash.products.originalEmpty": "Original value is empty; enrichment cannot be cleared via PATCH.",
"flash.products.selectExport": "Select at least one product to export.",
"flash.products.exported": "Exported {count} product(s) via export feed.",
"flash.support.missingId": "Missing ticket id",
"flash.support.notFound": "Ticket not found",
"flash.support.unavailable": "Support is temporarily unavailable.",
"flash.support.ratingUnavailable": "Rating is temporarily unavailable. Please try again later.",
"flash.support.alreadyRated": "You already rated this ticket.",
"flash.support.queueUnavailable": "Support queue isnt available on this deployment.",
"flash.support.deploymentUnavailable": "Support isnt available on this deployment.",
"flash.support.replyRequired": "Reply body is required.",
"flash.support.draftRequired": "Draft body is required before approving.",
"flash.support.claimed": "Ticket claimed.",
"flash.support.unassigned": "Ticket unassigned.",
"flash.support.assigneeCleared": "Assignee cleared.",
"flash.support.assigneeUpdated": "Assignee updated.",
"flash.support.draftApproved": "AI draft approved and sent to the customer.",
"flash.support.draftSent": "Draft sent as staff reply.",
"flash.support.draftDiscarded": "AI draft discarded. Ticket handed to human queue.",
"flash.support.autoReplyDisabled": "Auto-reply disabled (draft left as internal note).",
"flash.structured.keyRequired": "Field key is required",
"flash.category.nameRequired": "Name and unique ID are required.",
"flash.category.textEmpty": "Text cannot be empty",
"flash.export.noConfigs": "No export feeds yet. Create one under Export Feeds, then return to export your selection.",
"flash.export.selectFormat": "Please select an export feed.",
"flash.files.deleted": "Upload deleted.",
"flash.mapping.noSuggestions": "No suggestions available — check source field names.",
"flash.mapping.allMapped": "All suggestions are already mapped. Review confidence chips in the table.",
"flash.mapping.extractFirst": "No suggestions available — extract the schema first.",
"flash.mapping.pathRequired": "Enter a product element path before mapping fields.",
"flash.billing.checkoutCanceled": "Checkout was canceled. No changes were made.",
"flash.billing.portalReturn": "Returned from the billing portal. Manage your plan here or on Plans.",
"flash.billing.invalidAmount": "Please enter a valid credit amount.",
"flash.billing.companyNotFound": "Company not found.",
"flash.billing.creditsAdded": "{amount} credits have been added.",
"flash.unsubscribe.missingToken": "Missing unsubscribe token.",
"flash.unsubscribe.loadFailed": "Could not load unsubscribe status.",
"flash.unsubscribe.failed": "Unsubscribe failed.",
"flash.seo.filledMeta": "Filled meta for “{label}” ({mode}).",
"flash.shopify.saved": "Shopify settings saved.",
"flash.woo.saved": "WooCommerce settings saved.",
"flash.woo.syncSaved": "Sync settings saved.",
"flash.woo.autoCategories": "Auto-mapped {count} categories.",
"flash.woo.autoAttributes": "Auto-mapped {count} attributes.",
"flash.ai.promptsSaved": "Prompt templates saved. They apply to the next AI run.",
"flash.ai.promptRestored": "Restored built-in default prompt.",
"flash.ai.connectionOk": "Connection OK ({detail}).",
"flash.ai.connectionByok": ", your own key",
"flash.email.saved": "Email provider saved. Verify domain, then send a test.",
"flash.email.testDryRun": "Test recorded in dry-run mode — no email was sent.",
"flash.email.testSent": "Test email sent. The from address is marked verified when delivery succeeds.",
"flash.fields.apiUnavailable": "Standard fields API is not available. Changes cannot be saved.",
"flash.fields.updated": "Field updated successfully",
"flash.fields.created": "Field created successfully",
"flash.fields.enabledRecommended": "Enabled recommended ecommerce fields",
"flash.fields.deleted": "Field deleted successfully",
"flash.fields.groupUpdated": "Group updated successfully",
"flash.fields.groupCreated": "Group created successfully",
"flash.fields.groupDeleted": "Group deleted successfully",
"flash.processing.cancelled": "\"{name}\" was cancelled.",
"flash.processing.retried": "\"{name}\" queued for retry.",
"flash.admin.staffRoleUpdated": "Staff role updated for {email}.",
"flash.admin.staffRoleUnavailable": "Staff role updates are not available on this server yet.",
"flash.admin.planAssigned": "Plan assigned to {name}.",
2026-08-16 18:49:02 +02:00
"flash.admin.catalogCloned": "Copied {source} into {dest}: {products} products, {categories} taxonomy categories, {mapped_with} products with mapped category. Open Products ΓÇö uncategorized SKUs need dump backfill or categorize, not another Fix.",
2026-08-16 18:36:56 +02:00
"flash.admin.syncA1Success": "Synced A1 for {name}: dump_mapped {dump_mapped} ({dump_status}), prompts {prompts}, hashes {hashes}, processed←mapped {categories}, mapped←processed {mapped_backfilled}. Coverage: {mapped_with}/{mapped_total} ({taxonomy} taxonomy).",
"flash.admin.syncA1Error": "Sync A1 failed for {name}.",
"flash.admin.planAssignedShort": "Plan assigned.",
"flash.admin.creditsUpdated": "Credits updated.",
"flash.admin.cyclesProcessed": "Billing cycles processed: {count}",
"flash.admin.invitesSummary": "Set-password invites: {parts}. Email delivery is {smtp}.",
"flash.admin.smtpOn": "on",
"flash.admin.smtpOff": "off",
2026-08-16 11:37:42 +02:00
"flash.admin.localPasswordSet": "Password set for {email}.",
"flash.admin.localPasswordUnavailable": "Set-password tools are not available in this environment.",
"flash.admin.switchedUser": "Switched user. Reloading…",
"flash.admin.switchUnavailable": "User switch is not available in this environment.",
"flash.admin.diagnosticsRateLimit": "Diagnostics rate limit reached (20/min). Wait a minute and refresh.",
"flash.admin.smtpSaved": "Platform SMTP settings saved. Passwords stay hidden.",
"flash.admin.integrationSaved": "Integration settings saved. Secret fields are never re-displayed in full.",
"flash.admin.aiSaved": "{label} AI settings saved. API keys are never shown again.",
"flash.admin.cleanup": "Cleanup: {jobs} jobs failed, {products} products reset.",
"flash.admin.orphanDryRun": "Dry-run only — {total} orphan(s) would be deleted. Nothing removed.",
"flash.admin.orphanDeleted": "Deleted {deleted} orphan row(s). Remaining: {remaining}.",
"flash.admin.articleUpdated": "Article updated.",
"flash.admin.articleCreated": "Article created.",
"flash.admin.templateUpdated": "Template updated.",
"flash.admin.templateCreated": "Template created.",
"flash.admin.articleDeleted": "Article deleted.",
"flash.admin.templateDeleted": "Template deleted.",
"flash.admin.autoReplySaved": "Auto-reply settings saved.",
"flash.admin.imageUploaded": "Image uploaded and inserted into markdown.",
"flash.admin.translationsSaved": "Saved {count} string(s) for {locale}. Commit the message pack when ready.",
"flash.admin.featuresUpdated": "Updated {key}.",
"flash.admin.featuresAllOn": "All features enabled for this plan.",
"flash.admin.featuresAllOff": "All features disabled for this plan.",
"flash.admin.profileApplied": "Applied {label} profile to {name}.",
"flash.admin.overridesCleared": "Cleared overrides — using plan-name defaults.",
"empty.plans.none": "No plans found.",
"empty.plans.noMatch": "No plans match this filter.",
"empty.plans.selectPackage": "Select a package to edit features.",
"empty.products.processingTitle": "No products being processed",
"empty.products.processingMessageCan": "Live job progress is on the Processing page. Open a running job there to watch step status; this tab will list in-flight products once job-item filtering is available.",
"empty.products.processingMessageCannot": "Products currently in a job appear here once processing has started from the catalog.",
"empty.products.reviewTitle": "No products needing review",
"empty.products.reviewMessage": "After a processing job finishes, enriched products land here. Open a row to compare original vs enriched, then Accept, edit, or Reject.",
"empty.products.errorTitle": "No products with errors",
"empty.products.errorMessage": "When a processing job fails for a product, it will appear here so you can retry.",
"empty.products.filterTitleUnprocessed": "No unprocessed matches",
"empty.products.filterTitle": "No products match",
"empty.products.filterMessage": "Try a different search, category, or feed — or clear filters to see everything.",
"empty.products.unprocessedTitle": "No unprocessed products yet",
"empty.products.unprocessedMessage": "Connect a supplier feed or upload a CSV to import products into your catalog.",
"empty.products.noneTitle": "No products yet",
"empty.products.noneMessageStores": "Import from a feed or store, then start a processing job to build your catalog.",
"empty.products.noneMessage": "Import from a feed or upload a CSV, then start a processing job to build your catalog.",
"empty.products.viewJobs": "View jobs",
"empty.products.startJob": "Start a job",
"empty.products.clearFilters": "Clear filters",
"empty.products.viewProcessed": "View processed",
"empty.products.retryCatalog": "Retry from catalog",
"empty.products.connectFeed": "Connect feed",
"empty.products.addProduct": "Add product",
"empty.products.uploadCsv": "Upload CSV",
"empty.feeds.noneTitle": "Connect your first product feed",
"empty.feeds.noneMessage": "Add a supplier CSV/XML URL or upload a file. Next: Map → Sync → Process.",
"empty.feeds.noMatchTitle": "No matching feeds",
"empty.feeds.noMatchMessage": "Try a different search term, or clear search to see all feeds.",
"empty.export.loadFailedTitle": "Couldnt load export feeds",
"empty.export.loadFailedMessage": "Something went wrong loading your exports. Retry, or check the error above for details.",
"empty.export.noneTitle": "No export feeds yet",
"empty.export.noneMessage": "Create a Google Shopping, Meta, or custom CSV/XML feed to choose which products and fields go out. Generate a public URL for Merchant Center or any partner — or export a selected subset from Products.",
"empty.export.noMatchTitle": "No matching feeds",
"empty.export.noMatchMessage": "Try a different search term.",
"empty.files.noneTitle": "No uploads yet",
"empty.files.noneMessage": "CSV imports for products, categories, and attributes appear here after you upload them. After a platform migration, file contents (blobs) were not copied — re-upload if you need those files.",
"empty.files.uploadCta": "Upload CSV",
"empty.export.fromProductsCta": "Export from Products",
"empty.dashboard.noJobsTitle": "No recent jobs",
"empty.dashboard.noJobsMessage": "Jobs show up here after you start processing from Products. Enrich titles and descriptions before you export.",
"empty.stores.noneTitle": "No store connected yet",
"empty.stores.noneMessage": "Connect WooCommerce or Shopify to sync catalog and orders. Prefer a supplier file? Use Feed URL or CSV upload instead.",
"empty.stores.noneTitleMember": "No store connected yet",
"empty.stores.noneMessageMember": "Only company admins can connect WooCommerce or Shopify. Ask an admin for help, or use Feed URL / CSV if your role allows.",
"empty.woo.openConnection": "Open connection settings",
"empty.shopify.openConnection": "Open connection settings",
"empty.processing.noneTitle": "No jobs yet",
"empty.processing.noneMessage": "Start a job from Products when you are ready. Progress and history will show up here.",
"empty.campaigns.unavailableTitle": "Campaigns unavailable",
"empty.campaigns.unavailableMessage": "The campaigns service isnt reachable right now. You can open the create wizard, but generate and send will wait until the service is back.",
"empty.calendar.noneTitle": "No seasonal presets",
"empty.calendar.noneMessage": "Calendar presets will appear here when the marketing API is available.",
"empty.seo.noneTitle": "No catalog to score",
"empty.seo.noneMessage": "Process products or add categories first. SEO scores appear once there is catalog data.",
"empty.vector.unavailableTitle": "Vector categories unavailable",
"empty.vector.noMatchTitle": "No matches yet",
"empty.vector.noMatchMessage": "Enter a product description and search to see vector category matches.",
"empty.structured.unavailableTitle": "Structured descriptions unavailable",
"empty.structured.unavailableMessage": "This API isnt on this backend yet. You cant manage Export ID fields here until /api/structured-descriptions is wired.",
"empty.structured.noneTitle": "No structured description fields yet",
"empty.structured.noneMessage": "Add a field here, or create Export IDs in a category description formula — theyll show up for use in export feeds.",
"empty.support.unavailableTitle": "Support unavailable",
"empty.support.noneTitle": "No tickets yet",
"empty.support.unavailableMessage": "The support API is not reachable right now. Try again shortly, or open a new ticket once the service is up.",
"empty.support.filterMessage": "No tickets match this status. Try another filter or create a new ticket.",
"empty.support.noneMessage": "Describe your issue and our team will reply in this thread. You will also get an in-app notification when staff responds.",
"empty.support.createTicket": "Create ticket",
"empty.support.clearFilter": "Clear filter",
"empty.support.ticketNotFoundTitle": "Ticket not found",
"empty.support.ticketNotFoundMessage": "This ticket may have been removed or you do not have access.",
"empty.support.noMessagesTitle": "No messages",
"empty.support.noMessagesMessage": "This thread has no messages yet.",
"empty.settings.noApiKeysTitle": "No API keys yet",
"empty.shopify.noOrdersTitle": "No orders yet",
"empty.shopify.noOrdersMessage": "Orders appear after Shopify is connected and an orders import runs. Empty lists are normal until the first sync finishes.",
"empty.woo.noOrdersTitle": "No orders yet",
"empty.woo.noOrdersMessage": "Orders appear after WooCommerce is connected and an orders sync runs. Empty lists are normal until the first sync finishes.",
"empty.woo.noReviewsTitle": "No reviews yet",
"empty.woo.noReviewsMessage": "Reviews appear after you queue a reviews import from a connected store. This tab stays usable while the list is empty.",
"empty.admin.noProviderTitle": "No provider rows",
"empty.admin.noProviderMessage": "Tokens appear here after products record a provider type.",
"empty.admin.noCompaniesTitle": "No companies",
"empty.admin.noCompaniesMessage": "Company list is empty.",
"empty.admin.noCyclesTitle": "No billing cycles yet",
"empty.admin.noCyclesMessage": "Cycles appear after billing runs create historical rows.",
"empty.admin.noCompaniesFound": "No companies found.",
"empty.admin.noCompaniesMatch": "No companies match this filter.",
"empty.admin.notPlatformTitle": "Not a platform admin",
"empty.admin.notPlatformMessage": "Your account is signed in but is not marked as platform admin. Ask an existing platform admin to grant access, then sign out and sign in again.",
"empty.admin.noJobsFilter": "No jobs for this filter.",
"empty.admin.noAdminUsers": "No admin users found",
"empty.admin.noJobs": "No jobs found.",
"empty.admin.queueUnavailable": "Support queue isnt available. Contact your platform administrator if this persists.",
"empty.admin.noTicketsQueue": "No tickets in this queue.",
"empty.admin.knowledgeTitle": "Support knowledge",
"empty.admin.knowledgeNotReadyTitle": "Support knowledge not ready",
"empty.admin.knowledgeNotReadyMessage": "Articles and auto-reply settings arent set up on this deployment yet.",
"empty.admin.noTemplatesTitle": "No reply templates",
"empty.admin.noTemplatesMessage": "Templates are matched like articles and posted as labeled automated replies.",
"empty.admin.ticketNotFound": "Ticket not found.",
"empty.admin.supportUnavailable": "Support isnt available on this deployment.",
"empty.admin.ticketLoadFailed": "Unable to load this ticket.",
"empty.admin.noMessages": "No messages yet.",
"empty.admin.translationsUnavailableTitle": "Translations unavailable",
"empty.admin.translationsUnavailableMessage": "The translation catalog endpoint is not available on this build.",
"empty.admin.noKeysMatchTitle": "No keys match",
"empty.admin.noKeysMatchMessage": "Try another filter or search, or refresh after new keys are added to English.",
"empty.admin.noUsersMatch": "No users match this filter.",
"empty.admin.noCompaniesMatchFilter": "No companies match this filter.",
"blast.title": "Confirm email blast",
"blast.dryRunDescription": "Dry-run mode is active — no real emails will leave Descrybe. Confirm to record the dry-run send.",
"blast.liveDescription": "This will send real emails to your audience. Type I understand to continue.",
"blast.recipients": "Recipients in this request: {count}",
"blast.typePhrase": "Type “I understand”",
"blast.placeholder": "I understand",
"blast.runDryRun": "Run dry-run",
"blast.send": "Send blast",
"marketing.footerBefore": "Email campaigns stay at",
"marketing.footerAfter": "— this page only prepares catalog export feeds.",
"support.title": "Support Center",
"support.description": "Open a ticket for billing, bugs, or account help. Staff replies show here and as in-app notifications.",
"support.newTicket": "New ticket",
"support.createTicket": "Create ticket",
"support.loadingTickets": "Loading tickets…",
"support.loadFailed": "Failed to load support tickets",
"support.unavailableBanner": "Support is not fully available yet. You can still prepare a ticket; submitting may wait until the service is ready.",
"support.yourTickets": "Your tickets",
"support.ticketCount": "{count} tickets",
"support.ticketCountOne": "{count} ticket",
"support.statusFilterSuffix": "· status {status}",
"support.filterByStatus": "Filter by status",
"support.unavailableTitle": "Support unavailable",
"support.emptyTitle": "No tickets yet",
"support.unavailableEmpty": "The support API is not reachable right now. Try again shortly, or open a new ticket once the service is up.",
"support.emptyFiltered": "No tickets match this status. Try another filter or create a new ticket.",
"support.emptyHelp": "Describe your issue and our team will reply in this thread. You will also get an in-app notification when staff responds.",
"support.clearFilter": "Clear filter",
"support.table.subject": "Subject",
"support.table.category": "Category",
"support.table.status": "Status",
"support.table.priority": "Priority",
"support.table.updated": "Updated",
"support.openTicketAria": "Open ticket {subject}",
"support.status.all": "All",
"support.status.open": "Open",
"support.status.pending": "Pending",
"support.status.resolved": "Resolved",
"support.status.closed": "Closed",
"support.new.title": "New support ticket",
"support.new.description": "Tell us what you need help with. Include steps, error messages, or invoice details when relevant.",
"support.new.back": "Back to tickets",
"support.new.details": "Ticket details",
"support.new.detailsHelp": "Status starts as open. You may get an automated answer first; a human teammate can take over anytime from the same thread.",
"support.new.subject": "Subject",
"support.new.subjectPlaceholder": "Short summary",
"support.new.category": "Category",
"support.new.priority": "Priority",
"support.new.optional": "Optional details",
"support.new.optionalHint": "(SKU, tags — helps routing)",
"support.new.relatedSku": "Related SKU",
"support.new.relatedSkuPlaceholder": "e.g. ABC-123",
"support.new.relatedSkuHelp": "Product or feed SKU if this is about a specific item.",
"support.new.tags": "Tags",
"support.new.tagsPlaceholder": "login, invoice (comma-separated)",
"support.new.tagsHelp": "Up to 10 short labels. We normalize spaces and punctuation.",
"support.new.tagsWillSend": "Will send: {tags}",
"support.new.message": "Message",
"support.new.messagePlaceholder": "Describe the issue, what you expected, and anything that helps us reproduce it.",
"support.new.createdTitle": "Ticket created",
"support.new.createdBody": "We will reply in this thread. Watch for in-app notifications.",
"support.new.viewTicket": "View ticket",
"support.new.unavailable": "Support is temporarily unavailable. Your message was not submitted — try again shortly.",
"support.new.unavailableTitle": "Support unavailable",
"support.new.createFailed": "Could not create ticket",
"support.ticket.fallbackTitle": "Support ticket",
"support.ticket.description": "Conversation thread with Descrybe support.",
"support.ticket.meta": "{category} · {priority} · Updated {when}",
"support.ticket.allTickets": "All tickets",
"support.ticket.loading": "Loading ticket…",
"support.ticket.missingId": "Missing ticket id",
"support.ticket.notFound": "Ticket not found",
"support.ticket.notFoundMessage": "This ticket may have been removed or you do not have access.",
"support.ticket.backCenter": "Back to Support Center",
"support.ticket.unavailable": "Support is temporarily unavailable.",
"support.ticket.loadFailed": "Failed to load ticket",
"support.ticket.openedMeta": "Opened {when} · {category} · {priority} priority",
"support.ticket.sku": "SKU {sku}",
"support.ticket.messagesAria": "Ticket messages",
"support.ticket.noMessages": "No messages",
"support.ticket.noMessagesHelp": "This thread has no messages yet.",
"support.ticket.yourReply": "Your reply",
"support.ticket.replyPlaceholder": "Add details or reply to support…",
"support.ticket.sendReply": "Send reply",
"support.ticket.replySent": "Reply sent",
"support.ticket.reopened": "Ticket reopened for staff review.",
"support.ticket.replyAdded": "Your message was added to the thread.",
"support.ticket.replyFailed": "Could not send reply",
"support.ticket.reopenHint": "Replying reopens this ticket for staff.",
"support.ticket.humanHint": "Replying asks a human teammate to continue from here.",
"support.ticket.closedBanner": "This ticket is closed. Create a new ticket if you still need help.",
"support.kind.you": "You",
"support.kind.human": "Support",
"support.kind.auto": "Automated",
"support.kind.ai": "AI-assisted",
"support.kind.system": "System",
"support.kind.autoBadge": "Automated answer",
"support.kind.aiBadge": "AI-assisted",
"support.progress.closed.title": "Ticket closed",
"support.progress.closed.message": "This conversation is closed. Open a new ticket if you still need help.",
"support.progress.resolved.title": "Marked resolved",
"support.progress.resolved.message": "We believe this is sorted. Reply to reopen, or leave a quick rating below.",
"support.progress.quickAnswer.title": "Quick answer sent",
"support.progress.quickAnswer.message": "We shared an automated reply below. If it does not solve it, reply here — a human will take over.",
"support.progress.onIt.title": "We're on it",
"support.progress.onIt.handedMessage": "A support teammate has your ticket and will reply in this thread.",
"support.progress.onIt.pendingMessage": "Support is reviewing your message. You will see updates in this thread.",
"support.progress.received.title": "Ticket received",
"support.progress.received.message": "Thanks — we have your request. Automated help may appear shortly, or a teammate will reply.",
"support.category.billing": "Billing",
"support.category.billing.help": "Invoices, payment methods, plan changes, and Stripe receipts.",
"support.category.billing_credits": "Billing / credits",
"support.category.billing_credits.help": "Credit balance, usage quotas, and top-ups.",
"support.category.bug": "Bug / error",
"support.category.bug.help": "Unexpected errors, broken screens, or steps that fail every time.",
"support.category.account": "Account / access",
"support.category.account.help": "Login, invites, company membership, and permissions.",
"support.category.integrations": "Integrations",
"support.category.integrations.help": "WooCommerce, Shopify, public API, or connector setup.",
"support.category.processing": "Processing / AI",
"support.category.processing.help": "Product processing, AI prompts, and generation quality.",
"support.category.export": "Export / channels",
"support.category.export.help": "Export feeds, channels, and sync destinations.",
"support.category.migration": "Migration / data",
"support.category.migration.help": "Missing or wrong data after cutover — products, feeds, stores, billing, or team.",
"support.category.other": "Other",
"support.category.other.help": "Anything else — we will route it to the right teammate.",
"support.priority.low": "Low",
"support.priority.low.help": "Nice-to-have or non-blocking — we will get to it in turn.",
"support.priority.normal": "Normal",
"support.priority.normal.help": "Standard request. Most tickets use this.",
"support.priority.high": "High",
"support.priority.high.help": "Blocking work or revenue impact — use sparingly.",
"support.csat.thanks": "Thanks for your feedback",
"support.csat.unavailable": "Rating is temporarily unavailable. Please try again later.",
"support.csat.unavailableTitle": "Rating unavailable",
"support.csat.alreadyRated": "You already rated this ticket.",
"support.csat.alreadyRatedTitle": "Already rated",
"support.csat.submitFailed": "Could not submit rating",
"support.csat.yourRating": "Your rating",
"support.csat.ratedOutOf": "You rated this ticket {score} out of 5",
"support.csat.howDidWeDo": "How did we do?",
"support.csat.formHelp": "This ticket is {status}. Rate your experience (15). Optional comment helps us improve.",
"support.csat.rating": "Rating",
"support.csat.scoreAria": "{value} — {label}",
"support.csat.whatWentWrong": "What went wrong? (optional)",
"support.csat.whatWentWrongPlaceholder": "A short note helps us follow up.",
"support.csat.anythingElse": "Anything else? (optional)",
"support.csat.optionalFeedback": "Optional feedback",
"support.csat.submit": "Submit rating",
"support.csat.score.1": "Very dissatisfied",
"support.csat.score.2": "Dissatisfied",
"support.csat.score.3": "Okay",
"support.csat.score.4": "Satisfied",
"support.csat.score.5": "Very satisfied",
"catalog.delete": "Delete",
"catalog.deleting": "Deleting…",
"catalog.saving": "Saving…",
"catalog.adding": "Adding…",
"catalog.assigning": "Assigning…",
"catalog.uploading": "Uploading…",
"catalog.create": "Create",
"catalog.createFailed": "Create failed",
"catalog.updateFailed": "Update failed",
"catalog.deleteFailed": "Delete failed",
"catalog.importFailed": "Import failed",
"catalog.confirm": "Confirm",
"catalog.confirmDeletion": "Confirm Deletion",
"catalog.areYouSure": "Are you sure?",
"catalog.previous": "Previous",
"catalog.next": "Next",
"catalog.expand": "Expand",
"catalog.collapse": "Collapse",
"catalog.clearSearch": "Clear search",
"catalog.clearFilters": "Clear filters",
"catalog.clearSelection": "Clear selection",
"catalog.add": "Add",
"catalog.update": "Update",
"catalog.edit": "Edit",
"catalog.accept": "Accept",
"catalog.reject": "Reject",
"catalog.reset": "Reset",
"catalog.undo": "Undo",
"catalog.close": "Close",
"catalog.closePanel": "Close panel",
"catalog.closeMenus": "Close menus",
"catalog.openMenu": "Open menu",
"catalog.loading": "Loading…",
"catalog.empty": "Empty",
"catalog.required": "Required",
"catalog.optional": "Optional",
"catalog.features": "Features",
"catalog.csvImportFinished": "CSV import finished.",
"catalog.comparePlans": "Compare plans",
"catalog.saveChanges": "Save Changes",
"catalog.saveFormula": "Save Formula",
"catalog.saveFormulaShort": "Save formula",
"catalog.noResults": "No results",
"products.title": "Products",
"products.description": "Browse, review, and process your catalog.",
"products.loadFailed": "Failed to load products",
"products.unnamed": "Unnamed product",
"products.tabs.navLabel": "Product views",
"products.tab.processed": "Processed",
"products.tab.processedHint": "Finished products ready to export or sync",
"products.tab.needsReview": "Needs review",
"products.tab.needsReviewHint": "Enriched products waiting for accept, edit, or reject",
"products.tab.needsReviewShort": "Review",
"products.tab.error": "Errors",
"products.tab.errorHint": "Products that failed during a job",
"products.tab.processing": "In progress",
"products.tab.processingHint": "Products currently in a running job",
"products.tab.busy": "In progress",
"products.tab.unprocessed": "Unprocessed",
"products.tab.unprocessedHint": "Catalog products not yet processed",
"products.tab.raw": "Unprocessed",
"products.status.processed": "Processed",
"products.status.needsReview": "Needs Review",
"products.status.processing": "Processing",
"products.status.error": "Error",
"products.status.failed": "Failed",
"products.status.unprocessed": "Unprocessed",
"products.status.pending": "Pending",
"products.status.unknown": "Unknown",
"products.pagination.showing": "Showing {start}{end} of {total}",
"products.empty.processing.title": "No jobs yet",
"products.empty.processing.messageJobs": "Nothing is running right now. Start a job from Unprocessed, or open Processing to watch progress when a job is active.",
"products.empty.processing.messageBasic": "Products appear here while a job is running.",
"products.empty.needsReview.title": "No products needing review",
"products.empty.needsReview.message": "After a processing job finishes, enriched products land here. Open a row to compare original vs enriched, then Accept, edit, or Reject.",
"products.empty.error.title": "No products with errors",
"products.empty.error.message": "When a processing job fails for a product, it will appear here so you can retry.",
"products.empty.noUnprocessedMatches": "No unprocessed matches",
"products.empty.noMatch": "No products match",
"products.empty.filtersHint": "Try a different search, category, or feed — or clear filters to see everything.",
"products.empty.noUnprocessed.title": "No unprocessed products yet",
"products.empty.noUnprocessed.message": "Connect a supplier feed or upload a CSV to import products into your catalog.",
"products.empty.none.title": "No products yet",
"products.empty.none.messageStores": "Complete Feeds → Map → Sync first, then Process. Import from a feed or store to get started.",
"products.empty.none.messageBasic": "Complete Feeds → Map → Sync first, then Process. Connect a feed or upload a CSV to get started.",
"products.actions.viewJobs": "View jobs",
"products.actions.startJob": "Start a job",
"products.actions.viewProcessed": "View processed",
"products.actions.retryFromCatalog": "Retry from catalog",
"products.actions.connectFeed": "Connect feed",
"products.actions.addProduct": "Add product",
"products.actions.uploadCsv": "Upload CSV",
"products.actions.exportSelected": "Export Selected",
"products.export.title": "Export Selected Products",
"products.export.confirm": "Confirm export",
"products.export.loadFailed": "Failed to load export feed options. Please try again.",
"products.export.noneFound": "No export feeds yet. Create one under Export Feeds, then return to export your selection.",
"products.export.selectFormat": "Please select an export feed.",
"products.export.failed": "Could not export selected products",
"products.upload.title": "Upload CSV",
"products.upload.description": "Import products from a CSV (GTIN/EAN, name, category, …). Download the sample for the full column set.",
"products.upload.submit": "Upload & Import",
"products.upload.chooseFirst": "Choose a CSV file first.",
"products.upload.csvOnly": "Please upload a CSV file.",
"products.upload.tooLarge": "CSV must be 5 MB or smaller.",
"products.processing.started": "Processing job started",
"products.processing.startFailed": "Could not start processing",
"products.processing.startJobFailed": "Could not start processing job",
"products.processing.cancelled": "Processing cancelled",
"products.processing.jobsCancelled": "Processing jobs cancelled",
"products.processing.cancelFailed": "Could not cancel processing job",
"products.processing.justCancelled": "The just-started job was cancelled.",
"products.processing.viewInProcessing": "View in Processing",
"products.processing.confirm": "Confirm processing",
"products.processing.freePlanTitle": "Free plan — processing without AI",
"products.processing.freePlanBody": "Normalize, specs, fill, and EPREL run at no credit cost. AI titles/descriptions require a paid plan or credits.",
"products.enrichment.acceptTitle": "Accept enrichment?",
"products.enrichment.acceptConfirm": "Confirm accept enrichment",
"products.enrichment.acceptSelected": "Accept enrichment for {count} selected product(s)? They will move to Processed.",
"products.enrichment.rejectConfirm": "Confirm reject enrichment",
"products.enrichment.rejectBody": "Reject enrichment and return this product to unprocessed? You can re-run processing later.",
"products.enrichment.rejectSelectedConfirm": "Confirm reject selected",
"products.enrichment.resetConfirm": "Confirm reset to unprocessed",
"products.enrichment.resetSelected": "Reset {count} selected product(s) to unprocessed? They will reappear as unprocessed items.",
"products.enrichment.accepted": "Enrichment accepted — moved to Processed.",
"products.enrichment.rejected": "Enrichment rejected — product returned to unprocessed.",
"products.enrichment.acceptFailed": "Could not accept enrichment",
"products.enrichment.rejectFailed": "Could not reject enrichment",
"products.enrichment.acceptUndone": "Accept undone",
"products.enrichment.undoAcceptFailed": "Could not undo accept",
"products.enrichment.resetDone": "Product returned to unprocessed.",
"products.enrichment.resetFailed": "Could not reset products",
"products.enrichment.valueReset": "Enriched value reset to the original.",
"products.enrichment.originalEmpty": "Original value is empty; enrichment cannot be cleared via PATCH.",
"products.enrichment.staysNeedsReview": "Product stays in Needs Review until you Accept all.",
"products.field.nameAcceptUndone": "Name accept undone",
"products.field.descriptionAcceptUndone": "Description accept undone",
"products.field.nameDiscardUndone": "Name discard undone",
"products.field.descriptionDiscardUndone": "Description discard undone",
"products.field.undoAcceptFailed": "Could not undo field accept",
"products.field.undoDiscardFailed": "Could not undo field discard",
"products.updateFailed": "Could not update product",
"products.keyboardTips": "Keyboard tips",
"products.keyboardTipsShort": "Keyboard tips (?)",
"products.option.categories": "Categories",
"products.option.attributes": "Attributes / specs",
"products.option.titlesAi": "Titles (AI)",
"products.option.descriptionsAi": "Descriptions (AI)",
"products.enrichment.piece.name": "Name",
"products.enrichment.piece.description": "Description",
"products.enrichment.piece.attributes": "Attributes",
"products.enrichment.piece.category": "Category",
"products.enrichment.state.processed": "Processed",
"products.enrichment.state.feed": "From feed",
"products.enrichment.state.missing": "Missing",
"products.enrichment.help.name": "Product title. Green = AI-processed name; orange = feed/original name only; gray = missing.",
"products.enrichment.help.description": "Product description. Green = AI-processed; orange = feed/original only; gray = missing.",
"products.enrichment.help.attributes": "Specs and attributes. Green = AI/enriched attributes; orange = from feed only; gray = none.",
"products.enrichment.help.category": "Assigned category. Green = category set; gray = missing.",
"products.enrichment.chipTitle": "{label}: {state}. {help}",
"products.enrichment.complete": "Complete — {parts}",
"products.enrichment.missingSummary": "Missing {missing} — {parts}",
"products.issue.title": "title",
"products.issue.gtin": "GTIN",
"products.issue.category": "category",
"products.filters.allCategories": "All Categories",
"products.filters.allFeeds": "All Feeds",
"products.filters.allCoverage": "All coverage",
"products.filters.anyFeedChange": "Any feed change",
"products.filters.eprelAll": "EPREL: all",
"products.filters.feedChangesAll": "Feed changes: all",
"products.filters.byCategory": "Filter by category",
"products.filters.byCoverage": "Filter by coverage",
"products.filters.byFeed": "Filter by feed",
"products.filters.byEprel": "Filter by EPREL",
"products.filters.byFeedSync": "Filter by feed sync changes",
"products.filters.coverageHint": "Filter by Name / Description / Attributes / Category completeness",
"products.filters.feedSyncHint": "Filter by price/stock/title changes from the latest feed sync",
"products.filters.eprelHint": "Filter products that have or lack an EPREL energy-label registry id",
"products.filters.availabilityChanged": "Availability changed",
"products.eprel.badgeTitle": "EPREL id present on this product (European Product Registry for Energy Labelling).",
"products.eprel.help": "European Product Registry for Energy Labelling (EPREL) id is present on this product.",
"products.feedData": "Feed data",
"attributes.title": "Attributes",
"attributes.description": "Define product fields, list values, and category assignments.",
"attributes.loadFailed": "Failed to load attributes",
"attributes.loading": "Loading attributes…",
"attributes.zero": "0 attributes",
"attributes.addNew": "Add New Attribute",
"attributes.create": "Create attribute",
"attributes.edit": "Edit Attribute",
"attributes.delete": "Delete Attribute",
"attributes.displayName": "Attribute Display Name",
"attributes.actions": "Attribute actions",
"attributes.created": "Attribute created.",
"attributes.createdAssignFailed": "Attribute created, but category assignment failed.",
"attributes.updated": "Attribute updated.",
"attributes.deleted": "Attribute deleted.",
"attributes.addValue": "Add Value",
"attributes.manageValues": "Add, edit, or remove values for this list attribute.",
"attributes.valueTypeHint": "Choose how values are entered for this attribute.",
"attributes.createDescription": "Create a new attribute definition. You can assign it to a category during creation.",
"attributes.assignToCategories": "Assign Attributes to Categories",
"attributes.assignFailed": "Could not assign the attribute to the selected category.",
"attributes.bulkAssignFailed": "Bulk assign failed",
"attributes.filterByCategory": "Filter by category",
"attributes.saveValueFailed": "Could not save value",
"attributes.deleteValueFailed": "Could not delete value",
"attributes.csvNeedHeader": "CSV must include a header and at least one row",
"attributes.csvNeedColumns": "CSV must include \"category_id\" and \"attribute_key\" columns",
"attributes.type.string": "Text",
"attributes.type.stringHint": "Free text — names, models, short notes",
"attributes.type.number": "Number",
"attributes.type.numberHint": "Numeric value; add a unit when useful (cm, kg, W)",
"attributes.type.boolean": "Yes / No",
"attributes.type.booleanHint": "True or false — e.g. has GPS, wireless charging",
"attributes.type.date": "Date",
"attributes.type.dateHint": "A calendar date (release, warranty end, …)",
"attributes.type.list": "Dropdown",
"attributes.type.listHint": "Pick exactly one option from a defined list",
"attributes.type.multiselect": "Multi-select",
"attributes.type.multiselectHint": "Pick one or more options from a list",
"attributes.color": "Color",
"categories.title": "Categories",
"categories.description": "Organize your catalog hierarchy. Edit a category to open title/description formulas and AI prompts.",
"categories.loadFailed": "Failed to load categories",
"categories.add": "Add Category",
"categories.edit": "Edit Category",
"categories.delete": "Delete Category",
"categories.deleteConfirm": "Are you sure you want to delete this category? This action cannot be undone.",
"categories.name": "Category name",
"categories.namePlaceholder": "Category name",
"categories.descriptionPlaceholder": "Optional category description",
"categories.uniqueIdPlaceholder": "Optional unique identifier",
"categories.searchPlaceholder": "Search by name or ID...",
"categories.created": "{name} has been created.",
"categories.updated": "The category has been updated successfully.",
"categories.deleted": "The category has been deleted successfully.",
"categories.notFound": "Category not found.",
"categories.loadCategoryFailed": "Failed to load category",
"categories.noCategoriesYet": "No categories yet",
"categories.noMatch": "No categories match “{query}”. Clear search or try another term.",
"categories.emptyHint": "Add a category or import a CSV to build your tree.",
"categories.promptCountOne": "{count} category has an AI generation prompt. Open the ⋮ menu → Edit AI prompt, or edit a category and choose Edit AI Prompt.",
"categories.promptCountMany": "{count} categories have an AI generation prompt. Open the ⋮ menu → Edit AI prompt, or edit a category and choose Edit AI Prompt.",
"categories.actions": "Category actions",
"categories.chooseCsv": "Choose CSV",
"categories.createSingleOrImport": "Create a single category or import many from CSV.",
"categories.createSingle": "Create a single category.",
"categories.missingNameColumn": "Missing required 'name' column",
"categories.missingUniqueIdColumn": "Missing required 'unique_id' column",
"categories.nameAndIdRequired": "Name and unique ID are required.",
"categories.csvNeedRows": "File must contain a header row and at least one data row",
"categories.titleFormula": "Title Formula",
"categories.descriptionFormula": "Description Formula",
"categories.setTitleFormula": "Set Title Formula",
"categories.editTitleFormula": "Edit Title Formula",
"categories.setDescriptionFormula": "Set Description Formula",
"categories.editDescriptionFormula": "Edit Description Formula",
"categories.setAiPrompt": "Set AI Prompt",
"categories.editAiPrompt": "Edit AI Prompt",
"categories.editAiPromptShort": "Edit AI prompt",
"categories.aiPromptSet": "AI generation prompt is set",
"categories.aiPromptTitle": "Category AI prompt",
"categories.aiPromptDescription": "Per-category generation template used when enhancing products in this category.",
"categories.aiPromptSaved": "AI prompt saved.",
"categories.aiPromptCleared": "AI prompt cleared (company default will apply).",
"categories.aiPromptSaveFailed": "Failed to save prompt",
"categories.aiPromptAssignFailed": "Failed to assign prompt",
"categories.assignAiPrompt": "Assign AI prompt",
"categories.assignAiPromptHelp": "Copy this AI generation prompt to other categories.",
"categories.loadingPrompt": "Loading prompt…",
"categories.brandVoice": "Brand voice",
"categories.productName": "Product name",
"categories.gtin": "GTIN",
"categories.backToCategories": "Back to categories",
"categories.cancelReturn": "Cancel and return to categories",
"categories.assignFormula": "Assign Formula",
"categories.assignFormulaOther": "Assign formula to other categories",
"categories.assignTitleFormula": "Assign Title Formula",
"categories.assignDescriptionFormula": "Assign Description Formula",
"categories.assignSelectHelp": "Select the categories to apply this template to.",
"categories.assignTitleHelp": "Select the categories to apply this title formula template to.",
"categories.assignDescriptionHelp": "Select the categories to apply this description formula template to.",
"categories.searchCategories": "Search categories…",
"categories.matching": " matching",
"categories.titleFormulaHelp": "Build product titles from variables and static text for this category.",
"categories.descriptionFormulaHelp": "Define SEO meta text and body sections the AI should generate for this category.",
"categories.loadingFormula": "Loading formula…",
"categories.titleFormulaSaved": "Title formula saved successfully",
"categories.titleFormulaRemoved": "Title formula removed successfully",
"categories.titleFormulaSaveFailed": "Failed to save title formula",
"categories.titleFormulaAssignFailed": "Failed to assign title formula",
"categories.descriptionFormulaRemoved": "Description formula removed successfully",
"categories.descriptionFormulaSaved": "Description formula saved successfully",
"categories.descriptionFormulaSavedWithExports": "Description formula saved successfully and synced {count} export IDs",
"categories.descriptionFormulaSaveFailed": "Failed to save description formula",
"categories.descriptionFormulaAssignFailed": "Failed to assign description formula",
"categories.seoTitlePlaceholder": "Tell the AI how to write the SEO title…",
"categories.seoDescriptionPlaceholder": "Tell the AI how to write the SEO description…",
"categories.sectionPromptPlaceholder": "What should the AI write in this section?",
"categories.sectionKeyPlaceholder": "e.g., short_description (letters, numbers, _)",
"categories.formulaElementTypes": "Formula element types",
"categories.formulaElements": "Formula elements",
"categories.elementSeparator": "Element separator",
"categories.elementSeparatorHint": "Space, dash, etc.",
"categories.dragToReorder": "Drag to reorder",
"categories.addCustomVariable": "Add Custom Variable",
"categories.editCustomVariable": "Edit Custom Variable",
"categories.customVariableHelp": "Define a reusable variable for title formulas.",
"categories.manageVariables": "Manage Variables",
"categories.manageVariablesHelp": "View, edit, and add variables that can be used in your title formulas.",
"categories.searchVariables": "Search variables…",
"categories.variableAdded": "Variable added successfully",
"categories.variableUpdated": "Variable updated successfully",
"categories.variableDeleted": "Variable deleted successfully",
"categories.variableDeleteFailed": "Failed to delete variable",
"categories.variableNameRequired": "Variable name is required",
"categories.displayNameRequired": "Display name is required",
"categories.variableNamePattern": "Name can only contain letters, numbers, and underscores",
"categories.deleteVariableConfirm": "Are you sure you want to delete this variable? This may affect any formulas using it.",
"categories.removeElementConfirm": "Are you sure you want to remove this element from your formula?",
"categories.addTextElement": "Add Text Element",
"categories.addTextElementHelp": "Add a static text element to your formula.",
"categories.editTextElement": "Edit Text Element",
"categories.editTextElementHelp": "Edit the text element in your formula.",
"categories.staticTextPlaceholder": "Enter static text",
"categories.textCannotBeEmpty": "Text cannot be empty",
"categories.exampleProductName": "Product Name",
"categories.exampleWidget": "Acme Widget Pro",
"fields.title": "Standard Fields",
"fields.description": "Define standard product fields and organize them into groups",
"fields.loading": "Loading standard fields…",
"fields.loadFailed": "Failed to load fields",
"fields.loadGroupsFailed": "Failed to load field groups",
"fields.addField": "Add New Field",
"fields.addGroup": "Add New Group",
"fields.createField": "Create Field",
"fields.createGroup": "Create Group",
"fields.editField": "Edit Field",
"fields.editGroup": "Edit Group",
"fields.basicInfo": "Basic Information",
"fields.createFieldHelp": "Create a new standard field for your product data",
"fields.editFieldHelp": "Update the details for this standard field",
"fields.createGroupHelp": "Create a new group to organize your standard fields",
"fields.editGroupHelp": "Update the details for this field group",
"fields.dataTypeHint": "Data type for this field",
"fields.defaultValueOptional": "Default value (optional)",
"fields.fieldDescriptionPlaceholder": "Enter a description for this field",
"fields.groupDescriptionPlaceholder": "Enter a description for this group",
"fields.keyHint": "Lowercase letters, numbers, and underscores only",
"fields.exampleTitle": "Product Title",
"fields.noFields": "No fields found. Click \"Add Field\" to create one.",
"fields.noFieldsMatch": "No fields match your search",
"fields.noGroups": "No groups found. Create your first group.",
"fields.noGroupsMatch": "No groups match your search",
"fields.fieldCreated": "Field created successfully",
"fields.fieldUpdated": "Field updated successfully",
"fields.fieldDeleted": "Field deleted successfully",
"fields.groupCreated": "Group created successfully",
"fields.groupUpdated": "Group updated successfully",
"fields.groupDeleted": "Group deleted successfully",
"fields.saveFieldFailed": "Failed to save field",
"fields.saveGroupFailed": "Failed to save group",
"fields.updateFieldFailed": "Failed to update field",
"fields.updateUnitFailed": "Failed to update unit",
"fields.deleteFieldFailed": "Failed to delete field",
"fields.deleteGroupFailed": "Failed to delete group",
"fields.bulkUpdateFailed": "Bulk update failed",
"fields.enableRecommendedFailed": "Failed to enable recommended fields",
"fields.enabledRecommended": "Enabled recommended ecommerce fields",
"fields.deleteFieldConfirm": "This action cannot be undone. This will permanently delete the field and remove it from any templates that use it.",
"fields.deleteGroupConfirm": "This action cannot be undone. This will permanently delete the group. Any fields in this group will need to be reassigned.",
"fields.type.string": "Text",
"fields.type.stringHint": "Free text — names, codes, short notes",
"fields.type.number": "Number",
"fields.type.numberHint": "Numeric value; add a unit when useful (EUR, pcs)",
"fields.type.boolean": "Yes / No",
"fields.type.booleanHint": "True or false",
"fields.type.date": "Date",
"fields.type.dateHint": "A calendar date",
"fields.type.url": "URL",
"fields.type.urlHint": "Web link (product page, video, manufacturer)",
"fields.type.image": "Image",
"fields.type.imageHint": "Image URL or gallery image",
"fields.type.dimension": "Dimension",
"fields.type.dimensionHint": "Length measurement (width, height, depth)",
"fields.type.weight": "Weight",
"fields.type.weightHint": "Mass / shipping weight",
"fields.type.color": "Color",
"fields.type.colorHint": "Color name or code",
"fields.type.custom": "Custom",
"fields.type.customHint": "Special / free-form field",
"empty.admin.knowledgeHeading": "Support knowledge",
"empty.admin.translationsHeading": "Translations",
"flash.attrs.createdLinkFailed": "Attribute created, but category assignment failed.",
"flash.attrs.created": "Attribute created.",
"flash.attrs.csvImported": "CSV import finished.",
"flash.attrs.updated": "Attribute updated.",
"flash.attrs.deleted": "Attribute deleted.",
"flash.attrs.valueDeleted": "Value deleted.",
"flash.attrs.assignedLinks": "Assigned {count} categoryattribute link(s).",
"flash.brand.saved": "Brand kit saved.",
"flash.brand.logoType": "Logo must be PNG, JPEG, or WebP",
"flash.brand.logoSize": "Logo exceeds 2 MiB limit",
"flash.brand.logoUploaded": "Logo uploaded.",
"flash.categories.updated": "The category has been updated successfully.",
"flash.categories.deleted": "The category has been deleted successfully.",
"flash.categories.csvImported": "CSV import finished.",
"flash.products.csvImported": "Product CSV import finished.",
"flash.categories.descFormulaAssigned": "Description formula assigned to {count} categories",
"flash.categories.promptAssigned": "Assigned prompt to {count} {noun}.",
"flash.categories.promptNounOne": "category",
"flash.categories.promptNounMany": "categories",
"flash.categories.titleFormulaAssigned": "Title formula assigned to {count} {noun}",
"flash.categories.variableDeleted": "Variable deleted successfully",
"flash.export.updated": "Export feed updated.",
"flash.export.created": "Export feed created.",
"flash.export.urlCopied": "Public {format} feed URL copied. Paste it into any system that fetches product feeds.",
"flash.export.copyFailed": "Failed to copy URL to clipboard",
"flash.export.refreshed": "Feed refreshed.",
"flash.export.refreshedWithCount": "Feed refreshed ({count} products).",
"flash.export.deleted": "Export feed deleted successfully.",
"flash.export.tokenRotated": "Public feed URL token rotated. Update any systems using the old URL.",
"common.edit": "Edit",
"common.previous": "Previous",
"common.next": "Next",
"common.saving": "Saving…",
"common.deleting": "Deleting…",
"common.adding": "Adding…",
"common.processing": "Processing…",
"common.upload": "Upload",
"common.expand": "Expand",
"common.collapse": "Collapse",
"common.optional": "Optional",
"common.enabled": "Enabled",
"common.on": "On",
"common.off": "Off",
"common.system": "System",
"common.type": "Type",
"common.unit": "Unit",
"common.group": "Group",
"common.search": "Search",
"common.openMenu": "Open menu",
"common.areYouSure": "Are you sure?",
"common.selectGroup": "Select a group",
"attributes.addAttribute": "Add Attribute",
"attributes.searchPlaceholder": "Search attributes…",
"attributes.searchAria": "Search attributes (press Enter to search)",
"attributes.filterCategoryAria": "Filter by category",
"attributes.allCategories": "All Categories",
"attributes.col.name": "Name",
"attributes.col.key": "Attribute Key",
"attributes.col.type": "Type",
"attributes.col.unit": "Unit",
"attributes.col.categories": "Categories",
"attributes.col.updated": "Last Updated",
"attributes.col.actions": "Actions",
"attributes.emptyTitle": "No attributes found",
"attributes.emptyFiltered": "Try clearing search or the category filter.",
"attributes.emptyHint": "Add an attribute or import a CSV to get started.",
"attributes.noValues": "No values",
"attributes.actionsAria": "Attribute actions",
"attributes.editDetails": "Edit Details",
"attributes.loadingValues": "Loading values...",
"attributes.noValuesYetHint": "No values added yet. Use \"Manage Values\" to add values.",
"attributes.pageZero": "0 attributes",
"attributes.pageShowing": "Showing {from}{to} of {total} attributes",
"attributes.linkCategoryFailed": "Could not assign the attribute to the selected category.",
"attributes.createdLinkFailed": "Attribute created, but category assignment failed.",
"attributes.createFailed": "Create failed",
"attributes.importFinished": "CSV import finished.",
"attributes.importFailed": "Import failed",
"attributes.updateFailed": "Update failed",
"attributes.deleteFailed": "Delete failed",
"attributes.valueUpdated": "Value updated.",
"attributes.valueAdded": "Value added.",
"attributes.valueSaveFailed": "Could not save value",
"attributes.valueDeleted": "Value deleted.",
"attributes.valueDeleteFailed": "Could not delete value",
"attributes.csvNeedRows": "CSV must include a header and at least one row",
"attributes.rowUnknown": "Row {row}: unknown category or attribute",
"attributes.rowLinkFailed": "Row {row}: {detail}",
"attributes.linkFailedShort": "link failed",
"attributes.assignedLinks": "Assigned {count} categoryattribute link(s).",
"attributes.rowsFailed": "{count} row(s) failed.",
"attributes.addTitle": "Add New Attribute",
"attributes.addDesc": "Create a new attribute definition. You can assign it to a category during creation.",
"attributes.tab.single": "Single",
"attributes.tab.bulk": "Bulk Import",
"attributes.field.key": "Attribute Key",
"attributes.field.keyPlaceholder": "attribute-key",
"attributes.field.displayName": "Display Name",
"attributes.field.displayNamePlaceholder": "Attribute Display Name",
"attributes.field.type": "Type",
"attributes.field.typeDefaultHint": "Choose how values are entered for this attribute.",
"attributes.field.category": "Category",
"attributes.field.categoryPlaceholder": "Select a category…",
"attributes.field.categoryHint": "Select the category this attribute belongs to. Attributes should be assigned to a category.",
"attributes.field.unitOptional": "Unit (Optional)",
"attributes.field.unitPlaceholder": "e.g., cm, kg, etc.",
"attributes.field.exampleOptional": "Example (Optional)",
"attributes.field.examplePlaceholder": "e.g., 100x200",
"attributes.createAttribute": "Create attribute",
"attributes.bulk.fileLabel": "CSV or TSV File",
"attributes.bulk.downloadCsv": "Download CSV Template",
"attributes.bulk.downloadTsv": "Download TSV Template",
"attributes.bulk.uploadHint": "Upload a CSV or TSV file with the following columns:",
"attributes.bulk.col.key": "Unique identifier (required)",
"attributes.bulk.col.name": "Display name (required)",
"attributes.bulk.col.valueType": "string (Text), number, boolean (Yes/No), date, list (Dropdown), multiselect",
"attributes.bulk.col.categoryId": "Category unique ID",
"attributes.bulk.col.unitExample": "optional",
"attributes.bulk.col.parentKey": "Parent key for list values",
"attributes.editTitle": "Edit Attribute",
"attributes.editDesc": "Update the details for attribute \"{name}\"",
"attributes.field.keyHint": "A unique identifier for this attribute",
"attributes.field.displayNameHint": "The name that will be displayed to users",
"attributes.deleteTitle": "Delete Attribute",
"attributes.deleteDesc": "Are you sure you want to delete \"{name}\"? This action cannot be undone.",
"attributes.deleteWarningValues": "Warning: This will also delete all values associated with this attribute.",
"attributes.manageTitleNamed": "Manage Values for {name}",
"attributes.manageTitle": "Manage Values",
"attributes.manageDesc": "Add, edit, or remove values for this list attribute.",
"attributes.valueKey": "Value Key",
"attributes.valueKeyHint": "A unique identifier for this value",
"attributes.displayValue": "Display Value",
"attributes.displayValuePlaceholder": "Value to display",
"attributes.displayValueHint": "The display name that will be shown for this value",
"attributes.updateValue": "Update Value",
"attributes.noValuesYet": "No values yet.",
"attributes.assignTitle": "Assign Attributes to Categories",
"attributes.assignDesc": "Upload a CSV mapping category unique IDs to attribute keys.",
"attributes.downloadTemplate": "Download Template",
"attributes.csvFile": "CSV File",
"attributes.assignSuccess": "Assignments applied successfully.",
"attributes.assigning": "Assigning…",
"attributes.uploadAndAssign": "Upload & Assign",
"attributes.type.string.label": "Text",
"attributes.type.string.hint": "Free text — names, models, short notes",
"attributes.type.number.label": "Number",
"attributes.type.number.hint": "Numeric value; add a unit when useful (cm, kg, W)",
"attributes.type.boolean.label": "Yes / No",
"attributes.type.boolean.hint": "True or false — e.g. has GPS, wireless charging",
"attributes.type.date.label": "Date",
"attributes.type.date.hint": "A calendar date (release, warranty end, …)",
"attributes.type.list.label": "Dropdown",
"attributes.type.list.hint": "Pick exactly one option from a defined list",
"attributes.type.multiselect.label": "Multi-select",
"attributes.type.multiselect.hint": "Pick one or more options from a list",
"standardFields.title": "Standard Fields",
"standardFields.description": "Define standard product fields and organize them into groups",
"standardFields.apiUnavailable": "Standard fields API is not available. Changes cannot be saved.",
"standardFields.apiUnreachable": "Standard fields API is not reachable right now. Create/edit stay disabled until /api/standard-fields and /api/field-groups respond.",
"standardFields.loading": "Loading standard fields…",
"standardFields.tab.fields": "Fields",
"standardFields.tab.groups": "Groups",
"standardFields.heading": "Standard Fields",
"standardFields.headingHint": "Enable fields for mapping and processing — one toggle per row.",
"standardFields.enableRecommended": "Enable recommended",
"standardFields.enableSelected": "Enable selected ({count})",
"standardFields.disableSelected": "Disable selected",
"standardFields.addField": "Add Field",
"standardFields.searchFields": "Search fields...",
"standardFields.col.enabled": "Enabled",
"standardFields.col.name": "Name",
"standardFields.col.key": "Key",
"standardFields.col.type": "Type",
"standardFields.col.unit": "Unit",
"standardFields.col.group": "Group",
"standardFields.col.status": "Status",
"standardFields.emptySearch": "No fields match your search",
"standardFields.emptyHint": "No fields found. Click \"Add Field\" to create one.",
"standardFields.selectFieldAria": "Select {name}",
"standardFields.enableFieldAria": "Enable {name}",
"standardFields.systemFieldTitle": "System field - Cannot be deleted",
"standardFields.groupsHeading": "Field Groups",
"standardFields.addGroup": "Add Group",
"standardFields.searchGroups": "Search groups...",
"standardFields.col.description": "Description",
"standardFields.col.displayOrder": "Display Order",
"standardFields.emptyGroupsSearch": "No groups match your search",
"standardFields.emptyGroupsHint": "No groups found. Create your first group.",
"standardFields.unknownGroup": "Unknown Group",
"standardFields.loadGroupsFailed": "Failed to load field groups",
"standardFields.loadFieldsFailed": "Failed to load fields",
"standardFields.fieldUpdated": "Field updated successfully",
"standardFields.fieldCreated": "Field created successfully",
"standardFields.saveFieldFailed": "Failed to save field",
"standardFields.enabledNamed": "Enabled {name}",
"standardFields.disabledNamed": "Disabled {name}",
"standardFields.updateFieldFailed": "Failed to update field",
"standardFields.updateUnitFailed": "Failed to update unit",
"standardFields.bulkEnabled": "Enabled {count} field(s)",
"standardFields.bulkDisabled": "Disabled {count} field(s)",
"standardFields.bulkFailed": "Bulk update failed",
"standardFields.recommendedEnabled": "Enabled recommended ecommerce fields",
"standardFields.recommendedFailed": "Failed to enable recommended fields",
"standardFields.fieldDeleted": "Field deleted successfully",
"standardFields.deleteFieldFailed": "Failed to delete field",
"standardFields.groupUpdated": "Group updated successfully",
"standardFields.groupCreated": "Group created successfully",
"standardFields.saveGroupFailed": "Failed to save group",
"standardFields.groupDeleted": "Group deleted successfully",
"standardFields.deleteGroupFailed": "Failed to delete group",
"standardFields.editField": "Edit Field",
"standardFields.addNewField": "Add New Field",
"standardFields.editFieldDesc": "Update the details for this standard field",
"standardFields.addFieldDesc": "Create a new standard field for your product data",
"standardFields.field.name": "Name",
"standardFields.field.namePlaceholder": "Product Title",
"standardFields.field.nameHint": "Display name for this field",
"standardFields.field.key": "Key",
"standardFields.field.keyPlaceholder": "product_title",
"standardFields.field.keyTitle": "Lowercase letters, numbers, and underscores only",
"standardFields.field.keyHint": "Unique identifier (lowercase, no spaces)",
"standardFields.field.type": "Type",
"standardFields.field.typeDefaultHint": "Data type for this field",
"standardFields.field.group": "Group",
"standardFields.field.groupHint": "Group this field belongs to",
"standardFields.field.enabled": "Enabled",
"standardFields.field.enabledHint": "Use this field in mapping and processing",
"standardFields.field.required": "Required Field",
"standardFields.field.requiredHint": "Required fields must be mapped on every feed before products can sync.",
"standardFields.field.unit": "Unit",
"standardFields.field.unitPlaceholder": "kg, EUR, cm…",
"standardFields.field.unitHint": "Optional unit shown with this field",
"standardFields.field.description": "Description",
"standardFields.field.descriptionPlaceholder": "Enter a description for this field",
"standardFields.field.default": "Default Value",
"standardFields.field.defaultPlaceholder": "Default value (optional)",
"standardFields.field.defaultHint": "Default value when no value is provided",
"standardFields.saveUnavailable": "Save (not available)",
"standardFields.updateField": "Update Field",
"standardFields.createField": "Create Field",
"standardFields.editGroup": "Edit Group",
"standardFields.addNewGroup": "Add New Group",
"standardFields.editGroupDesc": "Update the details for this field group",
"standardFields.addGroupDesc": "Create a new group to organize your standard fields",
"standardFields.group.name": "Name",
"standardFields.group.namePlaceholder": "Basic Information",
"standardFields.group.nameHint": "Display name for this group",
"standardFields.group.description": "Description",
"standardFields.group.descriptionPlaceholder": "Enter a description for this group",
"standardFields.group.descriptionHint": "Optional description explaining the purpose of this group",
"standardFields.group.order": "Display Order",
"standardFields.group.orderHint": "Lower numbers appear first",
"standardFields.updateGroup": "Update Group",
"standardFields.createGroup": "Create Group",
"standardFields.deleteFieldDesc": "This action cannot be undone. This will permanently delete the field and remove it from any templates that use it.",
"standardFields.deleteGroupDesc": "This action cannot be undone. This will permanently delete the group. Any fields in this group will need to be reassigned.",
"standardFields.type.string.label": "Text",
"standardFields.type.string.hint": "Free text — names, codes, short notes",
"standardFields.type.number.label": "Number",
"standardFields.type.number.hint": "Numeric value; add a unit when useful (EUR, pcs)",
"standardFields.type.boolean.label": "Yes / No",
"standardFields.type.boolean.hint": "True or false",
"standardFields.type.date.label": "Date",
"standardFields.type.date.hint": "A calendar date",
"standardFields.type.url.label": "URL",
"standardFields.type.url.hint": "Web link (product page, video, manufacturer)",
"standardFields.type.image.label": "Image",
"standardFields.type.image.hint": "Image URL or gallery image",
"standardFields.type.dimension.label": "Dimension",
"standardFields.type.dimension.hint": "Length measurement (width, height, depth)",
"standardFields.type.weight.label": "Weight",
"standardFields.type.weight.hint": "Mass / shipping weight",
"standardFields.type.color.label": "Color",
"standardFields.type.color.hint": "Color name or code",
"standardFields.type.custom.label": "Custom",
"standardFields.type.custom.hint": "Special / free-form field",
"standardFields.fallback.gtin": "GTIN/EAN",
"standardFields.fallback.title": "Product name",
"standardFields.fallback.brand": "Brand",
"standardFields.fallback.description": "Description",
"standardFields.fallback.product_model": "Product model",
"standardFields.fallback.price": "Price",
"standardFields.fallback.sale_price": "Sale price",
"standardFields.fallback.purchase_price": "Purchase price",
"standardFields.fallback.currency": "Currency",
"standardFields.fallback.image_url": "Image URL",
"standardFields.fallback.main_image": "Main image",
"standardFields.fallback.additional_image_urls": "Additional images",
"standardFields.fallback.product_url": "Product URL",
"standardFields.fallback.official_link": "Official link",
"standardFields.fallback.sku": "SKU",
"standardFields.fallback.mpn": "MPN",
"standardFields.fallback.category": "Category",
"standardFields.fallback.availability": "Availability",
"standardFields.fallback.stock": "Stock",
"standardFields.fallback.color": "Color",
"standardFields.fallback.size": "Size",
"standardFields.fallback.material": "Material",
"standardFields.fallback.warranty": "Warranty",
"standardFields.fallback.service": "Service",
"standardFields.fallback.weight": "Weight",
"standardFields.fallback.net_depth": "Net depth",
"standardFields.fallback.net_height": "Net height",
"standardFields.fallback.net_width": "Net width",
"standardFields.fallback.net_mass": "Net mass",
"standardFields.fallback.video_url": "Video URL",
"standardFields.fallback.eprel_id": "EPREL ID",
"standardFields.fallback.specs": "Specifications",
"standardFields.fallback.specifications": "Specifications (legacy)",
"standardFields.tip.gtin": "Global Trade Item Number — barcode/EAN/UPC used to identify the product.",
"standardFields.tip.title": "Customer-facing product name shown in catalogs and channels.",
"standardFields.tip.brand": "Manufacturer or brand name (not the retailer).",
"standardFields.tip.description": "Longer product copy; used for enrichment and channel listings.",
"standardFields.tip.product_model": "Model name/number from the manufacturer.",
"standardFields.tip.price": "Regular selling price (numeric; currency mapped separately).",
"standardFields.tip.sale_price": "Discounted or promotional price when on sale.",
"standardFields.tip.purchase_price": "Your cost / buy price (internal).",
"standardFields.tip.currency": "ISO currency code for price fields (e.g. EUR, USD).",
"standardFields.tip.image_url": "Primary product image URL.",
"standardFields.tip.main_image": "Main gallery image URL (alias of image).",
"standardFields.tip.additional_image_urls": "Extra image URLs (comma-separated or repeated nodes).",
"standardFields.tip.product_url": "Public product page URL on your store or site.",
"standardFields.tip.official_link": "Manufacturer or brand product page URL.",
"standardFields.tip.sku": "Stock Keeping Unit — your internal item code.",
"standardFields.tip.mpn": "Manufacturer Part Number — supplier's part code.",
"standardFields.tip.category": "Product category or taxonomy path.",
"standardFields.tip.availability": "In stock / out of stock / preorder style status.",
"standardFields.tip.stock": "Numeric inventory quantity.",
"standardFields.tip.color": "Color attribute for variants.",
"standardFields.tip.size": "Size attribute for variants.",
"standardFields.tip.material": "Primary material or composition.",
"standardFields.tip.warranty": "Warranty term or text.",
"standardFields.tip.service": "Service or support notes.",
"standardFields.tip.weight": "Shipping or net weight.",
"standardFields.tip.eprel_id": "EU energy label (EPREL) product identifier.",
"standardFields.tip.specs": "Structured technical specifications.",
"standardFields.tip.specifications": "Legacy specs field; prefer specs when both exist.",
"export.dialog.title": "Export Selected Products",
"export.dialog.description": "Export {count} selected product(s). Pick the export feed that defines format and fields — like choosing what to sync, but for a download or partner feed.",
"export.dialog.loadFailed": "Failed to load export feed options. Please try again.",
"export.dialog.selectPlaceholder": "Select an export feed…",
"export.dialog.help": "Your selection chooses the products; the feed chooses channel format and mapped fields.",
"export.dialog.emptyTitle": "No export feeds yet",
"export.dialog.emptyMessage": "Create an export feed to choose format and fields, then come back to export this selection.",
"export.dialog.createFeedCta": "Create export feed",
"export.dialog.confirmAria": "Confirm export",
"export.dialog.export": "Export",
"billing.title": "Usage & Billing",
"billing.loadFailed": "Failed to load billing",
"billing.usageLoadFailed": "Failed to load usage",
"billing.checkoutComplete": "Checkout complete. Your plan and credits will refresh shortly.",
"billing.checkoutCompletePlan": "Plan updated. Your {plan} credits are ready.",
"billing.checkoutCanceled": "Checkout was canceled. No changes were made.",
"billing.portalReturned": "Returned from the billing portal. Manage your plan here or on Plans.",
"billing.comparePlans": "Compare plans",
"billing.managePayment": "Manage payment",
"billing.addCredits": "Add credits",
"billing.addingCredits": "Adding…",
"billing.addCreditsTitle": "Add credits",
"billing.addCreditsDescription": "Platform admin only. Credits are available right away for AI titles, descriptions, and other paid steps.",
"billing.creditAmount": "Credit amount",
"billing.invalidCreditAmount": "Please enter a valid credit amount.",
"billing.companyNotFound": "Company not found.",
"billing.creditsAdded": "{amount} credits have been added.",
"billing.addCreditsFailed": "Failed to add credits. Platform admin access may be required.",
"billing.planApplied": "Plan applied. Your credits are ready.",
"billing.checkoutFailed": "Checkout failed",
"billing.portalFailed": "Could not open billing portal",
"billing.noPlanAssigned": "No plan assigned",
"billing.unlimited": "Unlimited",
"billing.payAsYouGo": "Pay as you go",
"billing.noMonthlyAiCredits": "No monthly AI credits",
"billing.header.noPlan": "No plan assigned yet. Choose a plan or ask a company admin.",
"billing.header.free": "Map feeds and clean up product data without AI credits.",
"billing.header.enterprise": "Unlimited products and AI capacity.",
"billing.header.payg": "Pay as you go — credits come from your company wallet.",
"billing.header.remaining": "{remaining} AI credits remaining this period.",
"billing.na": "N/A",
"billing.range.7d": "last 7 days",
"billing.range.30d": "last 30 days",
"billing.range.cycle": "current billing cycle",
"billing.range.all": "all time",
"billing.rangeOpt.7d": "Last 7 days",
"billing.rangeOpt.30d": "Last 30 days",
"billing.rangeOpt.cycle": "Current cycle",
"billing.rangeOpt.all": "All time",
"billing.freeBannerTitle": "You're on the Free plan",
"billing.freeBannerMessage": "Upgrade for AI titles and descriptions, and higher product limits.",
"billing.outOfCreditsTitle": "You're out of AI credits",
"billing.productLimitTitle": "Product limit reached",
"billing.outOfCreditsMessage": "AI titles and descriptions are paused until credits are added or you upgrade.",
"billing.productLimitMessage": "Upgrade for more product capacity.",
"billing.lowCreditsTitle": "Credits running low",
"billing.lowCreditsMessage": "Only {remaining} credits left on {plan}. Upgrade before your next large batch.",
"billing.currentPlan": "Current plan",
"billing.periodEnds": "Billing period ends {date}",
"billing.openEndedContract": "Open-ended contract",
"billing.creditWallet": "Credit wallet",
"billing.creditsRemaining": "Credits remaining",
"billing.enterpriseCapacity": "Enterprise managed capacity",
"billing.paygUsed": "{used} used · no monthly allotment",
"billing.paygWallet": "{remaining} remaining in wallet",
"billing.trialLeftover": "Trial / leftover credits",
"billing.aiLockedFree": "AI locked on Free",
"billing.usedOf": "{used} used of {total}",
"billing.noBalanceTitle": "No credit balance yet",
"billing.noBalanceBody": "Your plan's credits will show here once billing is set up for this workspace.",
"billing.needCapacity": "Need more capacity?",
"billing.selfServeUpgrade": "Self-serve upgrade to Starter, Growth, or Business",
"billing.viaStripe": "via Stripe",
2026-08-16 11:37:42 +02:00
"billing.checkoutUnavailable": "Self-serve purchases are unavailable until Stripe is configured. Contact sales for a plan.",
"billing.upgradeToGrowth": "Upgrade to Growth",
"billing.askAdminPlan": "Ask a company admin to change the plan.",
"billing.usage": "Usage",
"billing.productsProcessed": "{count} products processed · {range}",
"billing.updating": "Updating…",
"billing.productsByDay": "Products by day",
"billing.chartAmber": "Amber = tokens. Range: {range}.",
"billing.chartRange": "Range: {range}.",
"billing.nothingToChartTitle": "Nothing to chart yet",
"billing.nothingToChartBody": "Add products or connect a feed — usage will show up here.",
"billing.dailyChartsHint": "Daily charts are available for the last 7 days, 30 days, or the current billing cycle.",
"billing.noNewProducts": "No new products in {range}",
"billing.catalogOverall": "Catalog has {count} products overall.",
"billing.chartProducts": "Products",
"billing.chartTokens": "Tokens",
"billing.chartEmpty": "No products in this period.",
"billing.adminStats": "{tokens} tokens · {jobs} jobs · {input} input / {export} export feeds",
"billing.whatUsesCredits": "What uses credits",
"billing.burnsCredits": "Burns credits",
"billing.noCreditCost": "No credit cost",
"billing.publicPricing": "Public pricing",
"billing.managePlanOnPlans": "Manage plan on Plans",
"billing.recovery.pastDueTitle": "Payment past due",
"billing.recovery.pastDueAdmin": "Your subscription payment failed. Update payment in the Customer Portal — access stays open during this grace period.",
"billing.recovery.pastDueMember": "Billing needs attention. Ask a company admin to update payment in the Customer Portal. Access stays open during this grace period.",
"billing.recovery.openPortal": "Open Customer Portal",
"billing.recovery.contactAdmin": "Contact a company admin",
"billing.recovery.goToBilling": "Go to Billing",
"billing.recovery.missingPlanTitle": "No plan assigned",
"billing.recovery.missingPlanMessage": "This company has no active plan (often after a skipped migration). Assign a plan via Checkout or ask support — do not assume Unlimited capacity.",
"billing.recovery.choosePlan": "Choose a plan",
"billing.upgrade": "Upgrade",
"billing.askCompanyAdmin": "Ask a company admin",
"billing.memberHint": "Only company admins can change plans or open Checkout.",
"billing.unlimitedPlanWallet": "Unlimited plan · {wallet} wallet",
"billing.creditsSuffix": "{label} credits",
"billing.perMonth": "{amount} / month",
"billing.zeroPerMonth": "0 / month",
"billing.upTo": "Up to {count}",
"billing.skusUnlimited": "{used} SKUs (unlimited)",
"billing.skusOnly": "{used} SKUs",
"billing.skusOf": "{used} / {max} SKUs",
"billing.planKind.none": "No active plan",
"billing.planKind.enterprise": "Enterprise / custom",
"billing.planKind.trial": "Trial",
"billing.planKind.standard": "Standard plan",
"billing.creditUsage.normalize.label": "Normalize, specs & fill",
"billing.creditUsage.normalize.detail": "Data cleanup and attribute fill run without spending AI credits.",
"billing.creditUsage.ai.label": "AI titles & descriptions",
"billing.creditUsage.ai.detail": "Charged per product based on the AI feature and how much text is generated.",
"billing.creditUsage.eprel.label": "EPREL / energy labels",
"billing.creditUsage.eprel.detail": "Free public EU EPREL data on all plans (no credits).",
"billing.creditUsage.campaign.label": "Campaign AI & brand apply",
"billing.creditUsage.campaign.detail": "Paid AI steps that use the managed model spend company credits.",
"exports.title": "Export Feeds",
"exports.description": "Choose what to publish per channel — which products and fields — then share a public feed URL (no login).",
"exports.descriptionFiltered": "Public Google Shopping, Meta, and custom feed links. Showing {filtered} of {total} feeds.",
"exports.loadFailed": "Failed to load export feeds",
"exports.loadFeedFailed": "Failed to load export feed",
"exports.refresh": "Refresh",
"exports.refreshing": "Refreshing…",
"exports.create": "Create Export Feed",
"exports.edit": "Edit Export Feed",
"exports.editDescription": "Update the name, status, which products are included, and which fields are mapped.",
"exports.howToTitle": "How to choose what to export",
"exports.howTo.choose": "What goes in the feed",
"exports.howTo.chooseBody": "— set source feed and product statuses when you create or edit a feed so the public URL only includes those products.",
"exports.howTo.subset": "One-off subset",
"exports.howTo.subsetBody": "— on",
"exports.howTo.productsLink": "Products",
"exports.howTo.subsetTail": ", select rows and Export to download only those products using a feeds format and fields.",
"exports.howTo.google": "Google Shopping",
"exports.howTo.googleBody": "— create a CSV or XML preset, Generate, copy the public URL into Merchant Center → Products → Feeds → scheduled fetch.",
"exports.howTo.meta": "Meta catalog",
"exports.howTo.metaBody": "— CSV preset for Commerce Manager data sources.",
"exports.howTo.custom": "Custom CSV/XML",
"exports.howTo.customBody": "— any partner; same public URL works for cron / webhook-style pollers.",
"exports.howTo.rest": "REST",
"exports.howTo.restBody": "— API keys under",
"exports.howTo.settingsApiKeys": "Settings → API keys",
"exports.howTo.restTail": "(legacy keys were not migrated) pull",
"exports.howTo.openapi": "OpenAPI",
"exports.feedStatus": "Feed Status",
"exports.generating": "Generating export — this can take a moment for large catalogs.",
"exports.generationFailed": "Generation failed. See the error above, then try Refresh Feed again.",
"exports.exportedProducts": "Exported {count} products",
"exports.lastGenerated": "Last generated: {time}",
"exports.neverGenerated": "Never generated",
"exports.searchPlaceholder": "Search feeds...",
"exports.searchAria": "Search feeds",
"exports.clearSearch": "Clear search",
"exports.loading": "Loading feeds…",
"exports.loadErrorTitle": "Couldn't load export feeds",
"exports.loadErrorBody": "Something went wrong loading your exports. Retry, or check the error above for details.",
"exports.tryAgain": "Try again",
"exports.emptyTitle": "No export feeds yet",
"exports.emptyBody": "Create a Google Shopping, Meta, or custom CSV/XML feed to choose which products and fields go out. Generate a public URL for Merchant Center or any partner — or export a selected subset from Products.",
"exports.emptyCta": "Create Google Shopping feed",
"exports.noMatchTitle": "No matching feeds",
"exports.noMatchBody": "Try a different search term.",
"exports.col.name": "Name",
"exports.col.format": "Format",
"exports.col.feedUrl": "Feed URL",
"exports.col.lastGenerated": "Last generated",
"exports.col.status": "Status",
"exports.col.actions": "Actions",
"exports.working": "Working…",
"exports.generatingShort": "Generating…",
"exports.copyUrl": "Copy URL",
"exports.openMenu": "Open menu",
"exports.preview": "Preview",
"exports.download": "Download",
"exports.refreshFeed": "Refresh Feed",
"exports.editAction": "Edit",
"exports.delete": "Delete",
"exports.rotateToken": "Rotate URL token",
"exports.rotateFailed": "Failed to rotate feed URL token",
"exports.deleting": "Deleting…",
"exports.channelPreset": "Channel preset",
"exports.name": "Name",
"exports.format": "Format",
"exports.sourceFeed": "Source feed (optional)",
"exports.sourceFeedHelp": "Limit this feed to products from one input feed, or leave as All products — this is how you choose what the public URL includes.",
"exports.allProducts": "All products",
"exports.rootElement": "Root element",
"exports.itemElement": "Item element",
"exports.productStatuses": "Product statuses (comma-separated)",
"exports.productStatusesHelp": "Only include products with these statuses (for example active). Leave blank for all statuses.",
"exports.status": "Status",
"exports.active": "Active",
"exports.inactive": "Inactive",
"exports.fieldMappings": "Field mappings",
"exports.addField": "Add field",
"exports.outputKey": "Output key",
"exports.source": "Source",
"exports.customSource": "Custom (attr.* / spec.*)",
"exports.removeField": "Remove field",
"exports.fieldHelp": "Exports read processed products (with raw mapped_data as fallback). Use eprel_* / energy_* for EPREL fields, spec.* for one specification, or specifications.* to expand all specs as XML nodes.",
"exports.saving": "Saving…",
"exports.saveChanges": "Save changes",
"exports.createFeed": "Create feed",
"exports.updated": "Export feed updated.",
"exports.created": "Export feed created.",
"exports.saveFailed": "Save failed",
"exports.urlCopied": "Public {format} feed URL copied. Paste it into any system that fetches product feeds.",
"exports.copyFailed": "Failed to copy URL to clipboard",
"exports.refreshed": "Feed refreshed",
"exports.refreshedWithCount": "Feed refreshed ({count} products).",
"exports.refreshFailed": "Failed to refresh the feed",
"exports.deleteConfirm": "Are you sure you want to delete this export feed?",
"exports.deleted": "Export feed deleted successfully.",
"exports.deleteFailed": "Failed to delete export feed",
"exports.defaultName": "New Export Feed",
"exports.fallbackName": "Export Feed",
"exports.dialog.selectTitle": "Export Selected Products",
"exports.dialog.selectDescription": "Choose an export feed configuration to use for the {count} selected products.",
"exports.dialog.noneFound": "No export feed configurations found. Please create one in the Export Feeds section.",
"exports.dialog.loadFailed": "Failed to load export feed options. Please try again.",
"exports.dialog.selectRequired": "Please select an export feed format.",
"exports.dialog.selectPlaceholder": "Select an export feed format...",
"exports.dialog.confirmAria": "Confirm export",
"exports.dialog.export": "Export",
"exports.preset.google_shopping_csv.label": "Google Shopping (CSV)",
"exports.preset.google_shopping_csv.shortLabel": "Google Shopping CSV",
"exports.preset.google_shopping_csv.description": "Merchant Center product feed with the standard Google columns (id, title, price, gtin, …).",
"exports.preset.google_shopping_csv.hint": "After you refresh the feed, copy the public CSV URL into Google Merchant Center → Products → Feeds → Add feed → Scheduled fetch.",
"exports.preset.google_shopping_csv.defaultName": "Google Shopping CSV",
"exports.preset.google_shopping_xml.label": "Google Shopping (XML)",
"exports.preset.google_shopping_xml.shortLabel": "Google Shopping XML",
"exports.preset.google_shopping_xml.description": "Same Google columns as XML elements (g:id, g:title, …) for Merchant Center XML feeds.",
"exports.preset.google_shopping_xml.hint": "Paste the public XML URL into Merchant Center as a scheduled fetch. Map missing store fields (link, price) under Field mappings if needed.",
"exports.preset.google_shopping_xml.defaultName": "Google Shopping XML",
"exports.preset.meta_csv.label": "Meta catalog (CSV)",
"exports.preset.meta_csv.shortLabel": "Meta CSV",
"exports.preset.meta_csv.description": "Facebook / Instagram Commerce catalog columns (id, title, availability, price, image_link, …).",
"exports.preset.meta_csv.hint": "In Meta Commerce Manager → Catalog → Data sources → Add items → Use data feed, paste the public CSV URL.",
"exports.preset.meta_csv.defaultName": "Meta Catalog CSV",
"exports.preset.custom_csv.label": "Custom CSV",
"exports.preset.custom_csv.shortLabel": "Custom CSV",
"exports.preset.custom_csv.description": "Choose your own columns and product sources for any partner or webhook.",
"exports.preset.custom_csv.hint": "Add or rename output keys freely. The public URL needs no login to download.",
"exports.preset.custom_csv.defaultName": "Custom CSV Export",
"exports.preset.custom_xml.label": "Custom XML",
"exports.preset.custom_xml.shortLabel": "Custom XML",
"exports.preset.custom_xml.description": "Build a custom XML shape with your own root/item names and field mappings.",
"exports.preset.custom_xml.hint": "Set root and item element names, then map each output key to a product source.",
"exports.preset.custom_xml.defaultName": "Custom XML Export",
"processing.title": "Processing",
"processing.description": "Live pipeline progress for product processing jobs. Auto-refreshes while this tab is visible. Completed jobs link to Needs Review for accept / edit / reject.",
"processing.refresh": "Refresh",
"processing.loadFailed": "Failed to load processing jobs",
"processing.tooManyRequests": "Too many requests — wait a moment and try again.",
"processing.serverError": "{fallback} (server error {status}). Try again shortly.",
"processing.httpError": "{fallback} (HTTP {status})",
"processing.cancelFailed": "Could not cancel this task",
"processing.retryFailed": "Could not retry this task",
"processing.cancelledMsg": "\"{name}\" was cancelled.",
"processing.queuedRetry": "\"{name}\" queued for retry.",
"processing.jobFallback": "Job {id}",
"processing.tasks": "Tasks",
"processing.pipelineHint": "Pipeline: normalize → specs → fill → EPREL → AI. Large starts may split into sibling jobs.",
"processing.emptyTitle": "No background tasks yet",
"processing.emptyBody": "No background jobs yet. Start a new job from Products when you are ready.",
"processing.startJob": "Start a job",
"processing.connectFeed": "Connect feed",
"processing.splitBatch": "Split batch · {jobs} jobs · {products} products",
"processing.col.task": "Task",
"processing.col.status": "Status",
"processing.col.steps": "Steps",
"processing.col.progress": "Progress",
"processing.col.started": "Started",
"processing.col.completed": "Completed",
"processing.col.actions": "Actions",
"processing.partOfBatch": "· part of batch",
"processing.nowStep": "Now: {step}",
"processing.skip": "(skip)",
"processing.reviewResults": "Review results",
"processing.reviewTitle": "Open Needs Review to accept, edit, or reject enrichment",
"processing.cancel": "Cancel",
"processing.cancelling": "Cancelling…",
"processing.cancelTitle": "Cancel this pending or running job",
"processing.retry": "Retry",
"processing.retrying": "Retrying…",
"processing.actions.onPage": "{count} on this page",
"processing.actions.clearSelection": "Clear selection",
"processing.actions.processSelected": "Process selected",
"processing.actions.processAria": "Process selected products",
"processing.actions.processAriaCount": "Process {count} selected product{plural} on this page",
"processing.actions.whatToProcess": "What to process",
"processing.actions.freeNoAiTitle": "Free plan — no AI credits",
"processing.actions.freeNoAiBody": "Normalize, specs, fill, and EPREL still run. AI titles/descriptions need a paid plan or credits.",
"processing.actions.comparePlans": "Compare plans",
"processing.actions.selectAll": "Select All",
"processing.actions.selectAllAria": "Select all process modes",
"processing.actions.upgradeRequired": "{label} (upgrade required)",
"processing.actions.upgradeSuffix": " · upgrade",
"processing.actions.credits": "{credits} credits",
"processing.actions.free": "free",
"processing.actions.autoCategorizeTitle": "Auto-adding Categorization",
"processing.actions.autoCategorizeBody": "{count} product(s) need categorization for {types} processing",
"processing.actions.aiLocked": "AI options are locked on Free. Upgrade to process titles/descriptions.",
"processing.actions.totalCredits": "Total Credits ({count} on this page):",
"processing.actions.starting": "Starting…",
"processing.actions.processCount": "Process {count} on this page",
"processing.actions.close": "Close",
"processing.actions.accept": "Accept",
"processing.actions.acceptEnrichment": "Accept enrichment",
"processing.actions.export": "Export",
"processing.actions.exportSelected": "Export Selected",
"processing.actions.reject": "Reject",
"processing.actions.rejectReset": "Reject (reset)",
"processing.actions.resetUnprocessed": "Reset to Unprocessed",
"processing.actions.confirmTitle": "Confirm processing",
"processing.actions.confirmBody": "Process {count} product(s) on this page for {credits} credits. Credits are consumed when the job starts and cannot be undone from this action.",
"processing.actions.confirmStart": "Start processing",
"processing.option.category": "Categories",
"processing.option.attributes": "Attributes / specs",
"processing.option.title": "Titles (AI)",
"processing.option.description": "Descriptions (AI)",
"processing.receipt.view": "View in Processing",
"processing.receipt.undo": "Undo",
"processing.receipt.format": "{succeeded} succeeded · {skipped} skipped · {failed} failed",
"processing.receipt.cancelledOne": "Processing cancelled",
"processing.receipt.cancelledMany": "Processing jobs cancelled",
"processing.receipt.cancelledDesc": "The just-started job was cancelled.",
"processing.receipt.cancelFailed": "Could not cancel processing job",
"unsubscribe.title": "Unsubscribe",
2026-08-17 21:20:45 +02:00
"unsubscribe.useEmailLink": "Use the unsubscribe link in the email we sent you. Opening this page without that link cannot change your email preferences.",
"unsubscribe.me": "Unsubscribe me",
"unsubscribe.invalidLink": "Invalid link",
"unsubscribe.failedShort": "Unsubscribe failed",
"unsubscribe.already": "You are already unsubscribed.",
"unsubscribe.confirmPrompt": "Confirm below to unsubscribe from marketing emails.",
"unsubscribe.done": "You have been unsubscribed.",
"stores.title": "Stores & sources",
"stores.description": "Connect any store or supplier in one place — Woo, Shopify, feed URL, or CSV. Live stores: products Descrybe → store; orders/reviews store → Descrybe. Export when the catalog is ready.",
"stores.allInputFeeds": "All input feeds",
"stores.exportFeeds": "Export feeds",
"stores.migrationNote": "After a Descrybe platform migration, WooCommerce and Shopify credentials may need to be re-entered — that is a reconnect step, not a broken sync.",
"stores.docsPrefix": "Docs:",
"stores.docsApiOverview": "API overview",
"stores.docsSuffix": "for public product access; use WooCommerce or Shopify below for live store sync.",
"stores.connectorsHeading": "Store and catalog connectors",
"stores.statusAria": "Status: {label}",
"stores.ctaAria": "{cta}: {title}",
"stores.startTitle": "Where should I start?",
"stores.startBody": "Woo store → WooCommerce. Shopify or any other platform → Feed URL or CSV upload. Ready to ship to Merchant Center or partners → Export feeds (Google Shopping preset or custom fields). After migration, reconnect Woo/Shopify before expecting sync to work.",
"stores.startBodyMember": "Ask a company admin to connect WooCommerce or Shopify. You can still open connected stores to sync and browse, and use Feed URL, CSV, or export feeds when your plan allows.",
"stores.wizard.title": "Guided store setup",
"stores.wizard.description": "Connect a store, test the connection, queue the first product sync, then you are done.",
"stores.wizard.guidedSetup": "Guided setup",
"stores.wizard.guidedSetupAria": "Start guided store setup",
"stores.wizard.adminOnly": "Only company admins can run guided store setup (save credentials and first sync). You can still open connected stores to sync and browse.",
"stores.wizard.pickChannel": "Choose a store connector",
"stores.wizard.pickChannelBody": "Pick WooCommerce or Shopify. You will finish connect → test → first sync on the connector page, then return here.",
"stores.wizard.channel.shopify": "Shopify",
"stores.wizard.channel.woocommerce": "WooCommerce",
"stores.wizard.channelLabel": "Setting up: {channel}",
"stores.wizard.changeChannel": "Change connector",
"stores.wizard.noChannels": "No store connectors are on your plan. Upgrade or ask a company admin.",
"stores.wizard.progress": "{done} of {total} complete",
"stores.wizard.stepsLabel": "Store setup steps",
"stores.wizard.step.connect.title": "Connect",
"stores.wizard.step.connect.body": "Save store credentials on the connector page.",
"stores.wizard.step.test.title": "Test connection",
"stores.wizard.step.test.body": "Run Test Connection until it succeeds.",
"stores.wizard.step.sync.title": "First sync",
"stores.wizard.step.sync.body": "Queue the first product sync (enable sync if needed).",
"stores.wizard.step.done.title": "Done",
"stores.wizard.step.done.body": "Your store is connected and a sync has been started or completed.",
"stores.wizard.openConnector": "Open connector",
"stores.wizard.viewProducts": "View products",
"stores.wizard.backToHub": "Back to stores",
"stores.wizard.banner.generic": "Guided setup: finish this step, then return to the wizard.",
"stores.wizard.banner.test": "Guided setup — test the connection, then return to the wizard.",
"stores.wizard.banner.sync": "Guided setup — queue the first product sync, then return to the wizard.",
"stores.wizard.banner.return": "Back to wizard",
"stores.wizard.banner.dismiss": "Dismiss",
"stores.woo.title": "WooCommerce",
"stores.woo.description": "Push products Descrybe → WooCommerce. Pull orders and reviews WooCommerce → Descrybe.",
"stores.woo.ctaReconnect": "Reconnect Woo",
"stores.woo.ctaOpen": "Open Woo",
"stores.woo.ctaConnect": "Connect Woo",
"stores.woo.ctaView": "View Woo",
"stores.shopify.title": "Shopify",
"stores.shopify.description": "Push products Descrybe → Shopify. Pull orders Shopify → Descrybe. Reviews are not available via Shopify Admin API.",
"stores.shopify.ctaReconnect": "Reconnect Shopify",
"stores.shopify.ctaOpen": "Open Shopify",
"stores.shopify.ctaConnect": "Connect Shopify",
"stores.shopify.ctaView": "View Shopify",
"stores.feedUrl.title": "Feed URL",
"stores.feedUrl.description": "Pull any supplier or store catalog from a public CSV or XML URL on a schedule. Map fields, then sync.",
"stores.feedUrl.cta": "Add feed URL",
"stores.csv.title": "CSV upload",
"stores.csv.description": "Upload a product CSV as an input feed. Best for one-off supplier files or Shopify admin exports.",
"stores.csv.cta": "Upload CSV",
"stores.export.title": "Export / REST",
"stores.export.description": "Publish Google Shopping or custom CSV/XML with a public URL. Or pull products via API key (/api/v1).",
"stores.export.cta": "Open exports",
"stores.apiKeys.title": "API keys",
"stores.apiKeys.description": "Legacy API keys were not migrated. Create a new key in Settings to restore /api/v1 access — the secret is shown only once.",
"stores.apiKeys.descriptionMember": "Company API keys for /api/v1. Legacy keys were not migrated — only admins can create or revoke; you can view prefixes in Settings.",
"stores.apiKeys.cta": "Manage API keys",
"stores.apiKeys.ctaView": "View API keys",
"stores.status.needsReconnect": "Needs reconnect",
"stores.status.connected": "Connected",
"stores.status.notConnected": "Not connected",
"stores.status.ready": "Ready",
"stores.status.outbound": "Outbound",
"stores.status.reissue": "Reissue",
"store.tab.connection": "Connection",
"store.tab.orders": "Orders",
"store.tab.settings": "Settings",
"store.tab.categories": "Categories",
"store.tab.attributes": "Attributes",
"store.tab.reviews": "Reviews",
"store.badge.credentialsOnFile": "Credentials on file",
"store.badge.syncEnabled": "Product push enabled",
"store.badge.syncDisabled": "Product push disabled",
"store.badge.syncQueued": "Product push queued",
"store.badge.dryRun": "Dry run",
"store.badge.testStatus": "Test: {status}",
"store.badge.syncStatus": "Product push: {status}",
"store.badge.ordersQueued": "Orders sync queued",
"store.badge.ordersStatus": "Orders: {status}",
"store.badge.syncedCount": "{count} synced",
"store.badge.mappedCount": "{count} mapped",
"store.badge.productsCount": "{count} products",
"store.badge.optionsCount": "{count} options",
"store.lastSync": "Last sync: {date}",
"store.noOrdersSyncYet": "No orders sync has completed yet.",
"store.save": "Save",
"store.saving": "Saving...",
"store.testing": "Testing...",
"store.testConnection": "Test Connection",
"store.queueing": "Queueing...",
"store.queueProductPush": "Queue product push (Descrybe → store)",
"store.queueFirstProductSync": "Queue first product push (Descrybe → store)",
"store.queueOrdersImport": "Queue orders import (store → Descrybe)",
"store.refreshList": "Refresh list",
"store.saveBeforeTest": "Save credentials before testing",
"store.saveTestBeforeQueue": "Save credentials and Test Connection before queueing sync",
"store.connectionOk": "Connection OK",
"store.connectionSuccessful": "Connection successful",
"store.connectionSuccessfulDot": "Connection successful.",
"store.connectionFailed": "Connection failed",
"store.connectionFailedDot": "Connection failed.",
"store.connectionTestFailed": "Connection test failed",
"store.testFailed": "Test failed",
"store.setupSteps": "Setup steps",
"store.col.order": "Order",
"store.col.customer": "Customer",
"store.col.status": "Status",
"store.col.total": "Total",
"store.col.date": "Date",
"store.loadingOrders": "Loading orders…",
"store.loadingOrdersDot": "Loading orders.",
"flash.store.saveFailed": "Could not save settings",
"flash.store.queueSyncFailed": "Could not queue sync",
"flash.store.queueOrdersFailed": "Could not queue orders sync",
"flash.store.connectedTo": "Connected to {name}.",
"flash.shopify.loadFailed": "Failed to load Shopify config",
"flash.shopify.productSyncQueued": "Product sync queued. The worker will run it shortly.",
"flash.shopify.ordersSyncQueued": "Orders sync queued. The worker will run it shortly.",
"flash.woo.loadFailed": "Failed to load WooCommerce config",
"flash.woo.productSyncQueued": "Product sync queued. Sync will run shortly.",
"flash.woo.ordersSyncQueued": "Orders sync queued. Sync will run shortly.",
"flash.woo.reviewsSyncQueued": "Reviews sync queued. Sync will run shortly.",
"flash.woo.queueReviewsFailed": "Could not queue reviews sync",
"flash.woo.remoteMapsFailed": "Failed to load remote maps",
"flash.woo.syncSettingsFailed": "Could not save sync settings",
"flash.woo.categoryAutoMapFailed": "Category auto-map failed",
"flash.woo.attributeAutoMapFailed": "Attribute auto-map failed",
"shopify.title": "Shopify Integration",
"shopify.description": "Connect a Shopify store with Dev Dashboard client credentials (recommended) or a legacy Admin API token. Products: Descrybe → Shopify. Orders: Shopify → Descrybe.",
"shopify.adminOnly": "Only company admins can change Shopify connection settings. Sync and browse stay available.",
"shopify.lockedTitle": "Shopify connection locked",
"shopify.noCredentialsMember": "No Shopify credentials on file yet. Ask a company admin to connect the store. Sync and order browse stay available after they save and test the connection.",
"shopify.enterToken": "Enter credentials",
"shopify.noCredentials": "No Shopify credentials on file. Enter your *.myshopify.com domain and Dev Dashboard Client ID + secret (or a legacy Admin API token), then Save and Test Connection. After a platform migration, legacy secrets are not carried over — reconnect with a fresh token.",
"shopify.allConnectors": "All store connectors",
"shopify.setupDesc": "New Shopify apps are created in the Dev Dashboard (not Develop apps in Admin). Paste Client ID + secret below — Descrybe exchanges them for Admin API tokens and refreshes before they expire.",
"shopify.setup.oauthNote": "Still manual: create/install the app in Shopify and paste Client ID + secret here. Descrybe does not host a one-click App Store install. Legacy permanent shpat_ tokens from older Admin custom apps still work.",
"shopify.setup.scopesTitle": "Required Admin API scopes",
"shopify.setup.scopesIntro": "Add these scopes on the app version in the Dev Dashboard before you release and install:",
"shopify.setup.step3.scopes": "write_products, read_products, read_orders",
"shopify.setup.step3.mid": ", then",
"shopify.setup.step3.release": "Release",
"shopify.setup.step4.install": "Install app",
"shopify.setup.step5.before": "In app Settings, copy",
"shopify.setup.step5.clientId": "Client ID",
"shopify.setup.step5.and": "and",
"shopify.setup.step5.clientSecret": "Client secret",
"shopify.setup.step5.mid": ". Below: enter shop domain, paste both, enable sync →",
"shopify.setup.step5.save": "Save",
"shopify.setup.step5.arrow": "→",
"shopify.setup.step5.test": "Test Connection",
"shopify.setup.step5.after": ". Descrybe stores secrets encrypted and refreshes the short-lived access token automatically.",
"shopify.setup.step6.products": "Products",
"shopify.setup.step6.productsTail": "Descrybe → Shopify (outbound push).",
"shopify.setup.step6.orders": "Orders",
"shopify.setup.step6.ordersTail": "Shopify → Descrybe (inbound pull).",
"shopify.setup.step7.before": "No live shop yet? Enable",
"shopify.setup.step7.dryRun": "Dry run",
"shopify.setup.step7.after": "(or use the special dry-run access token) to walk through the flow without calling Shopify.",
"shopify.setup.openDevDashboard": "Open Dev Dashboard",
"shopify.setup.openDevelopApps": "Open shop Develop apps",
"shopify.setup.openDevelopAppsNeedDomain": "Enter your shop domain below to unlock a direct Admin link for this store.",
"shopify.setup.openDevelopAppsHint": "Opens Shopify Admin → Develop apps for this shop (legacy apps / install approvals). New apps start in the Dev Dashboard.",
"shopify.setup.copyScopes": "Copy required scopes",
"shopify.setup.scopesCopied": "Scopes copied",
"shopify.setup.docsCreate": "Create app docs",
"shopify.setup.docsTokens": "Access token docs",
"shopify.setup.showLegacyToken": "I have a legacy Admin API access token (shpat_…)",
"shopify.setup.hideLegacyToken": "Hide legacy token field",
"shopify.field.shopDomainHelp": "Admin API host only — use the *.myshopify.com name, not a custom storefront domain.",
"shopify.field.clientId": "Client ID",
"shopify.field.clientSecret": "Client secret",
"shopify.field.clientSecretHelp": "From Dev Dashboard → your app → Settings. Descrybe exchanges these for a short-lived Admin API token and refreshes it automatically.",
"shopify.field.accessTokenHelp": "Only for custom apps created in Shopify Admin before January 2026. New apps should use Client ID + secret instead.",
"shopify.placeholder.clientId": "Client ID from Dev Dashboard",
"shopify.placeholder.clientIdKeep": "Client ID on file — enter a new one to replace",
"shopify.placeholder.clientSecret": "Client secret",
"shopify.placeholder.clientSecretKeep": "Secret on file — enter a new one to replace",
"shopify.setup.scope.write_products": "write_products",
"shopify.setup.scope.write_productsWhy": "Create and update products in Shopify (outbound push)",
"shopify.setup.scope.read_products": "read_products",
"shopify.setup.scope.read_productsWhy": "Find existing products by SKU before updating",
"shopify.setup.scope.read_orders": "read_orders",
"shopify.setup.scope.read_ordersWhy": "Import orders into Descrybe (inbound)",
"shopify.setup.step1": "If you connected Shopify before a platform migration: create a new Dev Dashboard app (or reconnect with a fresh legacy token) — old saved secrets are not carried over.",
"shopify.setup.step2.before": "Open the",
"shopify.setup.step2.path": "Shopify Dev Dashboard",
"shopify.setup.step2.after": "→ Apps → Create app → Start from Dev Dashboard (or use the deep link below).",
"shopify.setup.step3.before": "Create a version: set App URL (default home is fine for API-only), add scopes",
"shopify.setup.step3.after": ".",
"shopify.setup.step4.before": "From the app Home tab,",
"shopify.setup.step4.after": "on your store (merchant must approve scopes).",
"shopify.testSectionTitle": "Verify connection",
"shopify.testHint": "Save your shop domain and token first, then run Test Connection. A successful test confirms the token and scopes before you queue sync.",
"shopify.overwriteTitle": "Overwrite Shopify products?",
"shopify.overwriteBodyCount": "This queues an outbound product push. {count} previously linked Shopify product(s) may be updated with Descrybe content.",
"shopify.overwriteBody": "This queues an outbound product push. Matched Shopify products may be updated with Descrybe content.",
"shopify.credentialsTitle": "Store credentials",
"shopify.credentialsDesc.before": "Shop domain must be your",
"shopify.credentialsDesc.code": "*.myshopify.com",
"shopify.credentialsDesc.after": "domain. Prefer Dev Dashboard Client ID + secret; legacy Admin API tokens still work.",
"shopify.field.shopDomain": "Shop domain",
"shopify.field.accessToken": "Admin API access token",
"shopify.field.apiVersion": "API version",
"shopify.placeholder.tokenKeep": "******** (leave blank to keep)",
"shopify.enableSync": "Enable product push (Descrybe → Shopify)",
"shopify.dryRunLabel": "Dry run (no live Shopify calls)",
"shopify.ordersTitle": "Orders import (Shopify → Descrybe)",
"shopify.ordersDesc": "Shopify → Descrybe — pull orders and line items into Descrybe (does not write back to Shopify).",
"shopify.ordersNeedsReconnect": "Orders import cannot run until credentials are reconnected after migration. On the Connection tab: Save, then Test Connection.",
"shopify.notesTitle": "Notes",
"shopify.notesDesc": "Shopify connector capabilities",
"shopify.notes.productsLabel": "Products (Descrybe → Shopify)",
"shopify.notes.productsBody": "— processed Descrybe products are created or updated in Shopify (SKU match via GraphQL when no cached Shopify product id). Re-sync can overwrite matched remote fields.",
"shopify.notes.ordersLabel": "Orders (Shopify → Descrybe)",
"shopify.notes.ordersBody": "— pulled for reporting and future audience workflows.",
"shopify.notes.reviewsLabel": "Reviews",
"shopify.notes.reviewsBody": "-- not supported. Shopify has no first-party product reviews Admin API (third-party review apps are out of scope here).",
"shopify.notes.encryption.before": "Tokens are encrypted at rest with",
"woo.title": "WooCommerce Integration",
"woo.description": "Create a WordPress REST API key, connect your store, then push products (Descrybe → WooCommerce) and pull orders/reviews (WooCommerce → Descrybe).",
"woo.allStores": "All stores",
"woo.adminOnly": "Only company admins can change WooCommerce connection and mapping settings. Sync and browse stay available.",
"woo.enterCredentials": "Enter credentials",
"woo.noCredentials": "No WooCommerce credentials on file. Enter your store URL, create a Read/Write REST API key in WordPress, paste Consumer Key and Secret below, then Save and Test Connection. After a platform migration, legacy secrets are not carried over — reconnect with a fresh key.",
"woo.lockedTitle": "WooCommerce connection locked",
"woo.noCredentialsMember": "No WooCommerce credentials are on file yet. Ask a company admin to connect the store. Sync, orders, and reviews stay available after they save and test the connection.",
"woo.setupDesc": "Follow these steps to create a WooCommerce REST API key in WordPress and connect it here. Descrybe never creates keys on your store for you.",
"woo.setup.step1": "If you connected WooCommerce before a platform migration: create a new REST API key — old saved credentials are not usable.",
"woo.setup.step2.before": "Enter your store",
"woo.setup.step2.path": "HTTPS URL",
"woo.setup.step2.after": "in the form below (example: https://yourstore.com).",
"woo.setup.step3.before": "In WordPress admin, open",
"woo.setup.step3.path": "WooCommerce → Settings → Advanced → REST API",
"woo.setup.step3.after": "(or use the deep link once your store URL is filled in).",
"woo.setup.step4.before": "Click",
"woo.setup.step4.addKey": "Add key",
"woo.setup.step4.mid": ", set permissions to",
"woo.setup.step4.permissions": "Read/Write",
"woo.setup.step4.after": ", then copy the Consumer Key (ck_…) and Consumer Secret (cs_…). The secret is shown only once.",
"woo.setup.step5.before": "Paste the key and secret below, enable sync if ready, then",
"woo.setup.step5.save": "Save",
"woo.setup.step5.arrow": "→",
"woo.setup.step5.test": "Test Connection",
"woo.setup.step5.after": ".",
"woo.setup.step6.products": "Products",
"woo.setup.step6.productsTail": "Descrybe → WooCommerce (outbound push).",
"woo.setup.step6.orders": "Orders",
"woo.setup.step6.and": "and",
"woo.setup.step6.reviews": "reviews",
"woo.setup.step6.inboundTail": "WooCommerce → Descrybe (inbound pull). Sync runs in the background — check status badges on this page.",
"woo.setup.openKeys": "Open REST API keys",
"woo.setup.addKey": "Add key in WordPress",
"woo.setup.openKeysHint": "Opens your store's WordPress admin (sign in if prompted). Uses the store URL from the form.",
"woo.setup.openKeysNeedUrl": "Enter a valid store URL above to unlock a direct link into WordPress.",
"woo.setup.docsLink": "WooCommerce REST API docs",
"woo.overwriteTitle": "Overwrite WooCommerce products?",
"woo.overwriteBodyCount": "This queues an outbound product push. {count} previously linked WooCommerce product(s) may be updated with Descrybe content.",
"woo.overwriteBody": "This queues an outbound product push. Matched WooCommerce products may be updated with Descrybe content.",
"woo.connectionTitle": "Store connection",
"woo.connectionDesc": "Paste your store URL and a Read/Write REST API key pair. Save, then Test Connection before queuing syncs.",
"woo.enableSync": "Enable product push (Descrybe → WooCommerce)",
"woo.field.storeUrl": "Store URL",
"woo.field.storeUrlHelp": "Public site URL with https. Used to reach the WooCommerce REST API and to deep-link into WordPress admin.",
"woo.field.consumerKey": "Consumer Key",
"woo.field.consumerSecret": "Consumer Secret",
"woo.field.credentialsHelp": "Create these under WooCommerce → Settings → Advanced → REST API with Read/Write permission. Descrybe stores them encrypted and never shows the secret again after save.",
"woo.placeholder.keep": "******** (unchanged)",
"woo.keepCredentialsHint": "Leave key/secret blank when saving to keep existing credentials.",
"woo.saveConfiguration": "Save configuration",
"woo.categoryMappingTitle": "Category Mapping",
"woo.categoryMappingDesc": "Map your internal categories to WooCommerce categories",
"woo.autoMapCategories": "Auto-map Categories",
"woo.autoMapping": "Auto-mapping...",
"woo.refreshCategories": "Refresh Categories",
"woo.availableCategories": "Available WooCommerce Categories",
"woo.categoriesEmptyHint": "Test the connection, then refresh to load WooCommerce categories.",
"woo.attributeMappingTitle": "Attribute Mapping",
"woo.attributeMappingDesc": "Map your internal attributes to WooCommerce attributes",
"woo.autoMapAttributes": "Auto-map Attributes",
"woo.refreshAttributes": "Refresh Attributes",
"woo.availableAttributes": "Available WooCommerce Attributes",
"woo.attributesEmptyHint": "Test the connection, then refresh to load WooCommerce attributes.",
"woo.ordersTitle": "Orders import (WooCommerce → Descrybe)",
"woo.ordersDesc": "WooCommerce → Descrybe — pull orders and line items into Descrybe (does not write back to the store).",
"woo.ordersNeedsReconnect": "Orders import cannot run until credentials are reconnected after migration. On the Connection tab: Save, then Test Connection.",
"woo.syncSettingsTitle": "Sync Settings",
"woo.syncSettingsDesc": "Configure how products are pushed Descrybe → WooCommerce",
"woo.matchStrategy": "Product Matching Strategy",
"woo.matchStrategyHelp": "Product push (Descrybe → WooCommerce) matches remote products by SKU or EAN/GTIN. Queue syncs from the Connection tab (manual).",
"woo.lastSyncLabel": "Last Sync",
"woo.saveSyncSettings": "Save sync settings",
"woo.match.sku": "SKU",
"woo.match.ean": "EAN/GTIN",
"plan.feature.section.shell": "Shell",
"plan.feature.section.dashboard": "Dashboard",
"plan.feature.section.catalog": "Catalog",
"plan.feature.section.feeds": "Feeds",
"plan.feature.section.stores": "Stores",
"plan.feature.section.processing": "Processing",
"plan.feature.section.marketing": "Marketing",
"plan.feature.section.integrations": "Integrations",
"plan.feature.section.billing": "Billing",
"plan.feature.section.settings": "Settings",
"plan.feature.section.support": "Support",
"plan.feature.section.capabilities": "Capabilities",
"plan.feature.shell.navigation": "Sidebar navigation",
"plan.feature.shell.command_palette": "Command palette",
"plan.feature.shell.company_switcher": "Company switcher",
"plan.feature.shell.support_notifications": "Support notification bell",
"plan.feature.shell.tutorial": "Product tutorial",
"plan.feature.shell.account_menu": "Account menu",
"plan.feature.shell.billing_recovery_banner": "Billing recovery banner",
"plan.feature.dashboard.overview": "Dashboard overview",
"plan.feature.dashboard.stats": "Stats cards",
"plan.feature.dashboard.quick_links": "Quick links",
"plan.feature.dashboard.recent_jobs": "Recent jobs",
"plan.feature.dashboard.news_feed": "News feed",
"plan.feature.dashboard.activation_checklist": "Activation checklist",
"plan.feature.dashboard.migrated_checklist": "Migrated cohort checklist",
"plan.feature.dashboard.etl_gaps": "ETL gaps panel",
"plan.feature.dashboard.store_reconnect": "Store reconnect banner",
"plan.feature.dashboard.upgrade_banners": "Upgrade banners",
"plan.feature.catalog.products": "Products",
"plan.feature.catalog.products.tab_processed": "Products - Processed tab",
"plan.feature.catalog.products.tab_needs_review": "Products - Needs review tab",
"plan.feature.catalog.products.tab_error": "Products - Error tab",
"plan.feature.catalog.products.tab_processing": "Products - Processing tab",
"plan.feature.catalog.products.tab_unprocessed": "Products - Unprocessed tab",
"plan.feature.catalog.products.process_categories": "Process categories",
"plan.feature.catalog.products.process_attributes": "Process attributes / specs",
"plan.feature.catalog.products.process_ai_titles": "Process AI titles",
"plan.feature.catalog.products.process_ai_descriptions": "Process AI descriptions",
"plan.feature.catalog.products.enrichment_review": "Enrichment review panel",
"plan.feature.catalog.products.export_selection": "Export selected products",
"plan.feature.catalog.products.upgrade_prompt": "Products upgrade prompts",
"plan.feature.catalog.categories": "Categories",
"plan.feature.catalog.categories.title_formula": "Category title formula",
"plan.feature.catalog.categories.description_formula": "Category description formula",
"plan.feature.catalog.attributes": "Attributes",
"plan.feature.catalog.attributes.bulk_import": "Attributes bulk import",
"plan.feature.catalog.standard_fields": "Standard fields",
"plan.feature.catalog.standard_fields.groups": "Standard field groups",
"plan.feature.catalog.structured_descriptions": "Structured description fields",
"plan.feature.catalog.vector_categories": "Vector categories",
"plan.feature.feeds.list": "Import feeds",
"plan.feature.feeds.add_url": "Add feed URL",
"plan.feature.feeds.add_csv": "Add feed CSV upload",
"plan.feature.feeds.sync": "Sync feed",
"plan.feature.feeds.mapping": "Feed mapping",
"plan.feature.feeds.mapping.select_item": "Mapping - select item element",
"plan.feature.feeds.mapping.map_fields": "Mapping - map fields",
"plan.feature.feeds.export_feeds": "Export feeds",
"plan.feature.feeds.export_feeds.create": "Create export feed",
"plan.feature.feeds.export_feeds.generate": "Generate export feed",
"plan.feature.feeds.uploads": "File uploads",
"plan.feature.stores.hub": "Stores hub",
"plan.feature.stores.woocommerce": "WooCommerce integration",
"plan.feature.stores.woocommerce.connection": "WooCommerce connection",
"plan.feature.stores.woocommerce.categories": "WooCommerce categories sync",
"plan.feature.stores.woocommerce.attributes": "WooCommerce attributes sync",
"plan.feature.stores.woocommerce.orders": "WooCommerce orders",
"plan.feature.stores.woocommerce.reviews": "WooCommerce reviews",
"plan.feature.stores.woocommerce.settings": "WooCommerce settings",
"plan.feature.stores.shopify": "Shopify integration",
"plan.feature.stores.shopify.connection": "Shopify connection",
"plan.feature.stores.shopify.orders": "Shopify orders",
"plan.feature.stores.shopify.settings": "Shopify settings",
"plan.feature.processing.monitor": "Processing monitor",
"plan.feature.marketing.campaigns": "Campaigns",
"plan.feature.marketing.campaigns.create": "New campaign wizard",
"plan.feature.marketing.campaigns.generate_ai": "Campaign AI generate",
"plan.feature.marketing.campaigns.send": "Campaign send / blast",
"plan.feature.marketing.content_calendar": "Content calendar",
"plan.feature.marketing.brand_kit": "Brand kit",
"plan.feature.marketing.brand_ai_apply": "Brand AI apply in prompts",
"plan.feature.marketing.seo": "SEO recommendations",
"plan.feature.marketing.seo.template_fill": "SEO template fill",
"plan.feature.marketing.seo.ai_rewrite": "SEO AI rewrite",
"plan.feature.marketing.reviews": "Reviews",
"plan.feature.integrations.ai": "AI integrations",
"plan.feature.integrations.ai.byok": "Bring your own AI key",
"plan.feature.integrations.email": "Email sending",
"plan.feature.integrations.email.test": "Email test send",
"plan.feature.integrations.email.blast": "Email blast",
"plan.feature.billing.overview": "Billing overview",
"plan.feature.billing.customer_portal": "Stripe customer portal",
"plan.feature.billing.quick_upgrade": "Quick upgrade checkout",
"plan.feature.billing.plans_compare": "Compare plans",
"plan.feature.billing.checkout": "Stripe checkout",
"plan.feature.settings.profile": "Profile settings",
"plan.feature.settings.company": "Company settings",
"plan.feature.settings.alerts": "Alert preferences",
"plan.feature.settings.api_keys": "API keys",
"plan.feature.settings.team": "Team management",
"plan.feature.settings.team_invite": "Invite teammate",
"plan.feature.support.center": "Support center",
"plan.feature.support.ticket_create": "New support ticket",
"plan.feature.support.ticket_thread": "Support ticket thread",
"plan.feature.capability.sku_cap": "Product SKU cap",
"plan.feature.capability.ai_credits": "AI credit wallet",
"plan.feature.capability.ai_processing": "AI processing jobs",
"plan.feature.capability.eprel": "EPREL enrichment",
"plan.feature.capability.normalize_specs_fill": "Normalize / specs / fill",
"plan.feature.capability.campaign_ai": "Campaign AI generation",
"plan.feature.capability.email_live_send": "Live email delivery",
"plan.feature.capability.brand_ai_apply": "Brand voice in AI prompts",
"plan.feature.capability.seo_ai_rewrite": "SEO AI rewrite",
"plan.feature.capability.feed_source_limit": "Feed source limit (marketing)",
"plan.feature.capability.export_feed_limit": "Export feed limit (marketing)",
"plan.feature.capability.storage_limit": "Storage limit (marketing)",
"plan.feature.capability.api_access": "REST API access (marketing)",
"plan.feature.capability.byok": "Bring your own AI key",
"billing.plan.free": "Free",
"products.actions.selectAll": "Select All",
"products.actions.upgradeSuffix": " · upgrade",
"products.actions.upgradeRequired": "{label} (upgrade required)",
"products.actions.free": "free",
"products.actions.credits": "{credits} credits",
"products.actions.autoCategorizeTitle": "Auto-adding Categorization",
"products.actions.autoCategorizeBody": "{count} product(s) need categorization for {types} processing",
"products.actions.aiLocked": "AI options are locked on Free. Upgrade to process titles/descriptions.",
"products.actions.processSelected": "Process selected",
"products.actions.markProcessed": "Mark as processed",
"products.actions.resetUnprocessed": "Reset to unprocessed",
"products.actions.export": "Export",
"products.upload.dropHint": "Drop a CSV here or click to browse",
"products.upload.supportsHint": "Supports .csv product imports (ean, name, category…)",
"products.export.chooseConfig": "Export {count} selected product(s). Pick the export feed that defines format and fields.",
"products.export.selectPlaceholder": "Select an export feed…",
"fields.typeLabel": "Type",
"fields.groupLabel": "Group",
"fields.selectGroup": "Select a group",
"fields.groupBelongsHint": "Group this field belongs to",
"fields.addFieldShort": "Add Field",
"fields.enableRecommended": "Enable recommended",
"feeds.activated": "Feed activated.",
"feeds.deactivated": "Feed deactivated.",
"feeds.syncTimeout": "Sync timed out waiting for the server. The job may still finish — open Sync History to check status.",
"feeds.createdMapHint": "Feed created. Map fields before syncing.",
"feeds.createdPlain": "Feed created.",
"feeds.createdMapDesc": "Map source columns to product fields, then sync.",
"feeds.lastLiveSync": "Last successful feed sync: {when}",
"feeds.noLiveSyncProducts": "No successful feed sync yet. Catalog last updated {when}.",
"feeds.noDataYet": "No sync or catalog data yet.",
"products.filters.incomplete": "Incomplete",
"products.filters.complete44": "Complete (4/4)",
"products.filters.missingName": "Missing name",
"products.filters.missingDescription": "Missing description",
"products.filters.missingAttributes": "Missing attributes",
"products.filters.missingCategory": "Missing category",
"products.filters.hasEprel": "Has EPREL",
"products.filters.noEprel": "No EPREL",
"products.filters.priceChanged": "Price changed",
"products.filters.stockChanged": "Stock changed",
"products.filters.titleChanged": "Title changed",
"products.filters.newFromFeed": "New from feed",
"products.filters.otherFieldChange": "Other field change",
"products.filters.sortUpdatedNewest": "Updated (Newest)",
"products.filters.sortUpdatedOldest": "Updated (Oldest)",
"products.filters.sortNameAsc": "Name (A-Z)",
"products.filters.sortNameDesc": "Name (Z-A)",
"products.filters.searchPlaceholder": "Search products...",
"products.filters.searchCategories": "Search categories...",
"products.filters.selectFeed": "Select feed",
"products.filters.loadingFeeds": "Loading feeds…",
"products.table.loading": "Loading products",
"products.table.uncategorized": "Uncategorized",
"products.table.assignCategory": "Assign category",
"products.table.changeCategory": "Change category for {name}",
"products.table.selectCategory": "Select category…",
"products.table.saveCategory": "Save category",
"products.table.cancelCategory": "Cancel category edit",
"products.table.categoryRequired": "Choose a category",
"products.table.noCategoriesAvailable": "No categories yet — create one under Catalog",
"products.table.qualityUnavailable": "Quality unavailable",
"products.table.full": "Full",
"products.table.empty": "Empty",
"products.table.saveName": "Save name",
"products.table.cancelRename": "Cancel rename",
"products.table.noSyncYet": "No sync yet",
"products.feedSync.feedAndWhen": "{feed} · {when}",
"products.feedSync.syncedWhen": "Synced {when}",
"products.table.productOptions": "Product options",
"products.edit.details": "Product details",
"products.edit.noEprel": "No EPREL id on this product.",
"products.edit.specsPresent": "Technical specifications are present on this product.",
"products.edit.noEnrichedName": "No enriched name",
"products.edit.resetName": "Reset enriched name to the original",
"products.edit.cannotClearName": "Original is empty — cannot clear enriched name via PATCH",
"products.edit.showPreview": "Show preview",
"products.edit.editHtml": "Edit HTML",
"products.edit.noEnrichedDescription": "No enriched description",
"products.edit.resetDescription": "Reset enriched description to the original",
"products.edit.cannotClearDescription": "Original is empty — cannot clear enriched description via PATCH",
"products.edit.unknownFeed": "Unknown feed",
"products.edit.noProcessedName": "No processed name available",
"products.edit.feedNamed": "Feed · {name}",
"products.edit.noAiDescription": "No AI description",
"products.edit.sourceLabel": "Source label",
"products.edit.coverageTitle": "How many of Name, Description, Attributes, and Category are present (feed or processed).",
"products.edit.coverageReady": "{count}/4 ready",
"products.edit.eprelPresentTitle": "European Product Registry for Energy Labelling (EPREL) id is present on this product.",
"products.edit.noEprelBadge": "No EPREL",
"products.edit.specsBadge": "Specs",
"products.edit.reviewBannerTitle": "Review enriched fields before accepting",
"products.edit.reviewBannerHelp": "Use the Review tab to compare originals vs AI. Shortcuts: A accept · R reject · Alt+1/2 field · ⌘/Ctrl+Enter accept all.",
"products.edit.tab.review": "Review",
"products.edit.tab.details": "Details",
"products.edit.tab.content": "Content",
"products.edit.tab.attributes": "Attributes",
"products.edit.tab.feed": "Feed",
"products.edit.changed": "Changed",
"products.edit.matched": "Matched",
"products.edit.original": "Original",
"products.edit.enriched": "Enriched",
"products.edit.discardName": "Discard name",
"products.edit.acceptName": "Accept name",
"products.edit.discardDescription": "Discard description",
"products.edit.acceptDescription": "Accept description",
"products.edit.noCategory": "No Category",
"products.edit.whatsFilledIn": "Whats filled in",
"products.edit.coverageLegend": "Gray = missing · Orange = from feed · Green = processed",
"products.edit.feedSource": "Feed source",
"products.edit.updatedRelative": "· updated {when}",
"products.edit.viewAllFeedFields": "View all feed fields ({filled}/{total})",
"products.edit.productIdentity": "Product identity",
2026-08-16 16:57:36 +02:00
"products.edit.images": "Images",
"products.edit.imageAlt": "Product image {index}: {name}",
"products.edit.aiProcessedName": "AI-processed name",
"products.edit.originalName": "Original name",
"products.edit.productIdSku": "Product ID / SKU",
"products.edit.rowUpdated": "Product row updated {when}",
"products.edit.noRawUpdateTime": "No raw product update time",
"products.edit.feedSyncLabel": "· feed sync {when}",
"products.edit.neverRecorded": "never recorded",
"products.edit.feedFilledCount": "{filled} filled · {total} fields",
"products.edit.noMappedFeedFields": "No mapped feed fields on this product.",
"products.edit.fieldCol": "Field",
"products.edit.valueFromFeed": "Value from feed",
"products.edit.core": "Core",
"products.edit.aiProcessedDescription": "AI-Processed Description",
"products.edit.originalDescription": "Original Description",
"products.edit.noAttrsYet": "No attribute or specification data on this product yet.",
"products.edit.fromFeed": "From feed",
"products.edit.feedAttrsHelp": "Values parsed from the feed (specifications HTML, warranty, dimensions, EPREL). Keys are linked to attribute_key where possible.",
"products.edit.fieldsCount": "{count} fields",
"products.edit.originalAttributes": "Original attributes",
"products.edit.aiAttributes": "AI / enriched attributes",
"products.edit.editableAttributes": "Editable attributes",
"products.edit.editableAttributesHelp": "Changes save to the product attributes map. Feed and AI rows below stay as reference when they differ.",
"products.edit.addAttribute": "Add attribute",
"products.edit.attrKeyPlaceholder": "Key",
"products.edit.attrValuePlaceholder": "Value",
"products.edit.removeAttribute": "Remove {key}",
"products.edit.noEditableAttrs": "No editable attributes yet. Add a key/value pair.",
"products.edit.reject": "Reject",
"products.edit.accept": "Accept",
"taskIndicator.title": "Background tasks",
"taskIndicator.activeOne": "1 job running",
"taskIndicator.activeMany": "{count} jobs running",
"taskIndicator.view": "View progress",
"taskIndicator.expand": "Expand task list",
"taskIndicator.collapse": "Collapse task list",
"taskIndicator.progressAria": "Job progress {pct} percent",
"taskIndicator.progressCounts": "{done} of {total} products",
"attributes.assignBulk": "Assign to Categories",
"products.filters.search": "Search",
"products.filters.sortAria": "Sort: {label}",
"products.filters.sortLabel": "Sort: {label}",
"products.table.colIdName": "ID/Name",
"products.table.colCoverage": "Coverage",
"products.table.coverageTitle": "Coverage: N=Name, D=Description, A=Attributes, C=Category. Gray=missing, orange=from feed, green=processed. EPREL shows energy-label registry id.",
"products.table.colFeed": "Feed",
"products.table.colCategory": "Category",
"products.table.colStatus": "Status",
"products.table.colUpdated": "Last Updated",
"products.table.colActions": "Actions",
"products.table.loadingDots": "Loading products…",
"products.table.noneFound": "No products found.",
"products.table.selectProduct": "Select product {name}",
"products.table.rename": "Rename {name}",
"products.table.productNameAria": "Product name for {name}",
"products.table.selectPage": "Select {count} on this page",
"products.table.deselectPage": "Deselect {count} on this page",
"categories.assign": "Assign",
"categories.titleFormulaSubtitle": "Configure how product titles should be generated for {name}",
"categories.addText": "Add Text",
"categories.aboutTitleFormulas": "About Title Formulas",
"categories.aboutTitleFormulasHelp": "Titles are assembled left-to-right from the elements below.",
"categories.variablesReplacedHelp": "Variables are replaced with product data when available. Missing values are skipped.",
"categories.variableTypeHelp": "Dynamic field from product data (example: brand).",
"categories.textTypeHelp": "Static text that always appears as written.",
"categories.assignTitleCopyHelp": "Use Assign to copy this formula to other categories that should share the same title pattern.",
"categories.titleFormulaInvalid": "This title formula page needs a valid category. Return to categories and open Edit Title Formula again.",
"categories.preview.title": "Title Preview",
"categories.preview.description": "This is how your product titles will be structured",
"categories.preview.exampleTab": "Example Preview",
"categories.preview.structureTab": "Formula Structure",
"categories.preview.noElements": "No elements added yet",
"categories.brandTips.title": "Brand-aware tips",
"categories.brandTips.freePlan": "Brand kit is editable on Free; AI apply unlocks on paid plans.",
"categories.brandTips.editBrandKit": "Edit brand kit",
"categories.brandTips.emptyBefore": "Add voice or preferred terms in ",
"categories.brandTips.emptyAfter": " for tips here.",
"categories.brandTips.brandKit": "Brand kit",
"categories.brandTips.descGuidanceBefore": "Guidance from your ",
"categories.brandTips.descGuidanceAfter": " for description sections.",
"categories.formulaElementsTitle": "Formula Elements",
"categories.formulaElementsHelp": "Drag and drop elements to reorder them",
"categories.noElementsAdded": "No elements added",
"categories.addElementsHint": "Add variables or text from the panel on the right",
"categories.editTextElementAria": "Edit text element {value}",
"categories.removeElementAria": "Remove {type} element {value}",
"categories.tab.single": "Single",
"categories.tab.bulk": "Bulk Upload",
"categories.uniqueIdLabel": "Unique ID",
"categories.parentLabel": "Parent",
"categories.noneRoot": "None (root)",
"categories.descriptionLabel": "Description",
"categories.csvUploadHelp": "Upload a CSV with columns name, unique_id, optional parent_unique_id and description.",
"categories.downloadTemplate": "Download template",
"categories.variableNameKey": "Name (key)",
"categories.displayName": "Display name",
"categories.exampleValue": "Example value",
"categories.variableExists": "A variable with the name \"{name}\" already exists.",
"categories.addVariable": "Add Variable",
"categories.updateVariable": "Update Variable",
"categories.col.displayName": "Display name",
"categories.col.key": "Key",
"categories.col.description": "Description",
"categories.col.example": "Example",
"categories.noVariablesFound": "No variables found",
"categories.availableVariables": "Available Variables",
"categories.manage": "Manage",
"categories.noVariablesMatch": "No variables match “{query}”.",
"categories.noUnusedVariables": "No unused variables left. Add a custom variable, or remove an element to free one up.",
"categories.exampleColon": "Example: {value}",
"categories.editVariableAria": "Edit {label}",
"categories.deleteVariableAria": "Delete {label}",
"categories.addVariableAria": "Add {label}",
"categories.textLabel": "Text",
"categories.textAppearsAsWritten": "This text will appear exactly as written in your titles",
"categories.addTextButton": "Add Text",
"categories.updateTextButton": "Update Text",
"categories.structureDescriptionsFor": "Structure product descriptions for {name}",
"categories.metaInformation": "Meta Information",
"categories.metaInformationHelp": "Instructions the AI uses for SEO title and meta description tags.",
"categories.metaTitleFormula": "Meta Title Formula",
"categories.metaTitleHint": "Shown in search results and browser tabs (about 5060 characters).",
"categories.metaDescriptionFormula": "Meta Description Formula",
"categories.metaDescriptionHint": "Shown under the title in search results (about 120155 characters).",
"categories.resetToDefault": "Reset to default",
"categories.descriptionSections": "Description Sections",
"categories.descriptionSectionsHelp": "Drag sections to set the order of the generated description.",
"categories.noSectionsYet": "No sections yet",
"categories.addSectionsHint": "Add a heading, paragraph, or list to get started.",
"categories.aiInstructions": "AI Instructions",
"categories.exportIdOptional": "Export ID (Optional)",
"categories.exportIdUnique": "Export ID must be unique",
"categories.addSection": "Add Section",
"categories.aboutDescriptionFormulas": "About Description Formulas",
"categories.aboutDescriptionFormulasHelp": "These instructions tell the AI how to write descriptions for products in this category.",
"categories.sectionTypesHeading": "Section types",
"categories.sectionTypeHeadings": "Headings (H1H4):",
"categories.sectionTypeHeadingsHelp": "Titles and subtitles",
"categories.sectionTypeParagraphs": "Paragraphs:",
"categories.sectionTypeParagraphsHelp": "Main content blocks",
"categories.sectionTypeLists": "Bullet lists:",
"categories.sectionTypeListsHelp": "Features and specs",
"categories.aiInstructionsHeading": "AI instructions",
"categories.aiInstructionsBody": "Write one clear job per section (what to cover, tone, length). Vague prompts produce vague copy.",
"categories.exportIdsHeading": "Export IDs",
"categories.exportIdsBody": "Optional IDs map a section into export feeds (for example short_description).",
"categories.assignDescCopyHelp": "Use Assign to copy this template to other categories that should share the same structure.",
"categories.descriptionFormulaInvalid": "This description formula page needs a valid category. Return to categories and open Edit Description Formula again.",
"categories.sectionType.h1": "Heading 1",
"categories.sectionType.h2": "Heading 2",
"categories.sectionType.h3": "Heading 3",
"categories.sectionType.h4": "Heading 4",
"categories.sectionType.p": "Paragraph",
"categories.sectionType.ul": "Bullet List",
"categories.aiGenerationPrompt": "AI generation prompt",
"categories.aiPromptOverrides": "Overrides the company product-enhance user prompt for {name}",
"categories.promptTemplate": "Prompt template",
"categories.promptTemplateHelp": "Use placeholders like {{name}} and {{description}}. Leave empty to use the company default from Integrations → AI.",
"categories.clear": "Clear",
"categories.promptLabel": "Prompt",
"categories.charactersCount": "{count} characters",
"categories.activeOverride": "· active override for this category",
"categories.usingCompanyDefault": "· using company / built-in default",
"categories.usingCompanyDefaultForLang": "· empty for this language — company / built-in default applies",
"categories.aiPromptSavedLang": "AI prompt saved for {lang}.",
"categories.aiPromptClearedLang": "AI prompt cleared for {lang} (company default will apply).",
2026-08-17 00:39:25 +02:00
"categories.promptSection.navLabel": "Prompt sections",
"categories.promptSection.navHeading": "Sections",
"categories.promptSection.navHint": "Edit one part of the enhance reply at a time.",
"categories.promptSection.title": "Title",
2026-08-17 21:20:45 +02:00
"categories.promptSection.titleHelp": "Instructions for the product title.",
2026-08-17 00:39:25 +02:00
"categories.promptSection.titleFormulaNote": "Title formula slots (type + brand + model) are appended automatically when set on this category.",
"categories.promptSection.description": "Description",
2026-08-17 21:20:45 +02:00
"categories.promptSection.descriptionHelp": "Instructions for the HTML product body (not SEO meta).",
2026-08-17 00:39:25 +02:00
"categories.promptSection.descriptionFormulaNote": "Description formula sections are appended at render time when configured.",
"categories.promptSection.meta": "Meta",
2026-08-17 21:20:45 +02:00
"categories.promptSection.metaHelp": "Instructions for the SEO title and description (plain text).",
2026-08-17 00:39:25 +02:00
"categories.promptSection.metaFormulaNote": "SEO meta formulas from the description template are appended when present.",
"categories.promptSection.attributes": "Attributes",
2026-08-17 21:20:45 +02:00
"categories.promptSection.attributesHelp": "Instructions for product attributes (allowed keys only).",
2026-08-17 00:39:25 +02:00
"categories.promptSection.attributesFormulaNote": "Allowed attribute keys and title-formula attr slots are appended at render time.",
"categories.promptSection.schemaHeading": "One-shot JSON",
"categories.promptSection.schemaHelp": "Enhance returns a single JSON object. This section owns the keys below.",
"categories.promptSection.contentLabel": "Section instructions",
"categories.promptSection.contentPlaceholder": "Role guidance and placeholders for this section...",
"categories.promptSection.preambleToggle": "Shared intro (all sections)",
2026-08-17 21:20:45 +02:00
"categories.promptSection.preambleHelp": "Shown once above the section markers. Keep language and evidence reminders so the model replies correctly.",
2026-08-17 00:39:25 +02:00
"categories.promptSection.clearLanguage": "Clear language override",
"categories.promptSection.unstructuredHint": "This prompt is not sectioned yet. Content is shown under Description - edit the sections you need and save to store the standard Title / Description / Meta / Attributes layout.",
"categories.promptSection.categorizeNote": "Categorize (taxonomy pick) is a separate pipeline step - not part of this enhance prompt.",
"contentLang.switcherLabel": "Content language",
"contentLang.primary": "primary",
"contentLang.hasOverride": "custom",
"contentLang.addLanguage": "Add language…",
"contentLang.add": "Add",
"contentLang.removeLanguage": "Remove {lang}",
"contentLang.resultsHint": "Switch language to review AI titles and descriptions for each content language.",
"contentLang.settingsTitle": "Content languages",
"contentLang.settingsHelp": "Primary language is used by default. Extra languages get their own prompts and AI results (each pass uses credits).",
"ai.prompts.languageHelp": "Edit company prompts per content language. Empty language falls back to the built-in default for that language.",
"header.accountSettingsAria": "Account settings for {email}",
"switcher.switchUserAria": "Switch user: {label}",
"switcher.unavailable": "User switch is not available in this environment.",
"switcher.loadFailed": "Could not load users.",
"support.notifications.aria": "Support notifications",
"support.notifications.ariaUnread": "Support notifications, {count} unread",
"time.never": "Never",
"time.invalid": "Invalid date",
"time.unknown": "Unknown date",
"time.justNow": "just now",
"time.neverUsed": "Never used",
"billing.plan.enterprise": "Enterprise",
"news.heading": "Platform Updates",
"news.subtitle": "Latest features and improvements",
"news.keyFeatures": "Key Features:",
"news.badge.new": "New",
"news.footer": "Thats everything for now — check back after the next release.",
"news.category.enhancement": "Enhancement",
"news.category.feature": "Feature",
"news.category.integration": "Integration",
"news.category.newFeature": "New Feature",
"news.category.billing": "Billing",
"news.uxImprovements.description": "Enhanced platform usability with guide tour controls, API improvements, and better navigation.",
"news.uxImprovements.f1": "Guide tour skip/hide functionality",
"news.uxImprovements.f2": "API reliability improvements",
"news.uxImprovements.f3": "Enhanced user interface navigation",
"news.uxImprovements.f4": "Better workflow efficiency",
"news.multiselect.title": "Multiselect Attribute Support",
"news.multiselect.description": "Added support for multiselect attributes, allowing products to have multiple values for list-type attributes.",
"news.multiselect.f1": "Multiselect attribute type support",
"news.multiselect.f2": "Multiple value selection in product editing",
"news.multiselect.f3": "Store multiple values on a single attribute",
"news.multiselect.f4": "Enhanced attribute extraction for multiselect fields",
"news.multiselect.f5": "Improved export feed compatibility",
"news.csvEan.title": "CSV EAN Upload Feature",
"news.csvEan.description": "Upload CSV files containing EAN codes to quickly process hundreds of products at once.",
"news.csvEan.f1": "Drag & drop CSV file upload",
"news.csvEan.f2": "EAN format validation (EAN-8, EAN-13, UPC-12, GTIN-14)",
"news.csvEan.f3": "Automatic duplicate detection",
"news.csvEan.f4": "Bulk product processing",
"news.csvEan.f5": "Detailed processing statistics",
"news.brick.title": "BRICK Code Attribute Support",
"news.brick.description": "Enhanced attribute system with BRICK code support for standardized product classification and export.",
"news.brick.f1": "BRICK code attribute handling",
"news.brick.f2": "Automatic code formatting in exports",
"news.brick.f3": "XML feed BRICK code integration",
"news.brick.f4": "Export feed compatibility improvements",
"news.apiV1.title": "API v1 Release",
"news.apiV1.description": "New API v1 endpoints for programmatic access to categories, attributes, feeds, products, and export feeds.",
"news.apiV1.f1": "RESTful API v1 endpoints",
"news.apiV1.f2": "Categories and attributes management",
"news.apiV1.f3": "Feed creation and management",
"news.apiV1.f4": "Product processing via API",
"news.apiV1.f5": "Export feed programmatic access",
"news.apiV1.f6": "Authentication and authorization",
"news.feedFiltering.title": "Products Page Feed Filtering",
"news.feedFiltering.description": "Improved products page with optimized feed filtering, loading states, and better performance.",
"news.feedFiltering.f1": "Enhanced feed filtering",
"news.feedFiltering.f2": "Improved loading states",
"news.feedFiltering.f3": "Optimized query performance",
"news.feedFiltering.f4": "Better pagination handling",
"news.feedFiltering.f5": "Export functionality improvements",
"news.exportFeeds.title": "Export Feeds System",
"news.exportFeeds.description": "Comprehensive export feed system for generating XML and CSV exports with custom configurations.",
"news.exportFeeds.f1": "XML and CSV export formats",
"news.exportFeeds.f2": "Custom field mapping",
"news.exportFeeds.f3": "Export preview functionality",
"news.exportFeeds.f4": "Job-based product export",
"news.exportFeeds.f5": "EPREL data integration",
"news.exportFeeds.f6": "Public export feed URLs",
"news.woocommerce.title": "WooCommerce Integration",
"news.woocommerce.description": "Sync products, categories, and attributes with WooCommerce stores.",
"news.woocommerce.f1": "Store credential configuration",
"news.woocommerce.f2": "Category and attribute mapping",
"news.woocommerce.f3": "Bidirectional product sync",
"news.woocommerce.f4": "Match strategy options",
"news.eprel.title": "EPREL Energy Label Integration",
"news.eprel.description": "Integration with European Product Registry for Energy Labelling to fetch energy efficiency data.",
"news.eprel.f1": "Automatic EPREL ID processing",
"news.eprel.f2": "Energy label image retrieval",
"news.eprel.f3": "Product energy fiche downloads",
"news.eprel.f4": "Energy class extraction",
"news.eprel.f5": "Multi-language support",
"news.aiCategorization.title": "Enhanced Product Categorization",
"news.aiCategorization.description": "Improved AI categorization system with better accuracy and hierarchical category support.",
"news.aiCategorization.f1": "Hierarchical category navigation",
"news.aiCategorization.f2": "Confidence scoring",
"news.aiCategorization.f3": "Multi-language support",
"news.aiCategorization.f4": "Automatic fallback handling",
"news.standardFields.title": "Standard Fields Management",
"news.standardFields.description": "Manage standard product fields with field groups, validation rules, and default values.",
"news.standardFields.f1": "Field group organization",
"news.standardFields.f2": "System and custom fields",
"news.standardFields.f3": "Field validation rules",
"news.standardFields.f4": "Default value support",
"news.standardFields.f5": "Automatic field setup",
"news.billingSystem.title": "Credit-Based Billing",
"news.billingSystem.description": "New credit-based billing system with usage tracking and flexible payment options.",
"news.billingSystem.f1": "Credit-based processing",
"news.billingSystem.f2": "Usage analytics",
"news.billingSystem.f3": "Flexible billing cycles",
"news.billingSystem.f4": "Payment method management",
"news.billingSystem.f5": "Invoice generation",
"products.pageTitle": "Product Management",
"products.pageDescriptionStoresBefore": "Manage, process, and optimize your product catalog. Connect a store or import CSV via",
"products.pageDescriptionBasic": "Manage, process, and optimize your product catalog. Import via Feeds or upload a CSV.",
"products.keyboard.esc": "— close the product edit panel or dialogs",
"products.keyboard.toggle": "— toggle this tip",
"products.keyboard.reviewPrefix": "In Needs Review panel:",
"products.keyboard.acceptAll": "accept all",
"products.keyboard.rejectShort": "reject",
"products.keyboard.acceptFields": "accept name / description",
"products.connectStore": "Connect store",
"products.updating": "Updating…",
"products.needLinkedRaw": "Selected products need a linked raw product to process.",
"products.selectToProcess": "Select at least one product to process.",
"products.undoResetHint": "Undo returns the product to unprocessed via reset.",
"products.field.accepted": "{label} accepted into product.",
"products.field.acceptFailed": "Could not accept {field}",
"products.field.discarded": "{label} enrichment discarded.",
"products.field.discardFailed": "Could not discard {field}",
"products.upgradeRequired": "Upgrade required",
"products.upgradeBody": "This feature needs a paid plan or AI credits.",
"products.enrichment.rejectTitle": "Reject enrichment?",
"products.enrichment.rejectSelectedTitle": "Reject selected products?",
"products.enrichment.resetTitle": "Reset to unprocessed?",
"products.selectedOnPage": "{count} on this page selected",
"products.selectionPageOnly": "Showing {shown} of {total} — selection is this page only",
"products.edit.coverageHint": "How many of Name, Description, Attributes, and Category are present (feed or processed).",
"products.edit.noEprelShort": "No EPREL",
"products.edit.specs": "Specs",
"products.edit.reviewBannerBody": "Use the Review tab to compare originals vs AI. Shortcuts: A accept · R reject · Alt+1/2 field · ⌘/Ctrl+Enter accept all.",
"products.edit.whatsFilled": "What's filled in",
"products.edit.legend": "Gray = missing · Orange = from feed · Green = processed",
"products.edit.updatedAgo": "· updated {relative}",
"products.edit.status": "Status",
"products.edit.noRawUpdate": "No raw product update time",
"products.edit.feedSyncPart": "· feed sync",
"products.edit.filledFields": "{filled} filled · {total} fields",
"products.edit.noMappedFields": "No mapped feed fields on this product.",
"products.edit.emptyBadge": "Empty",
"products.edit.coreBadge": "Core",
"products.edit.feedAttrsHint": "Values parsed from the feed (specifications HTML, warranty, dimensions, EPREL). Keys are linked to attribute_key where possible.",
"products.edit.originalAttrs": "Original attributes",
"products.edit.aiAttrs": "AI / enriched attributes",
"mapping.confidence.exact": "Exact",
"mapping.confidence.alias": "Alias",
"mapping.confidence.fuzzy": "Fuzzy",
"field.group.basic": "Basic Information",
"field.group.pricing": "Pricing",
"field.group.media": "Media",
"field.group.taxonomy": "Taxonomy",
"field.group.inventory": "Inventory",
"field.group.attributes": "Attributes",
"field.group.shipping": "Shipping",
"field.group.compliance": "Compliance",
"field.group.other": "Other",
"common.yes": "Yes",
"common.no": "No",
"status.running": "Running",
"flash.admin.analyticsLoadFailed": "Failed to load analytics",
"flash.admin.diagnosticsLoadFailed": "Failed to load diagnostics",
"flash.admin.diagnosticsUnavailable": "Diagnostics isnt available on this deployment. Contact your platform administrator.",
"flash.admin.diagnosticsUnreachable": "Could not reach the diagnostics API. Check that the API is running and PUBLIC_API_URL / Vite proxy point at it.",
"admin.charts.statusEmpty": "No rows in this breakdown yet.",
"admin.charts.seriesEmpty": "No data in this period yet.",
"admin.charts.primaryDefault": "Primary",
"admin.charts.statusAria": "Status distribution",
"admin.charts.seriesAria": "{label} chart",
"admin.analytics.lastNDaysAria": "Last {days} days",
"admin.analytics.overview": "Overview",
"admin.analytics.overviewHint": "Platform totals with period context for the last {days} days.",
"admin.analytics.tokensInPeriod": "{tokens} in period · from processed products",
"admin.analytics.creditsRemainingOf": "{remaining} remaining of {allocated} allocated",
"admin.analytics.noJobsYet": "No jobs yet",
"admin.analytics.feedsVolume": "{input} input · {export} export feeds",
"admin.analytics.usersCompaniesRaw": "{users} users · {companies} companies · {raw} raw",
"admin.analytics.operations": "Operations",
"admin.analytics.operationsHint": "Reliability signals, keys, and growth for the selected period.",
"admin.analytics.failedCompleted": "{failed} failed · {completed} completed",
"admin.analytics.runningOver2h": "Running > 2h ·",
"admin.analytics.apiKeysTotal": "{total} total (revoked included)",
"admin.analytics.signupsDetail": "users · {companies} companies · {tickets} open/pending tickets",
"admin.analytics.providerMix": "Provider mix",
"admin.analytics.providerMixHint": "Token spend by how AI credentials are configured.",
"admin.analytics.productsJobs": "{products} products · {jobs} jobs",
"admin.analytics.trends": "Trends",
"admin.analytics.trendsHint": "Daily series for tokens, providers, jobs, and signups.",
"admin.analytics.tokensByDayHint": "Tokens from completed product processing (secondary = products that day)",
"admin.analytics.seriesTokens": "Tokens",
"admin.analytics.seriesProducts": "Products",
"admin.analytics.emptyTokens": "No processed products with tokens in this period.",
"admin.analytics.tokensByProviderHint": "Daily split: internal / popular / custom (by provider type)",
"admin.analytics.emptyProviderTokens": "No provider-tagged tokens in this period yet.",
"admin.analytics.providerDayTip": "{date}: Internal {internal} · Popular {popular} · Custom {custom}",
"admin.analytics.seriesCreated": "Created",
"admin.analytics.seriesFailed": "Failed",
"admin.analytics.emptyJobsSeries": "No processing jobs created in this period.",
"admin.analytics.seriesUsers": "Users",
"admin.analytics.seriesCompanies": "Companies",
"admin.analytics.emptySignups": "No user or company signups in this period.",
"admin.analytics.statusMix": "Status mix",
"admin.analytics.statusMixHint": "All-time queues for jobs, feed sync, and support.",
"admin.analytics.jobStatus": "Job status",
"admin.analytics.feedSyncQueue": "Feed sync queue",
"admin.analytics.supportTickets": "Support tickets",
"admin.analytics.emptyJobStatus": "No processing jobs yet.",
"admin.analytics.emptyFeedSync": "No feed sync jobs yet.",
"admin.analytics.emptyTickets": "No support tickets yet.",
"admin.analytics.usageDetail": "Usage detail",
"admin.analytics.usageDetailHint": "Provider modes, top companies, and billing cycle rollups.",
"admin.analytics.companyUsage": "Company usage",
"admin.analytics.jobsCol": "Jobs",
"admin.analytics.billingCycles": "Billing cycles",
"admin.analytics.billingCyclesHint": "Historical rollups from past billing cycles (may lag the active subscription window)",
"admin.analytics.periodCol": "Period",
"admin.analytics.creditsCol": "Credits",
"admin.analytics.dataNotes": "Data notes",
"admin.diagnostics.endpointNotMounted": "Endpoint not mounted",
"admin.diagnostics.noPayload": "No diagnostics payload",
"admin.diagnostics.unavailableShort": "Diagnostics isnt available on this deployment.",
"admin.diagnostics.fixThenRefresh": "Fix the error above, then refresh.",
"admin.diagnostics.refreshOrConfirm": "Refresh or confirm the API is healthy.",
"admin.diagnostics.systemStatus": "System status",
"admin.diagnostics.snapshot": "Snapshot {when}",
"admin.diagnostics.queueTotal": "{total} total",
"admin.diagnostics.queueStuck": "processing_jobs · stuck running (>2h):",
"admin.diagnostics.driver": "Driver: {driver}",
"admin.diagnostics.openStuck": "Open stuck products",
"admin.diagnostics.configPresence": "Config presence",
"admin.diagnostics.configHint": "Booleans only · env {env} · RPM {rpm} · batch {batch} · retries {retries}",
"admin.diagnostics.cutoverTitle": "Cutover readiness",
"admin.diagnostics.cutoverHint": "Presence flags only — goose version hints, worker age, plans missing. No live Stripe/SMTP.",
"admin.diagnostics.cutoverGoose": "Goose",
"admin.diagnostics.cutoverGooseVersion": "version_max {max} · expected ≥ {min}",
"admin.diagnostics.cutoverGooseRequired": "Required migrations",
"admin.diagnostics.cutoverWorker": "Worker",
"admin.diagnostics.cutoverWorkerAge": "last seen {age}s ago · stale after {stale}s",
"admin.diagnostics.cutoverWorkerAgeUnknown": "last seen age unavailable · stale after {stale}s",
"admin.diagnostics.cutoverPlansMissing": "Companies without plan",
"admin.diagnostics.cutoverPlansUnavailable": "Plans count unavailable",
"admin.diagnostics.cutoverApiKeysMissing": "Companies without API keys",
"admin.diagnostics.cutoverApiKeysUnavailable": "API key inventory unavailable",
"admin.diagnostics.cutoverApiKeysHint": "Legacy keys were not migrated — tenants must create a new dk_ key (no fake import).",
"admin.diagnostics.cutoverApiKeysLink": "List companies needing reissue",
"admin.diagnostics.cutoverApplied": "applied",
"admin.diagnostics.cutoverPending": "pending",
"admin.diagnostics.etlInventoryTitle": "ETL gap inventory",
"admin.diagnostics.etlInventoryHint": "Read-only COUNTs — no fake import. Blob bytes and default job history stay unmigrated unless ops ran optional domain jobs.",
"admin.diagnostics.etlInventoryFiles": "Files metadata-only",
"admin.diagnostics.etlInventoryFilesDetail": "metadata-only / total file rows",
"admin.diagnostics.etlInventoryJobs": "Jobs migrated tag",
"admin.diagnostics.etlInventoryJobsDefault": "jobs domain not run (empty history expected)",
"admin.diagnostics.etlInventoryJobsRan": "optional jobs domain backfill detected",
"admin.diagnostics.etlInventoryTasks": "Tasks rows",
"admin.diagnostics.etlInventoryTasksDetail": "legacy task history present in Postgres",
"admin.diagnostics.recentJobs": "Recent jobs",
"admin.diagnostics.recentAiFailures": "Recent AI support failures",
"admin.diagnostics.aiFailuresHint": "support_ticket_activity · kind=ai_failed",
"admin.diagnostics.relatedTools": "Related ops tools",
"admin.diagnostics.toolStuckTitle": "Stuck products",
"admin.diagnostics.toolStuckDesc": "Cleanup jobs running longer than 2 hours.",
"admin.diagnostics.toolOrphanTitle": "Orphan processed",
"admin.diagnostics.toolOrphanDesc": "Cutover ops #7 — dry-run report, then confirm delete.",
"admin.diagnostics.toolAnalyticsTitle": "Analytics",
"admin.diagnostics.toolAnalyticsDesc": "Trends and platform usage charts.",
"admin.diagnostics.toolBootstrapTitle": "Bootstrap",
"admin.diagnostics.toolBootstrapDesc": "Confirm platform admin access for this account.",
"admin.diagnostics.toolSettingsTitle": "Settings",
"admin.diagnostics.toolSettingsDesc": "Platform mail, AI, and system mode.",
"admin.diagnostics.config.maintenance_mode": "Maintenance mode",
"admin.diagnostics.config.read_only_mode": "Read-only mode",
"admin.diagnostics.config.session_secure": "Session secure cookie",
"admin.diagnostics.config.smtp_enabled": "SMTP enabled",
"admin.diagnostics.config.email_dry_run": "Email dry-run",
"admin.diagnostics.config.smtp_host_set": "SMTP host set",
"admin.diagnostics.config.stripe_mock": "Stripe mock",
"admin.diagnostics.config.eprel_enabled": "EPREL enabled",
"admin.diagnostics.config.upload_dir_configured": "Upload dir configured",
"admin.diagnostics.config.trusted_proxies_configured": "Trusted proxies set",
"admin.diagnostics.config.web_origin_set": "Web origin set",
"admin.diagnostics.config.public_api_url_set": "Public API URL set",
"admin.diagnostics.config.token_signing_secret_set": "Token signing secret set",
"admin.diagnostics.config.openai_key_set": "OpenAI key set",
"admin.diagnostics.config.pinecone_key_set": "Pinecone key set",
"admin.diagnostics.config.stripe_secret_set": "Stripe secret set",
"admin.diagnostics.config.stripe_webhook_secret_set": "Stripe webhook secret set",
"admin.diagnostics.config.stripe_mock_rejected_in_prod": "Stripe mock rejected in production",
"admin.diagnostics.config.credentials_encryption_key_set": "Credentials encryption key set",
"categories.selectAll": "Select all",
"categories.selectedCount": "{count} selected",
"categories.noMatchingCategories": "No matching categories",
"categories.assigningProgress": "Assigning… {progress}%",
"categories.assignToCount": "Assign to {count}",
"categories.aiPromptSavedForCategory": "An AI generation prompt is saved for this category.",
"categories.titleAndDescriptionFormulasSaved": "Title and description formulas are saved for this category.",
"categories.titleFormulaSavedForCategory": "A title formula is saved for this category.",
"categories.descriptionFormulaSavedForCategory": "A description formula is saved for this category.",
"site.account": "Account",
"site.goToApp": "Go to app",
"site.logIn": "Log in",
"site.getStarted": "Get started",
"site.nav.primary": "Primary",
"site.nav.mobile": "Mobile",
"site.nav.home": "Home",
"site.nav.pricing": "Pricing",
"site.nav.apiDocs": "API Docs",
"seo.home.title": "Descrybe — Turn supplier feeds into ready product pages",
"seo.home.description": "Connect CSV or XML supplier feeds, map them to your categories and attributes, generate titles and descriptions that match your rules, then export or sync to WooCommerce.",
"seo.pricing.title": "Pricing — Free through Enterprise | Descrybe",
"seo.pricing.description": "Start free with 50 products and feed mapping. Paid plans add AI titles and descriptions, tiered SKU caps (Starter 100 → Scale 12k; Enterprise for huge catalogs), export feeds, and WooCommerce sync — from $49/month.",
"seo.privacy.title": "Privacy Policy | Descrybe",
"seo.privacy.description": "How Descrybe collects, uses, and protects account data, product catalogs, and supplier feeds when you use our product data platform.",
"seo.terms.title": "Terms of Service | Descrybe",
"seo.terms.description": "Terms for using Descrybe — feed import, catalog enrichment, AI-assisted content, exports, and WooCommerce sync for your business.",
"seo.features.title": "Features — Feeds, enrichment, and export | Descrybe",
"seo.features.description": "See how Descrybe imports supplier feeds, maps fields to your taxonomy, enriches product data, and ships catalogs via export feeds, WooCommerce, or API.",
2026-08-17 21:20:45 +02:00
"seo.contactSales.title": "Contact sales | Descrybe",
"seo.contactSales.description": "Tell us about your catalog and capacity needs — we will prepare a custom plan you can pay online.",
"seo.unsubscribe.title": "Unsubscribe | Descrybe",
"seo.unsubscribe.description": "Stop marketing emails from Descrybe using the unsubscribe link in the message we sent you.",
"pricing.page.eyebrow": "Pricing",
"pricing.page.title": "Simple plans for growing catalogs",
"pricing.page.lead": "Start free with feed mapping and basic cleanup. Upgrade when you need AI titles and descriptions, more products, export feeds, or WooCommerce sync — Starter through Enterprise.",
"pricing.page.subscribedBefore": "Already subscribed? Manage usage under",
"pricing.page.subscribedMid": "or compare plans in",
"pricing.page.plansLink": "Plans",
"pricing.page.subscribedAfter": ".",
2026-08-17 21:20:45 +02:00
"pricing.page.guestSubscribedBefore": "Already subscribed?",
"pricing.page.guestSubscribedAfter": "to manage billing and compare plans.",
"legal.lastUpdated": "Last updated: {date}",
"legal.backHome": "← Back to Home",
"legal.emailLabel": "Email:",
"legal.postalLabel": "Postal Address:",
"legal.privacy.title": "Privacy Policy",
"legal.privacy.intro.h": "Introduction",
"legal.privacy.intro.p1": "At Descrybe (\"we,\" \"our,\" or \"us\"), we respect your privacy and are committed to protecting your personal information. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you use Descrybe's product data platform and related services (collectively, the \"Services\").",
"legal.privacy.intro.p2": "By accessing or using our Services, you consent to the practices described in this Privacy Policy. If you do not agree with the policies and practices described here, please do not use our Services.",
"legal.privacy.collect.h": "Information We Collect",
"legal.privacy.collect.lead": "We collect several types of information from and about users of our Services, including:",
"legal.privacy.collect.personal.h": "Personal Information",
"legal.privacy.collect.personal.p": "When you register for an account, we collect information that could be used to identify you, such as your name, email address, phone number, company name, and billing information. We collect this information directly from you when you provide it to us.",
"legal.privacy.collect.userData.h": "User Data",
"legal.privacy.collect.userData.p": "To provide our Services, we collect and process product data, supplier feeds, product descriptions, and other content that you upload, input, or otherwise submit to our platform. This may include product attributes, taxonomy structures, templates, and other data necessary for the operation of our Services.",
"legal.privacy.collect.usage.h": "Usage Information",
"legal.privacy.collect.usage.p": "We automatically collect certain information about your device and how you interact with our Services, including IP address, device type, browser type, operating system, access times, pages viewed, features used, and other system activity. We use this information to improve our Services and user experience.",
"legal.privacy.collect.cookies.h": "Cookies and Tracking Technologies",
"legal.privacy.collect.cookies.p": "We use cookies, web beacons, and similar tracking technologies to collect information about your browsing activities on our website. You can control cookies through your browser settings and other tools. However, if you block certain cookies, you may not be able to use all the features of our Services.",
"legal.privacy.use.h": "How We Use Your Information",
"legal.privacy.use.lead": "We use the information we collect for various purposes, including to:",
"legal.privacy.use.li1": "Provide, maintain, and improve our Services",
"legal.privacy.use.li2": "Process transactions and send related information, including confirmations, invoices, and service notifications",
"legal.privacy.use.li3": "Develop new products, services, features, and functionality",
"legal.privacy.use.li4": "Personalize your experience and deliver content and features relevant to your interests",
"legal.privacy.use.li5": "Respond to your requests, comments, and questions",
"legal.privacy.use.li6": "Send you technical notices, updates, security alerts, and support and administrative messages",
"legal.privacy.use.li7": "Monitor and analyze trends, usage, and activities in connection with our Services",
"legal.privacy.use.li8": "Detect, investigate, and prevent fraudulent transactions and other illegal activities",
"legal.privacy.use.li9": "Protect our rights, property, and safety and the rights, property, and safety of our users or others",
"legal.privacy.use.li10": "Comply with legal obligations and enforce our terms of service",
"legal.privacy.ai.h": "AI and Machine Learning",
"legal.privacy.ai.p1": "Our Services use artificial intelligence and machine learning technologies to process product data, generate content, and provide other automated features. The data you provide to our Services may be used to train and improve our AI models. However, we implement appropriate safeguards to protect your data and maintain its confidentiality.",
"legal.privacy.ai.p2": "We do not use personally identifiable information to train our general AI models without your explicit consent. Product data used for AI training is anonymized and aggregated wherever possible.",
"legal.privacy.share.h": "How We Share Your Information",
"legal.privacy.share.lead": "We may share your information in the following circumstances:",
"legal.privacy.share.providers.h": "Service Providers",
"legal.privacy.share.providers.p": "We may share your information with third-party vendors, service providers, contractors, or agents who perform services on our behalf, such as payment processing, data analysis, email delivery, hosting services, customer service, and marketing assistance.",
"legal.privacy.share.transfers.h": "Business Transfers",
"legal.privacy.share.transfers.p": "If we are involved in a merger, acquisition, financing, reorganization, bankruptcy, or sale of company assets, your information may be transferred as part of that transaction. We will notify you of any such change in ownership or control of your personal information.",
"legal.privacy.share.legal.h": "Legal Requirements",
"legal.privacy.share.legal.p": "We may disclose your information if required to do so by law or in response to valid requests by public authorities (e.g., a court or government agency). We may also disclose your information to enforce our terms of service, protect our rights, privacy, safety, or property, and/or that of our affiliates, users, or others.",
"legal.privacy.share.consent.h": "With Your Consent",
"legal.privacy.share.consent.p": "We may share your information with third parties when you have given us your consent to do so.",
"legal.privacy.security.h": "Data Security",
"legal.privacy.security.p1": "We have implemented appropriate technical and organizational measures designed to secure your personal information from accidental loss and from unauthorized access, use, alteration, and disclosure. All information you provide to us is stored on secure servers behind firewalls.",
"legal.privacy.security.p2": "The safety and security of your information also depends on you. Where we have given you (or where you have chosen) a password for access to certain parts of our Services, you are responsible for keeping this password confidential. We ask you not to share your password with anyone.",
"legal.privacy.security.p3": "Unfortunately, the transmission of information via the internet is not completely secure. Although we do our best to protect your personal information, we cannot guarantee the security of your personal information transmitted to our Services. Any transmission of personal information is at your own risk.",
"legal.privacy.rights.h": "Your Rights and Choices",
"legal.privacy.rights.lead": "We strive to provide you with choices regarding the personal information you provide to us. Depending on your location, you may have certain rights regarding your personal information, including:",
"legal.privacy.rights.li1": "Access and update your personal information",
"legal.privacy.rights.li2": "Request deletion of your personal information",
"legal.privacy.rights.li3": "Object to or restrict the processing of your personal information",
"legal.privacy.rights.li4": "Data portability",
"legal.privacy.rights.li5": "Withdraw consent (where applicable)",
"legal.privacy.rights.footer": "To exercise your rights, please contact us using the contact information provided at the end of this Privacy Policy. Please note that some of these rights may be limited or not applicable depending on your location and the specific circumstances.",
"legal.privacy.retention.h": "Data Retention",
"legal.privacy.retention.p1": "We will retain your personal information for as long as necessary to fulfill the purposes outlined in this Privacy Policy, unless a longer retention period is required or permitted by law. When determining how long to keep your information, we consider the amount, nature, and sensitivity of the information, the potential risk of harm from unauthorized use or disclosure, the purposes for which we process the information, and applicable legal requirements.",
"legal.privacy.retention.p2": "We may retain certain information after you close your account, including for the purposes of complying with our legal obligations, resolving disputes, and enforcing our agreements.",
"legal.privacy.intl.h": "International Data Transfers",
"legal.privacy.intl.p1": "Your personal information may be transferred to, and processed in, countries other than the country in which you are resident. These countries may have data protection laws that are different from the laws of your country.",
"legal.privacy.intl.p2": "If we transfer your personal information to countries outside the European Economic Area or other regions with comprehensive data protection laws, we will ensure that appropriate safeguards are in place to protect your personal information and that the transfer complies with applicable data protection laws.",
"legal.privacy.children.h": "Children's Privacy",
"legal.privacy.children.p": "Our Services are not intended for children under the age of 16, and we do not knowingly collect personal information from children under 16. If we learn we have collected or received personal information from a child under 16 without verification of parental consent, we will delete that information. If you believe we might have any information from or about a child under 16, please contact us.",
"legal.privacy.changes.h": "Changes to Our Privacy Policy",
"legal.privacy.changes.p1": "We may update our Privacy Policy from time to time. If we make material changes to how we treat our users' personal information, we will notify you by email to the email address specified in your account and/or through a notice on our website.",
"legal.privacy.changes.p2": "The date the Privacy Policy was last revised is identified at the top of the page. You are responsible for ensuring we have an up-to-date active and deliverable email address for you, and for periodically visiting our website and this Privacy Policy to check for any changes.",
"legal.privacy.contact.h": "Contact Us",
"legal.privacy.contact.lead": "If you have any questions or concerns about our Privacy Policy or our data practices, please contact us at:",
"legal.terms.title": "Terms of Service",
"legal.terms.s1.h": "1. Agreement to Terms",
"legal.terms.s1.p": "By accessing or using Descrybe's product data platform and related services (collectively, the \"Services\"), you agree to be bound by these Terms of Service and all applicable laws and regulations. If you do not agree with any of these terms, you are prohibited from using or accessing the Services.",
"legal.terms.s2.h": "2. Use License",
"legal.terms.s2.p1": "Subject to your compliance with these Terms of Service, Descrybe grants you a limited, non-exclusive, non-transferable, revocable license to access and use the Services for your business purposes.",
"legal.terms.s2.lead": "This license does not include:",
"legal.terms.s2.li1": "Modifying or copying the Services or any content therein",
"legal.terms.s2.li2": "Using the Services for any commercial purpose other than your authorized business use",
"legal.terms.s2.li3": "Attempting to decompile or reverse engineer any software contained in the Services",
"legal.terms.s2.li4": "Removing any copyright or proprietary notations from the materials",
"legal.terms.s2.li5": "Transferring the materials to another person or \"mirroring\" the materials on any other server",
"legal.terms.s2.p2": "This license shall automatically terminate if you violate any of these restrictions and may be terminated by Descrybe at any time.",
"legal.terms.s3.h": "3. Subscription and Payment",
"legal.terms.s3.p1": "Access to the Services may require a paid subscription. Payment terms will be specified during the subscription process. All payments are non-refundable unless otherwise specified in writing by Descrybe.",
"legal.terms.s3.p2": "Descrybe reserves the right to change subscription fees upon reasonable notice. Continued use of the Services after a fee change constitutes your acceptance of the new fees.",
"legal.terms.s4.h": "4. User Content",
"legal.terms.s4.p1": "You retain all rights to any content you submit, post, or display on or through the Services (\"User Content\"). By providing User Content to Descrybe, you grant Descrybe a worldwide, non-exclusive, royalty-free license to use, reproduce, modify, adapt, publish, translate, and distribute such content in connection with providing the Services.",
"legal.terms.s4.lead": "You represent and warrant that:",
"legal.terms.s4.li1": "You own or control all rights to the User Content you provide",
"legal.terms.s4.li2": "The User Content does not violate these Terms of Service",
"legal.terms.s4.li3": "The User Content will not cause injury to any person or entity",
"legal.terms.s5.h": "5. Artificial Intelligence",
"legal.terms.s5.p1": "The Services utilize artificial intelligence and machine learning technologies. You acknowledge that AI-generated content may not be perfect and agree to review all AI-generated content before use in your business operations.",
"legal.terms.s5.p2": "Descrybe may use anonymized and aggregated User Content to train and improve our AI models, subject to our Privacy Policy. You may opt-out of having your data used for AI training by contacting us.",
"legal.terms.s6.h": "6. Intellectual Property",
"legal.terms.s6.p": "The Services and its original content, features, and functionality are owned by Descrybe and are protected by international copyright, trademark, patent, trade secret, and other intellectual property or proprietary rights laws.",
"legal.terms.s7.h": "7. Disclaimer",
"legal.terms.s7.p1": "The Services are provided on an \"as is\" and \"as available\" basis. Descrybe makes no warranties, expressed or implied, and hereby disclaims all warranties, including without limitation, implied warranties of merchantability, fitness for a particular purpose, non-infringement, or course of performance.",
"legal.terms.s7.p2": "Descrybe does not warrant that the Services will function uninterrupted, secure, or available at any particular time or location, or that any errors or defects will be corrected.",
"legal.terms.s8.h": "8. Limitation of Liability",
"legal.terms.s8.lead": "In no event shall Descrybe be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from:",
"legal.terms.s8.li1": "Your access to or use of or inability to access or use the Services",
"legal.terms.s8.li2": "Any conduct or content of any third party on the Services",
"legal.terms.s8.li3": "Any content obtained from the Services",
"legal.terms.s8.li4": "Unauthorized access, use, or alteration of your transmissions or content",
"legal.terms.s9.h": "9. Termination",
"legal.terms.s9.p1": "Descrybe may terminate or suspend your access to the Services immediately, without prior notice or liability, for any reason, including without limitation if you breach these Terms of Service.",
"legal.terms.s9.p2": "Upon termination, your right to use the Services will immediately cease. If you wish to terminate your account, you may simply discontinue using the Services or contact us to request account deletion.",
"legal.terms.s10.h": "10. Governing Law",
"legal.terms.s10.p": "These Terms shall be governed by and construed in accordance with the laws of Slovenia, without regard to its conflict of law principles.",
"legal.terms.s11.h": "11. Changes to Terms",
"legal.terms.s11.p": "Descrybe reserves the right to modify or replace these Terms of Service at any time. It is your responsibility to review these Terms periodically for changes. Your continued use of the Services following the posting of any changes constitutes acceptance of those changes.",
"legal.terms.s12.h": "12. Contact Us",
"legal.terms.s12.lead": "If you have any questions about these Terms of Service, please contact us at:",
"plans.loadFailed": "Failed to load plans",
"plans.loading": "Loading plans…",
"plans.apiUnavailable": "Plans API is not available on this backend yet. Showing public pricing comparison.",
"plans.title": "Choose your plan",
"plans.sub.onPrefix": "You're on",
"plans.sub.enterpriseSuffix": "— unlimited products and AI capacity. No self-serve upgrade needed.",
"plans.sub.paygSuffix": "— pay as you go. Compare public plans below, or talk to sales for Enterprise.",
"plans.sub.creditsMid": "with {remaining} AI credits remaining.",
"plans.sub.creditsSuffix": "Upgrade Starter → Growth → Business with Checkout, or talk to sales for Enterprise.",
"plans.sub.none": "No plan is assigned yet (for example after a skipped migration). Choose a plan below — capacity is not Unlimited until Checkout or an admin assigns one.",
"plans.stripeHint": "Self-serve upgrades use Stripe Checkout.",
2026-08-16 11:37:42 +02:00
"plans.checkoutUnavailable": "Self-serve checkout is unavailable until Stripe is configured. Contact sales to get a plan.",
"plans.fallbackName": "Plan",
"plans.fallbackDescription": "Capacity for your catalog",
"plans.badge.current": "Current",
"plans.badge.popular": "Most popular",
"plans.price.custom": "Custom",
"plans.price.forever": "forever",
"plans.price.perMonth": "/month",
"plans.price.seePricing": "See pricing",
"plans.capacity.unlimitedSkus": "Unlimited SKUs",
"plans.capacity.unlimitedAi": "Unlimited AI credits",
"plans.capacity.upToProducts": "Up to {count} products",
"plans.capacity.creditsPerMonth": "{count} AI credits / month",
"plans.cta.requestUpgrade": "Request upgrade",
"plans.cta.current": "Current plan",
"plans.cta.contactSales": "Contact sales",
"plans.cta.switchInBilling": "Switch in billing",
"plans.cta.upgradeTo": "Upgrade to {name}",
"plans.cta.startingCheckout": "Starting checkout…",
"plans.planApplied": "{plan} plan applied. Your credits are ready.",
"plans.faq.title": "Frequently asked questions",
"plans.faq.limit.q": "What happens if I hit a limit?",
"plans.faq.limit.a": "Soft banners warn you first. When you run out of AI credits or hit your SKU cap, jobs that need that capacity are blocked until you free space, wait for the next cycle, or upgrade.",
"plans.faq.selfServe.q": "Can I self-serve upgrade?",
"plans.faq.selfServe.a": "Company admins can self-serve Starter, Growth, and Business via Checkout on a plan card. Members should ask a company admin — Checkout requires the admin role. Enterprise is always sales-led. Platform admins can still assign plans under Billing Admin.",
"plans.faq.enterprise.q": "Enterprise & millions of SKUs",
"plans.faq.enterprise.a": "Custom capacity, bring-your-own AI key, SLA, and account management are sales-led. Use Contact sales to send a request — we prepare a custom plan and Stripe Checkout link. You can also book time via Calendly. Enterprise is not self-serve at multi-million SKU scale. The app shows Unlimited for SKU and AI capacity.",
"plans.faq.pricing.q": "Where is public pricing?",
"plans.faq.pricing.aBefore": "See the marketing comparison on the",
"plans.faq.pricing.pricingPage": "Pricing page",
"plans.faq.pricing.aMid": "— CTAs are Get started (register) or Contact sales. Manage usage anytime under",
"plans.faq.pricing.aAfter": ".",
"plans.custom.title": "Need a custom plan?",
"plans.custom.body": "Enterprise capacity, bring-your-own AI key, and SLAs are handled with our team.",
"plans.custom.looking": "Looking for public plan details?",
"ai.title": "AI integrations",
"ai.description": "Choose platform credits or your own key, then customize prompts with variables.",
"ai.crumb": "AI integrations",
"ai.adminOnly": "Only company admins can change AI settings. You can view the current configuration.",
"ai.badge.ownKey": "Your own key",
"ai.badge.platform": "Platform credits / key",
"ai.badge.active": "Active: {label}",
"ai.badge.platformKeyAvailable": "Platform key available",
"ai.badge.lastTest": "Last test: {status}",
"ai.providerMode.title": "Provider mode",
"ai.providerMode.desc": "Platform uses Descrybe credits and our key. Popular or Custom uses your OpenAI-compatible key (the provider call itself does not spend platform credits; feature credit rules still apply).",
"ai.whoPays": "Who pays for the model?",
"ai.mode.internal": "Platform (Descrybe credits / key)",
"ai.mode.popular": "Your key — popular provider",
"ai.mode.custom": "Your key — custom endpoint",
"ai.useCompanyKey": "Use this company key for processing, SEO AI, and campaign AI",
"ai.popular.title": "Popular provider",
"ai.popular.desc": "OpenAI-compatible endpoints. Anthropic via OpenRouter.",
"ai.field.provider": "Provider",
"ai.field.model": "Model",
"ai.placeholder.modelId": "model id",
"ai.baseUrlLabel": "Base URL: {url}",
"ai.custom.title": "Custom endpoint",
"ai.custom.desc": "Enter the HTTPS base URL for your AI provider.",
"ai.field.baseUrl": "Base URL",
"ai.apiKey.title": "API key",
"ai.apiKey.desc": "Leave blank to keep the existing key. Raw secrets are never returned — only a masked last4.",
"ai.storedKey": "Stored key: {masked}",
"ai.field.apiKey": "API key",
"ai.placeholder.keepKey": "•••• leave blank to keep",
"ai.clearStoredKey": "Clear stored API key",
"ai.saveProvider": "Save provider",
"ai.testConnection": "Test connection",
"ai.prompts.title": "Prompt templates",
"ai.prompts.descBefore": "Customize system and user prompts for product copy, SEO meta, and campaign emails. Insert variables like",
"ai.prompts.descMid": "— they are filled at runtime. Brand kit voice is available as",
"ai.prompts.descAfter": ".",
"ai.field.feature": "Feature",
"ai.badge.custom": "Custom",
"ai.badge.builtin": "Built-in default",
"ai.badge.disabledDefault": "Disabled → using default",
"ai.useCustomPrompt": "Use this custom prompt (off = built-in default)",
"ai.insertVariableInto": "Insert variable into",
"ai.insert.system": "System",
"ai.insert.user": "User",
"ai.field.systemPrompt": "System prompt",
"ai.field.userPrompt": "User prompt",
"ai.savePrompts": "Save prompts",
"ai.resetDefault": "Reset to default",
"ai.editBrandVoice": "Edit brand voice",
"ai.flash.loadFailed": "Failed to load AI settings",
"ai.flash.usingPlatform": "Using platform AI (Descrybe credits / key when configured).",
"ai.flash.providerSaved": "AI provider saved. Keys are encrypted and never shown again.",
"ai.flash.saveFailed": "Could not save",
"ai.flash.savePromptsFailed": "Could not save prompts",
"ai.flash.resetFailed": "Could not reset prompt",
"ai.flash.connectionFailed": "Connection failed",
"ai.flash.testFailed": "Test failed",
"ai.action.changeSettings": "change AI provider settings",
"ai.action.changePrompts": "change AI prompts",
"ai.action.testProvider": "test the AI provider",
"email.title": "Email sending",
"email.description": "Resend or SMTP for marketing campaigns. Secrets encrypted at rest.",
"email.adminOnly": "Only company admins can change email provider settings. You can view the current configuration.",
"email.crumb": "Email integration",
"email.dryRunForced": "Dry-run is forced ({reason}). Free plans and EMAIL_DRY_RUN never send real blasts.",
"email.dryRunPolicy": "policy",
"email.badge.verified": "Verified",
"email.badge.notVerified": "Not verified",
"email.badge.canSendReal": "Can send real",
"email.badge.realBlocked": "Real send blocked",
"email.badge.lastTest": "Last test: {status}",
"email.provider.title": "Provider",
"email.provider.desc": "Per-company config. Platform SMTP/Resend env is fallback for missing secrets only.",
"email.field.provider": "Provider",
"email.provider.resend": "Resend",
"email.provider.smtp": "SMTP",
"email.field.fromEmail": "From email",
"email.field.domain": "Domain",
"email.field.from": "From",
"email.field.fromName": "From name",
"email.field.replyTo": "Reply-To",
"email.resendKeySaved": "Resend API key (saved — leave blank to keep)",
"email.resendKey": "Resend API key",
"email.field.smtpHost": "SMTP host",
"email.field.port": "Port",
"email.field.username": "Username",
"email.field.passwordSaved": "Password (saved)",
"email.field.password": "Password",
"email.verifyDomain": "Verify domain",
"email.testGate.title": "Test & blast gate",
"email.testGate.desc": "Test sends verify the from address. Real blasts require typing “I understand”.",
"email.field.recipient": "Recipient",
"email.sendTest": "Send test",
"email.confirmBlast": "Confirm blast…",
"email.flash.loadFailed": "Failed to load email settings",
"email.flash.saveFailed": "Could not save",
"email.flash.verifyUpdated": "Verification updated.",
"email.flash.verifyFailed": "Verification failed",
"email.flash.testFailed": "Test send failed",
"email.flash.blastDryRun": "Delivery check recorded in dry-run mode — no email was sent.",
"email.flash.blastDone": "Delivery check finished: {sent} sent, {failed} failed.",
"email.flash.blastFailed": "Blast failed",
"email.blast.subject": "Descrybe email delivery check",
"email.blast.body": "This is a one-address delivery check from Descrybe to confirm your email integration can send. Recipient: {recipient}",
"email.action.changeSettings": "change email provider settings",
"email.action.verifyDomain": "verify the email domain",
"email.action.sendTest": "send test email",
"email.action.sendBlasts": "send email blasts",
"seo.title": "SEO recommendations",
"seo.description": "Checklist scores for catalog meta, titles, images, and keywords. Template fill is free; AI rewrite is paid.",
"seo.upgradeTitle": "AI rewrite is a paid feature",
"seo.upgradeMessage": "Free plans can still fix missing meta with rule-based templates. Upgrade or add credits to use AI rewrites.",
"seo.comparePlans": "Compare plans",
"seo.openProducts": "Open products",
"seo.overallScore": "Overall SEO score",
"seo.overallScoreHint": "Average across checklist items",
"seo.productsScanned": "Products scanned",
"seo.productsScannedHint": "Processed products in company",
"seo.categoriesScanned": "Categories scanned",
"seo.categoriesScannedHint": "Including meta formula checks",
"seo.aiRewrite": "AI rewrite",
"seo.available": "Available",
"seo.gated": "Gated",
"seo.templateFree": "Template fill stays free on all plans",
"seo.checklist": "Checklist",
"seo.affectedFindings": "{affected} affected · {count} findings",
"seo.fixable": "Fixable",
"seo.clearFilter": "Clear filter",
"seo.findings": "Findings",
"seo.noFindings": "No findings for this filter — nice work.",
"seo.col.issue": "Issue",
"seo.col.entity": "Entity",
"seo.col.severity": "Severity",
"seo.col.actions": "Actions",
"seo.filling": "Filling…",
"seo.templateFill": "Template fill",
"seo.aiTitleAllowed": "Rewrite with AI (uses credits)",
"seo.aiTitleGated": "Requires paid plan or credits",
"seo.rewriting": "Rewriting…",
"seo.aiRewriteBtn": "AI rewrite",
"seo.viewProduct": "View product",
"seo.flash.loadFailed": "Failed to load SEO recommendations",
"seo.flash.aiPaid": "AI rewrite requires a paid plan or credits.",
"seo.flash.applyFailed": "Failed to apply fix",
"brand.title": "Brand kit",
"brand.description": "Define voice, guidelines, and colors so product titles and descriptions stay on-brand.",
"brand.loading": "Loading brand kit…",
"brand.adminOnly": "Only company admins can edit the brand kit. You can view the current voice, colors, and logo.",
"brand.aiApplyFreeAdmin": "You can edit your brand kit on Free. AI apply (injecting brand voice into enhance prompts) unlocks on Starter and above.",
"brand.aiApplyGated": "AI apply (injecting brand voice into enhance prompts) unlocks on Starter and above.",
"brand.aiEnhanceUses": "AI enhance will use this brand voice when processing products.",
"brand.comparePlans": "Compare plans",
"brand.voice.title": "Voice & guidelines",
"brand.voice.desc": "Tone, do/don't rules, and preferred wording",
"brand.field.voiceTone": "Voice / tone",
"brand.placeholder.voiceTone": "e.g. Confident, concise, technical but approachable",
"brand.field.dos": "Do (one per line)",
"brand.placeholder.dos": "Lead with the main benefit\nKeep titles under 80 characters",
"brand.field.donts": "Don't (one per line)",
"brand.placeholder.donts": "No ALL CAPS\nAvoid superlatives without proof",
"brand.field.preferredTerms": "Preferred terms (one per line or comma-separated)",
"brand.placeholder.preferredTerms": "wireless, premium, energy class",
"brand.visual.title": "Visual identity",
"brand.visual.desc": "Colors and logo used across brand-aware tips and campaigns",
"brand.field.primaryColor": "Primary color",
"brand.field.secondaryColor": "Secondary color",
"brand.field.logoImage": "Logo image",
"brand.logoHint": "PNG, JPEG, or WebP up to 2 MiB. Stored under your company uploads.",
"brand.uploading": "Uploading…",
"brand.uploadLogo": "Upload logo",
"brand.clear": "Clear",
"brand.field.logoUrl": "Logo URL",
2026-08-17 21:20:45 +02:00
"brand.placeholder.logoUrl": "https://…",
"brand.logoAlt": "Brand logo preview",
"brand.tipsTitle": "Formula / preview tips",
"brand.saving": "Saving…",
"brand.save": "Save brand kit",
"brand.flash.loadFailed": "Failed to load brand kit",
"structured.title": "Structured Description Fields",
"structured.loading": "Loading structured description fields…",
"structured.backDashboard": "Back to dashboard",
"structured.categoryFormulas": "Category formulas",
"structured.exportFeeds": "Export feeds",
"structured.intro": "These fields are automatically created when you add Export IDs to your description formula sections. They can be used in your export feeds to include specific parts of your product descriptions.",
"structured.addField": "Add Field",
"structured.openCategories": "Open categories",
"structured.tableCaption": "These fields are used to structure parts of product descriptions for export.",
"structured.col.fieldKey": "Field Key",
"structured.col.type": "Type",
"structured.col.created": "Created",
"structured.col.actions": "Actions",
"structured.dialogTitle": "Add Structured Description Field",
"structured.fieldKeyLabel": "Field Key (required)",
"structured.fieldKeyPlaceholder": "e.g., features, specifications",
"structured.fieldTypeLabel": "Field Type",
"structured.type.text": "Text",
"structured.type.number": "Number",
"structured.type.boolean": "Boolean",
"structured.type.list": "List",
"structured.adding": "Adding...",
"structured.flash.loadFailed": "Failed to load structured description fields",
"assistant.ariaLabel": "System assistant",
"assistant.title": "System assistant",
"assistant.subtitle": "Navigate, guide, and run supported actions",
"assistant.resetAria": "Reset conversation",
"assistant.resetTitle": "Reset",
"assistant.closeAria": "Close assistant",
"assistant.messageLabel": "Message",
"assistant.placeholder": "e.g. add a feed URL, API keys, attributes, processing…",
"assistant.sendAria": "Send",
"site.bookDemo": "Book a Demo",
"site.demoShort": "Demo",
"site.allRightsReserved": "All rights reserved.",
"site.cookiePolicy": "Cookie Policy",
"site.cookieSettings": "Cookie settings",
"consent.title": "Cookies and analytics",
"consent.description": "We use necessary cookies to run Descrybe. Optional analytics and marketing cookies help us understand product usage and measure campaigns. You can change your choice anytime.",
"consent.acceptAll": "Accept all",
"consent.rejectNonEssential": "Reject non-essential",
"consent.customize": "Customize",
"consent.save": "Save preferences",
"consent.necessary": "Necessary",
"consent.necessaryDesc": "Required for sign-in, security (CSRF), theme, language, and remembering this choice.",
"consent.alwaysOn": "Always on",
"consent.analytics": "Analytics",
"consent.analyticsDesc": "Helps us understand how the product is used (Google Analytics via GTM).",
"consent.marketing": "Marketing",
"consent.marketingDesc": "Used for advertising measurement and personalization when ads tags are configured in GTM.",
"consent.policyLink": "Read our Cookie Policy",
"seo.cookies.title": "Cookie Policy | Descrybe",
"seo.cookies.description": "How Descrybe uses necessary, analytics, and marketing cookies, including Google Tag Manager and GA4, and how to change your consent.",
"legal.cookies.title": "Cookie Policy",
"legal.cookies.intro.h": "Overview",
"legal.cookies.intro.p1": "This Cookie Policy explains how Descrybe uses cookies and similar technologies on our website and application. It should be read together with our Privacy Policy.",
"legal.cookies.intro.p2": "Where required, we ask for your consent before enabling analytics or marketing cookies. Necessary cookies are used to provide the service securely and do not require consent.",
"legal.cookies.types.h": "Cookie categories",
"legal.cookies.necessary.h": "Necessary",
"legal.cookies.necessary.p": "These cookies keep you signed in, protect forms with CSRF tokens, store your theme and language preferences, and remember your cookie choice. The product cannot work correctly without them.",
"legal.cookies.analytics.h": "Analytics",
"legal.cookies.analytics.p": "If you allow analytics, we load Google Tag Manager (GTM) tags that may set Google Analytics 4 cookies to measure page views and product events. Events are gated until analytics storage is granted.",
"legal.cookies.marketing.h": "Marketing",
"legal.cookies.marketing.p": "If you allow marketing, advertising-related tags in GTM may use ad storage and related signals for campaign measurement and personalization.",
"legal.cookies.gtm.h": "Google Tag Manager and GA4",
"legal.cookies.gtm.p": "When configured, Descrybe loads a Google Tag Manager container. GA4 is configured inside that container by Descrybe operators. Consent Mode v2 defaults to denied for analytics and ads storage until you accept the relevant categories.",
"legal.cookies.third.h": "Third parties",
"legal.cookies.third.p": "Google (Tag Manager / Analytics) may process technical data such as page URLs, device/browser information, and event names when consent is granted. We do not intentionally send passwords, API keys, or personal contact details in analytics events.",
"legal.cookies.manage.h": "How to change your consent",
"legal.cookies.manage.p": "Use Cookie settings in the site footer (or the button below) to reopen the consent banner and update your preferences. You can also clear site data in your browser.",
"site.privacyPolicy": "Privacy Policy",
"site.termsOfService": "Terms of Service",
"site.legalNav": "Legal",
"site.footer.aria": "Site",
"site.footer.description": "Descrybe turns supplier feeds into clean, channel-ready product catalogs — map fields, enrich attributes and listing copy, then export or sync to WooCommerce.",
"site.footer.rightsLine": "© {year} {name}. All rights reserved.",
"site.footer.navTitle": "Navigation",
"site.footer.platform": "Platform",
"site.footer.solutions": "Solutions",
"site.footer.contact": "Contact Us",
"home.hero.tagline": "Product data for ecommerce teams",
"home.hero.title": "From Supplier Feeds To Product Pages",
"home.hero.lead": "Connect supplier feeds, map them to your categories, fill required attributes, and write titles and descriptions that follow your rules — then export or sync to your store.",
"home.hero.learnMore": "Learn More",
"home.hero.apply": "Apply For Access",
"home.hero.supportedBy": "Supported by",
"home.hero.msAlt": "Microsoft for Startups",
"home.image.previewAlt": "Descrybe platform preview demonstrating feed to product page transformation",
"home.how.title": "Here's how Descrybe saves you time getting products to market",
"home.how.lead": "Bring in messy supplier data once. Descrybe helps you categorize it, fill attributes, write listing copy, and push ready products to your channels.",
"home.how.apply": "Apply For Access",
"home.how.step1.title": "Import Your Taxonomy",
"home.how.step1.desc": "Set up the categories and attributes your store already uses",
"home.how.step1.f1": "Define required attributes for each category",
"home.how.step1.f2": "Set per-category title formulas",
"home.how.step1.f3": "Set product description and search-snippet templates",
"home.how.step2.title": "Import Supplier Data",
"home.how.step2.desc": "Connect a feed URL or upload a product file",
"home.how.step2.f1": "Import from CSV, XML, or API sources",
"home.how.step2.f2": "Schedule automated imports from your suppliers",
"home.how.step2.f3": "Map source fields with a simple drag-and-drop interface",
"home.how.step3.title": "Transform & Enhance",
"home.how.step3.desc": "Pick the products to process and let Descrybe:",
"home.how.step3.f1": "Assign the right categories",
"home.how.step3.f2": "Fill required product attributes",
"home.how.step3.f3": "Create clear, search-friendly titles and descriptions",
"home.how.step4.title": "Export to Channels",
"home.how.step4.desc": "Push ready product data to the places you sell",
"home.how.step4.f1": "Generate channel-specific product feeds",
"home.how.step4.f2": "Keep full control over which fields you export",
"home.how.step4.f3": "Stay up to date as supplier data changes",
"home.benefits.title": "Everything you need for cleaner product data",
"home.benefits.lead": "From feed import to channel-ready listings — without rebuilding every file by hand.",
"home.benefits.shield.title": "Catch incomplete listings early",
"home.benefits.shield.desc": "Check product data against your category rules so missing attributes and thin copy get fixed before they go live.",
"home.benefits.chart.title": "Clearer listings, stronger conversion",
"home.benefits.chart.desc": "Titles and descriptions that highlight what shoppers care about — benefits, specs, and search terms that match your catalog.",
"home.benefits.database.title": "One consistent product structure",
"home.benefits.database.desc": "Keep the same category tree and attribute shape across exports and channels so customers can find products the same way everywhere.",
"home.benefits.search.title": "Search-friendly product content",
"home.benefits.search.desc": "Write titles, descriptions, and meta snippets that are easier for shoppers and search engines to understand.",
"home.benefits.cost.title": "Less manual data entry",
"home.benefits.cost.desc": "Automate mapping, attribute fill, and listing copy so your team spends time on merchandising — not spreadsheet cleanup.",
"home.benefits.scale.title": "Ready for every sales channel",
"home.benefits.scale.desc": "Shape export feeds and WooCommerce sync for the formats each channel expects, without rebuilding the catalog by hand.",
"home.cta.titleLead": "Get Products To Market ",
"home.cta.titleHighlight": "Faster",
"home.cta.description": "Stop rebuilding product data from every supplier file. Map once, enrich with your rules, and publish listings that are ready to sell.",
"home.cta.f1": "Personalized demo",
"home.cta.f2": "Expert consultation",
"home.cta.f3": "Clear next steps",
"home.cta.apply": "Apply For Access",
"home.cta.imageAlt": "Descrybe product pages",
"home.product.eyebrow": "What Descrybe does",
"home.product.title": "Supplier feeds in. Ready listings out — export, WooCommerce, or API.",
"home.product.description": "Descrybe helps ecommerce teams turn supplier CSV and XML feeds into clean product catalogs. Map fields to your categories, enrich attributes and listing copy, then ship data through export feeds, WooCommerce sync, or the public API.",
"home.product.pipelineAria": "Product pipeline",
"home.product.p1.label": "Feeds in",
"home.product.p1.detail": "CSV / XML from supplier URLs",
"home.product.p2.label": "Map",
"home.product.p2.detail": "Match columns to your fields",
"home.product.p3.label": "Enrich",
"home.product.p3.detail": "Categories, attributes, titles",
"home.product.p4.label": "Ship",
"home.product.p4.detail": "Export · Woo · API",
"pricing.section.badge": "SKU capacity + AI credits",
"pricing.section.title": "Start free. Scale when your catalog grows.",
"pricing.section.lead": "Free includes feed mapping, basic product cleanup, and EU energy labels (EPREL) for up to 50 SKUs (no AI credits). Paid plans add AI titles and descriptions, growing SKU caps, and export options — Starter through Scale, or talk to sales for Enterprise.",
"pricing.section.billingPeriod": "Billing period",
"pricing.section.monthly": "Monthly",
"pricing.section.yearly": "Yearly",
"pricing.section.savePercent": "Save 20%",
"pricing.section.publicBefore": "Public plans: Free, Starter, Plus, Growth, Business, Scale, and Enterprise. Create a Free account, then upgrade under",
"pricing.section.publicOr": "or",
"pricing.section.publicAfter": "via Stripe Checkout. Enterprise remains sales-led.",
2026-08-17 21:20:45 +02:00
"pricing.section.guestPublicBefore": "Public plans: Free, Starter, Plus, Growth, Business, Scale, and Enterprise. Create a Free account, then",
"pricing.section.guestPublicAfter": "to upgrade via Stripe Checkout. Enterprise remains sales-led.",
"pricing.section.plansLink": "Plans",
"pricing.section.billingLink": "Billing",
"pricing.section.capabilitiesTitle": "What every plan is built for",
"pricing.section.capabilitiesLead": "Import feeds, enrich your catalog, then export or sync to WooCommerce",
"pricing.section.faqTitle": "Frequently asked questions",
"pricing.section.readyTitle": "Ready to map your first feed?",
"pricing.section.readyLead": "Create a Free account — no card required. Already have one? Open the app or compare plans.",
"pricing.section.contactSales": "Contact sales",
"pricing.cap.feeds": "Feeds to catalog",
"pricing.cap.feeds.f1": "CSV / XML / URL supplier feeds",
"pricing.cap.feeds.f2": "Field mapping & validation",
"pricing.cap.feeds.f3": "Multi-supplier merge",
"pricing.cap.feeds.f4": "Scheduled sync",
"pricing.cap.feeds.f5": "Category-aware transforms",
"pricing.cap.processing": "Processing & AI",
"pricing.cap.processing.f1": "Data cleanup & attribute fill (all plans)",
"pricing.cap.processing.f2": "AI titles & descriptions (paid)",
"pricing.cap.processing.f3": "EU energy labels / EPREL (all plans)",
"pricing.cap.processing.f4": "Formulas, brand voice, variables",
"pricing.cap.processing.f5": "Managed credits or your own AI key",
"pricing.cap.export": "Export & channels",
"pricing.cap.export.f1": "XML / CSV export feeds",
"pricing.cap.export.f2": "WooCommerce / Shopify sync",
"pricing.cap.export.f3": "Full API",
"pricing.cap.export.f4": "Channel-specific formats",
"pricing.cap.export.f5": "Bulk updates",
"pricing.cap.limits": "Limits & control",
"pricing.cap.limits.f1": "SKU caps by plan (Scale reaches 12k; Enterprise for huge catalogs)",
"pricing.cap.limits.f2": "Monthly AI credits + buyable top-up packs",
"pricing.cap.limits.f3": "Team roles & invites",
"pricing.cap.limits.f4": "Enterprise SLA options",
"pricing.faq.credits.q": "What are AI credits?",
"pricing.faq.credits.a":
"AI credits pay for steps like generating titles and descriptions (~2 credits per product enhance). Free includes 0 AI. Paid plans have per-tier SKU caps (Starter 100 → Scale 12k; Enterprise unlimited). Included AI uses CreditSKUBase × ~50% cover × 2 credits/product for 1 primary language: Starter 100 · Plus 400 · Growth 1,200 · Business 4,000 · Scale 12,000 credits/month (~50% of each plans SKU cap). Finish more AI with packs or BYOK (Growth+). Plan price is for platform + included AI — not a full-catalog AI bundle.",
"pricing.faq.packs.q": "Can I buy extra AI credits?",
"pricing.faq.packs.a":
"Yes. One-time AI packs from Billing (Checkout mode=payment — not subscription add-ons): Nano 25 credits / $29 · Starter 65 / $59 · Plus 200 / $149 · Growth 500 / $299 · Catalog 1,200 / $599 · Business 3,000 / $1,299 · Scale 8,000 / $2,999. Packs do not raise SKU limits.",
"pricing.faq.limits.q": "What happens if I hit my product or credit limit?",
"pricing.faq.limits.a":
"We warn you as you get close. Each plan has a SKU cap that grows by tier (Scale reaches 12k; 1M+ catalogs are Enterprise). AI credits are often the binding limit for enrichment. When you run out of AI credits, buy a credit pack, wait for the next monthly grant, upgrade for a larger grant, or use your own AI key (Growth+).",
"pricing.faq.change.q": "Can I upgrade or downgrade?",
"pricing.faq.change.a": "Yes. Start on Free, then upgrade to Starter, Plus, Growth, Business, or Scale from Plans or Billing (Stripe Checkout). Enterprise is always sales-led.",
"pricing.faq.free.q": "What does Free include?",
"pricing.faq.free.a": "Forever Free: 50 products, one feed, data cleanup and attribute fill, EU energy labels (EPREL — public data, no credits), plus one manual export — with 0 AI credits. No credit card. Upgrade when you need AI titles, descriptions, or more capacity.",
"pricing.faq.why.q": "Why not pay per product like content-only tools?",
"pricing.faq.why.a": "Descrybe is built for the full path from supplier feed to catalog to WooCommerce or export — not only AI copy. You pay for platform capacity (products and feeds); AI is a usage layer on top.",
"pricing.faq.annual.q": "How does annual billing work?",
"pricing.faq.annual.a": "Yearly billing is about 20% off the monthly list price. Start free, then choose yearly in Checkout when you upgrade (or contact sales).",
"pricing.calc.badge": "Plan calculator",
"pricing.calc.title": "Find the right plan",
"pricing.calc.lead": "Enter feeds, catalog size, and how many products you want to enhance with AI (count each language pass).",
"pricing.calc.feeds": "Feed sources",
"pricing.calc.feedsHint": "Supplier / import feeds you need to connect",
"pricing.calc.skus": "Catalog products (SKUs)",
"pricing.calc.skusHint": "Total products you will store and process",
"pricing.calc.aiVolume": "AI process volume",
"pricing.calc.aiHint": "Roughly products × languages you want to enhance per month",
"pricing.calc.recommendedLabel": "Recommended",
"pricing.calc.budgetLabel": "Budget option",
"pricing.calc.coversCredits": "Needs about {count} AI credits / month",
"pricing.calc.aiIncluded": "Included monthly credits cover this AI volume",
"pricing.calc.aiNeedsPacks": "Add {count}× {pack} (~{usd}) for the AI shortfall",
"pricing.calc.orYearly": "or ~{amount}/mo yearly",
"pricing.calc.budgetNote": "Lower list price with yearly discount and/or credit packs when that still fits.",
"pricing.calc.noBudget": "The recommended plan is already the leanest fit for these inputs.",
"pricing.calc.enterpriseTitle": "Sounds like Enterprise",
"pricing.calc.enterpriseBody": "Your feeds or catalog size exceed self-serve caps. Talk to sales for unlimited capacity and a managed AI grant or BYOK.",
"pricing.calc.ctaPlan": "Choose {name}",
2026-08-17 21:20:45 +02:00
"pricing.calc.disclaimer": "Estimates use list prices and ~2 credits per AI product enhance. Checkout prices come from Stripe. Custom client deals stay admin-only.",
"pricing.card.mostPopular": "Most Popular",
"pricing.card.custom": "Custom",
"pricing.card.forever": "forever",
"pricing.card.perMonth": "month",
"pricing.card.perYear": "year",
"pricing.card.savePerMonth": "Save ${amount}/month",
"pricing.card.discountBadge": "-20%",
"pricing.card.unlimitedSkus": "Unlimited SKUs",
"pricing.card.oneMSkus": "1M+ SKUs",
"pricing.card.upToSkus": "Up to {count} SKUs",
"pricing.card.unlimitedAi": "Unlimited AI credits",
"pricing.card.zeroCredits": "0 AI credits / month",
"pricing.card.creditsPerMonth": "{count} AI credits / month",
"pricing.card.showLess": "Show Less",
"pricing.card.showMoreFeature": "Show {count} More Feature",
"pricing.card.showMoreFeatures": "Show {count} More Features",
"pricing.card.upgradeTo": "Upgrade to {name}",
"pricing.plan.free.description": "Map a sample feed and clean product data — no card required",
"pricing.plan.starter.description": "Up to 100 SKUs, entry AI (~100 credits), Woo sync — packs for more AI",
"pricing.plan.plus.description": "Up to 400 SKUs, Woo + Shopify, AI (~400 credits)",
"pricing.plan.growth.description": "Up to 1,200 SKUs, stores, BYOK, AI (~1,200 credits)",
"pricing.plan.business.description": "Up to 4,000 SKUs, BYOK, AI (~4,000 credits)",
"pricing.plan.scale.description": "Up to 12,000 SKUs, AI (~12k credits), packs/BYOK for more",
"pricing.plan.enterprise.description": "Unlimited capacity, SLA, and a dedicated account team",
"pricing.feature.credits100": "100 AI credits / month (~50% catalog cover)",
"pricing.feature.credits100starter": "100 AI credits / month (~50% catalog cover)",
"pricing.feature.credits400": "400 AI credits / month (~50% catalog cover)",
"pricing.feature.credits600": "600 AI credits / month (~10% credit base)",
"pricing.feature.credits1800": "1,800 AI credits / month (~6% credit base)",
"pricing.feature.credits2700": "2,700 AI credits / month (~15% credit base)",
"pricing.feature.credits5000base": "5,000 AI credits / month (~10% credit base)",
"pricing.feature.credits7000": "7,000 AI credits / month (~20% credit base)",
"pricing.feature.credits12000": "12,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits16000": "16,000 AI credits / month (~16% credit base)",
"pricing.feature.upTo1mSkus": "Up to 1,000,000 SKUs",
"pricing.feature.upTo15kSkus": "Up to 15,000 SKUs",
"pricing.feature.credits15000": "15,000 AI credits / month (~30% catalog cover)",
"pricing.feature.credits60000": "60,000 AI credits / month (~40% catalog cover)",
"pricing.feature.upTo50Skus": "Up to 50 SKUs",
"pricing.feature.upTo100Skus": "Up to 100 SKUs",
"pricing.feature.upTo400Skus": "Up to 400 SKUs",
"pricing.feature.upTo1200Skus": "Up to 1,200 SKUs",
"pricing.feature.upTo4kSkus": "Up to 4,000 SKUs",
"pricing.feature.upTo12kSkus": "Up to 12,000 SKUs",
"pricing.feature.oneFeedSource": "1 feed source",
"pricing.feature.twoFeedSources": "2 feed sources",
"pricing.feature.threeFeedSources": "3 feed sources",
"pricing.feature.fourFeedSources": "4 feed sources",
"pricing.feature.sixFeedSources": "6 feed sources",
"pricing.feature.twelveFeedSources": "12 feed sources",
"pricing.feature.twentyFiveFeedSources": "25 feed sources",
"pricing.feature.cleanData": "Clean data, parse specs, and fill fields",
"pricing.feature.eprel": "EU energy labels (EPREL)",
"pricing.feature.zeroCredits": "0 AI credits / month",
"pricing.feature.oneManualExport": "1 manual export feed",
"pricing.feature.twoExports": "2 export feeds",
"pricing.feature.fourExports": "4 export feeds",
"pricing.feature.wooTestOnly": "WooCommerce connection test only",
"pricing.feature.upTo2Seats": "Up to 2 seats",
"pricing.feature.aiTitles": "AI titles & descriptions",
"pricing.feature.liveStoreSync": "Live store sync",
"pricing.feature.apiAccess": "API access",
"pricing.feature.byok": "Bring your own AI key",
"pricing.feature.upTo500Skus": "Up to 500 SKUs",
"pricing.feature.upTo1000Skus": "Up to 1,000 SKUs",
"pricing.feature.fiveFeedSources": "5 feed sources",
"pricing.feature.fiveExports": "5 export feeds",
"pricing.feature.credits250": "250 AI credits / month (~25% catalog cover)",
"pricing.feature.credits1000": "1,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits1000full": "1,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits10000full": "10,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits50000full": "50,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits100000": "100,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits225000": "225,000 AI credits / month (~75% catalog cover)",
"pricing.feature.credits12500": "12,500 AI credits / month (~25% catalog cover)",
"pricing.feature.credits30000": "30,000 AI credits / month (~20% catalog cover)",
"pricing.feature.upTo75kSkus": "Up to 75,000 SKUs",
"pricing.feature.threeExports": "3 export feeds",
"pricing.feature.sixExports": "6 export feeds",
"pricing.feature.tenExports": "10 export feeds",
"pricing.feature.fullWooSync": "Full WooCommerce sync",
"pricing.feature.readApi": "Read API access",
"pricing.feature.emailSupport": "Email support",
"pricing.feature.creditPacks": "Buy extra AI credit packs",
"pricing.feature.upTo2500Skus": "Up to 2,500 SKUs",
"pricing.feature.upTo1500Skus": "Up to 1,500 SKUs",
"pricing.feature.upTo3500Skus": "Up to 3,500 SKUs",
"pricing.feature.upTo9500Skus": "Up to 9,500 SKUs",
"pricing.feature.upTo18kSkus": "Up to 18,000 SKUs",
"pricing.feature.upTo55kSkus": "Up to 55,000 SKUs",
"pricing.feature.upTo5000Skus": "Up to 5,000 SKUs",
"pricing.feature.eightFeedSources": "8 feed sources",
"pricing.feature.credits500": "500 AI credits / month",
"pricing.feature.credits1250": "1,250 AI credits / month (~25% catalog cover)",
"pricing.feature.credits5000": "5,000 AI credits / month (~25% catalog cover)",
"pricing.feature.eightExports": "8 export feeds",
"pricing.feature.fifteenExports": "15 export feeds",
"pricing.feature.wooShopifySync": "Full WooCommerce + Shopify sync",
"pricing.feature.upTo10kSkus": "Up to 10,000 SKUs",
"pricing.feature.upTo25kSkus": "Up to 25,000 SKUs",
"pricing.feature.fifteenFeedSources": "15 feed sources",
"pricing.feature.tenFeedSources": "10 feed sources",
"pricing.feature.twentyFeedSources": "20 feed sources",
"pricing.feature.thirtyFeedSources": "30 feed sources",
"pricing.feature.credits1200": "1,200 AI credits / month (~50% catalog cover)",
"pricing.feature.credits10000": "10,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits25000": "25,000 AI credits / month (~50% catalog cover)",
"pricing.feature.twentyExports": "20 export feeds",
"pricing.feature.fortyExports": "40 export feeds",
"pricing.feature.fullFormulas": "Full formulas & variables",
"pricing.feature.fullApi": "Full API access",
"pricing.feature.byokAddon": "Bring-your-own-key add-on",
"pricing.feature.emailSupport24h": "Email support (24h)",
"pricing.feature.upTo40kSkus": "Up to 40,000 SKUs",
"pricing.feature.upTo50kSkus": "Up to 50,000 SKUs",
"pricing.feature.fortyFeedSources": "40 feed sources",
"pricing.feature.fiftyFeedSources": "50 feed sources",
"pricing.feature.credits4000": "4,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits40000": "40,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits50000half": "50,000 AI credits / month (~50% catalog cover)",
"pricing.feature.unlimitedExports": "Unlimited export feeds",
"pricing.feature.fullApiWebhooks": "Full API",
"pricing.feature.byokIncluded": "Bring your own AI key included",
"pricing.feature.priorityEmail": "Priority email support",
"pricing.feature.upTo100kSkus": "Up to 100,000 SKUs",
"pricing.feature.upTo150kSkus": "Up to 150,000 SKUs",
"pricing.feature.hundredFeedSources": "100 feed sources",
"pricing.feature.hundredFiftyFeedSources": "150 feed sources",
"pricing.feature.credits8000": "8,000 AI credits / month",
"pricing.feature.credits50000": "50,000 AI credits / month (~25% catalog cover)",
"pricing.feature.credits120000": "120,000 AI credits / month (~40% catalog cover)",
"pricing.feature.prioritySlack": "Priority support + Slack",
"pricing.feature.unlimitedSkus": "Unlimited SKUs",
"pricing.feature.unlimitedFeeds": "Unlimited feed sources",
"pricing.feature.unlimitedAiOwnKey": "Unlimited AI credits / own key",
"pricing.feature.ssoWebhooksAm": "SSO, dedicated account manager",
"pricing.feature.customIntegrations": "Custom integrations",
"pricing.feature.slaPriority": "SLA & priority support",
"pricing.pack.tiny.name": "Nano pack",
"pricing.pack.tiny.desc": "Smoke tests / tiny fixes (25 credits ≈ 12 AI products)",
"pricing.pack.small.name": "Starter pack",
"pricing.pack.small.desc": "Small top-up (65 credits ≈ 32 AI products)",
"pricing.pack.medium.name": "Plus pack",
"pricing.pack.medium.desc": "Burst top-up (200 credits ≈ 100 AI products)",
"pricing.pack.large.name": "Growth pack",
"pricing.pack.large.desc": "Mid buffer (500 credits ≈ 250 AI products)",
"pricing.pack.xl.name": "Catalog pack",
"pricing.pack.xl.desc": "Catalog / re-run buffer (1,200 credits ≈ 600 AI products)",
"pricing.pack.xxl.name": "Business pack",
"pricing.pack.xxl.desc": "Large multi-language buffer (3,000 credits ≈ 1,500 AI products)",
"pricing.pack.mega.name": "Scale pack",
"pricing.pack.mega.desc": "Distributor / agency burst (8,000 credits ≈ 4,000 AI products)",
"pricing.section.faqDescription": "Straight answers about plans, credits, and what Free includes.",
"billing.buyCreditPacks": "Buy AI credit packs",
"billing.buyCreditPacksHint":
"Seven one-time packs (25 → 8,000 credits). Sync Prices from Admin → Settings → Stripe, or go run ./cmd/sync-stripe-packs -write-settings. For ongoing AI volume, upgrade the plan for a larger monthly grant.",
"billing.packCredits": "{credits} credits",
"billing.packApproxProducts": "~{count} AI products",
"billing.buyPack": "Buy",
"billing.checkoutCompletePack": "Credit pack purchased — {credits} AI credits added.",
"billing.packCheckoutFailed": "Could not start credit pack checkout.",
"empty.default.noItems": "Nothing here yet.",
"settings.tabLockedHint": "Not on your plan",
"stores.connectorLocked": "Not on your plan",
"stores.connectorUpgrade": "Upgrade to unlock",
"plan.upgrade.title": "This feature is not on your plan",
"plan.upgrade.message": "Upgrade to unlock this part of Descrybe.",
"plan.upgrade.defaultMessage":
"Your current plan does not include this part of Descrybe. Upgrade to unlock it, or ask a company admin if you cannot change billing.",
"plan.upgrade.sectionOff.title": "This feature is temporarily unavailable",
"plan.upgrade.sectionOff.message":
"This part of Descrybe is turned off for the platform right now. It is not an upgrade issue — try again later or contact support.",
"plan.upgrade.sectionOff.cta": "Back to dashboard",
"plan.upgrade.stores.message":
"WooCommerce and Shopify connectors need a plan that includes Stores. Upgrade to connect those stores — or keep working with feeds and the API on your current plan.",
"plan.upgrade.stillWorks.title": "What still works on your plan",
"plan.upgrade.stillWorks.feeds.label": "Input feeds",
"plan.upgrade.stillWorks.feeds.description":
"Add CSV or XML URLs and file uploads to sync catalogs without store connectors.",
"plan.upgrade.stillWorks.export.label": "Export feeds",
"plan.upgrade.stillWorks.export.description":
"Generate outbound feeds for shopping channels and partners.",
"plan.upgrade.stillWorks.processing.label": "Background tasks",
"plan.upgrade.stillWorks.processing.description":
"Monitor AI and catalog jobs in Processing - available on your plan even without store connectors.",
"plan.upgrade.stillWorks.api.label": "API keys",
"plan.upgrade.stillWorks.api.description":
"Create a key in Settings to use /api/v1 — the secret is shown only once.",
"plan.upgrade.stillWorks.docs.label": "API docs",
"plan.upgrade.stillWorks.docs.description":
"Read the API overview and integrate without WooCommerce or Shopify.",
"plan.upgrade.feature.settings.api_keys": "API keys need a paid plan",
"plan.upgrade.feature.catalog.products.process_ai_titles": "AI titles are a paid feature",
"plan.upgrade.feature.catalog.products.process_ai_descriptions": "AI descriptions are a paid feature",
"plan.upgrade.feature.marketing.campaigns.generate_ai": "Campaign AI needs a paid plan",
"plan.upgrade.feature.marketing.campaigns.send": "Live campaign send needs a paid plan",
"plan.upgrade.feature.marketing.brand_ai_apply": "Brand voice in AI needs a paid plan",
"plan.upgrade.feature.marketing.seo.ai_rewrite": "SEO AI rewrite needs a paid plan",
"plan.upgrade.feature.integrations.ai.byok": "Bring-your-own AI key starts on Growth",
"plan.upgrade.feature.capability.byok": "Bring-your-own AI key starts on Growth",
"plan.upgrade.feature.marketing.campaigns": "Campaigns are not on your plan",
"plan.upgrade.feature.marketing.content_calendar": "Content calendar is not on your plan",
"plan.upgrade.feature.marketing.seo": "SEO tools are not on your plan",
"plan.upgrade.feature.marketing.brand_kit": "Brand kit is not on your plan",
"plan.upgrade.feature.marketing.reviews": "Reviews are not on your plan",
"plan.upgrade.feature.integrations.ai": "AI integrations are not on your plan",
"plan.upgrade.feature.integrations.email": "Email sending is not on your plan",
"plan.upgrade.feature.processing.monitor": "Processing is not on your plan",
"plan.upgrade.feature.stores.hub": "Store connectors are not on your plan",
"plan.upgrade.feature.stores.woocommerce": "WooCommerce is not on your plan",
"plan.upgrade.feature.stores.shopify": "Shopify is not on your plan",
"plan.upgrade.feature.support.center": "Support Center is not on your plan",
"plan.upgrade.feature.support.ticket_create": "Creating support tickets is not on your plan",
"plan.upgrade.feature.support.ticket_thread": "Support ticket threads are not on your plan",
"plan.upgrade.feature.catalog.structured_descriptions": "Structured descriptions are not on your plan",
"plan.upgrade.feature.catalog.vector_categories": "Vector categories are not on your plan",
"plan.checkingAccess": "Checking plan access…",
"upgradeBanner.comparePlans": "Compare plans",
"upgradeBanner.talkToSales": "Talk to sales",
"commandPalette.closeAria": "Close search",
"commandPalette.ariaLabel": "Search pages",
"commandPalette.placeholder": "Search pages…",
"commandPalette.searchAria": "Search pages",
"commandPalette.destinationsAria": "Pages",
"commandPalette.noMatches": "No matching pages",
"commandPalette.announceIdleOne": "Search. {count} page.",
"commandPalette.announceIdleMany": "Search. {count} pages.",
"commandPalette.announceNone": "No matching pages.",
"commandPalette.announceMatchOne": "{count} matching page.",
"commandPalette.announceMatchMany": "{count} matching pages.",
"vector.title": "Vector Categories Test",
"vector.description": "Search the vector category index when Pinecone is configured. Index create and initialize are not available in v2 yet.",
"vector.probing": "Checking vector categories API…",
"vector.unavailable": "Vector categories arent on this backend yet. Theres nothing to run here until /api/vector-categories/* is wired.",
"vector.browseCategories": "Browse categories",
"vector.initHeading": "Initialize Vector Database",
"vector.initComingSoon": "Create Index and Initialize Vector DB are not available in v2 yet (coming soon). Search still works when Pinecone is configured.",
"vector.createIndex": "Create Index",
"vector.initDb": "Initialize Vector DB",
"vector.searchHeading": "Search Categories",
"vector.searchPlaceholder": "Enter product description...",
"vector.results": "Results:",
"vector.categoryLabel": "Category:",
"vector.idLabel": "ID:",
"vector.scoreLabel": "Score:",
"switcher.switching": "Switching…",
"switcher.returnTo": "Return to {email}",
"switcher.switchUser": "Switch user",
"switcher.loadingUsers": "Loading users…",
"switcher.empty": "No switchable users found.",
"switcher.noCompany": "No company",
"switcher.unknownCompany": "Unknown company",
"companySwitcher.select": "Select company",
"companySwitcher.switchAria": "Switch company: {label}",
"companySwitcher.companies": "Companies",
2026-08-14 00:06:43 +02:00
"companySwitcher.returnTo": "Return to {name}",
"companySwitcher.returnHome": "Return to home company",
"storeReconnect.primaryLabel": "Reconnect store",
"storeReconnect.titlePlural": "Reconnect stores after migration",
"storeReconnect.titleChannel": "Reconnect {channel} after migration",
"storeReconnect.titleSingular": "Reconnect store after migration",
"storeReconnect.messageWithItems": "Store API credentials were not carried over (or cannot be used) after the platform migration. This is not a broken sync — reconnect each store, then Test Connection before queueing a sync.",
"storeReconnect.messageSingle": "{channel} API credentials were not carried over (or cannot be used) after the platform migration. This is not a broken sync — paste fresh credentials, Save, then Test Connection before queueing a sync.",
"storeReconnect.channelFallback": "Store",
"storeReconnect.askAdmin": "Ask a company admin to reconnect — only admins can save store credentials.",
"storeReconnect.reconnectItem": "Reconnect {label}",
"admin.storeReconnect.channel.other": "Other",
"admin.storeReconnect.channel.woocommerce": "WooCommerce",
"admin.storeReconnect.channel.shopify": "Shopify",
"admin.storeReconnect.reason.other": "Other",
"admin.storeReconnect.reason.missingCredentials": "Missing credentials",
"admin.storeReconnect.enabledNo": "No",
"admin.storeReconnect.enabledYes": "Yes",
"admin.storeReconnect.colLastTest": "Last test",
"admin.storeReconnect.colEnabled": "Enabled",
"admin.storeReconnect.colReason": "Reason",
"admin.storeReconnect.colIdentity": "Identity",
"admin.storeReconnect.colChannel": "Channel",
"admin.storeReconnect.colCompany": "Company",
"admin.storeReconnect.noRows": "No rows in this page.",
"admin.storeReconnect.noneFound": "No stores need reconnect right now.",
"admin.storeReconnect.needsBadge": "Needs reconnect",
"admin.storeReconnect.cleanBadge": "No gaps",
"admin.storeReconnect.listDesc": "Store URL / shop domain present without usable secrets (matches merchant reconnect banner).",
"admin.storeReconnect.listTitle": "Connected but invalid",
"admin.storeReconnect.metric.showing": "Rows shown",
"admin.storeReconnect.metric.total": "Gaps total",
"admin.storeReconnect.cutoverHint": "Read-only inventory. Merchants reconnect via /stores/wizard or the channel Connection tab — this page does not mutate credentials.",
"admin.storeReconnect.loadFailed": "Could not load store reconnect inventory.",
"admin.storeReconnect.refresh": "Refresh",
"admin.storeReconnect.description": "Companies with a connected store identity but missing or unusable API credentials (cutover credential gaps).",
"admin.storeReconnect.title": "Store reconnect inventory",
"admin.nav.storeReconnect": "Store reconnect",
"storeReconnect.wizardHint": "Prefer a step-by-step flow? Open Guided setup (/stores/wizard), or reconnect the channel below and Test Connection before syncing.",
"storeReconnect.wizardLabel": "Guided setup",
"storeReconnect.reviewsHint": "Reviews import cannot run until credentials are reconnected after migration. On the Connection tab: Save, then Test Connection.",
"storeReconnect.ordersHint": "Orders import cannot run until credentials are reconnected after migration. On the Connection tab: Save, then Test Connection.",
"productSync.directionTitle": "Products: Descrybe → store",
"productSync.outbound": "Descrybe → {channel}",
"productSync.outboundBody": "— pushes processed Descrybe products to the store (create or update matched remote products). Does not import the store catalog into Descrybe.",
"productSync.firstSync": "First sync",
"productSync.firstSyncBody": "— unmatched products are created in {channel}. Later syncs update products already linked by id or match strategy.",
"productSync.reSync": "Re-sync",
"productSync.reSyncBody": "— matched remote products can be overwritten with Descrybe content ({count} linked so far).",
"productSync.queued": "Product sync queued",
"productSync.live.queued": "Queued — waiting for worker",
"productSync.live.running": "Sync in progress",
"productSync.live.watching": "Watching sync status… counts appear when the run finishes.",
"productSync.live.success": "Sync finished: {total} total · {created} created · {updated} updated · {failed} failed · {skipped} skipped",
"productSync.live.partial": "Sync finished with some failures: {total} total · {created} created · {updated} updated · {failed} failed · {skipped} skipped",
"productSync.live.failed": "Sync failed{detail}.",
"productSync.live.timedOut": "Still running — refresh later for final status and counts.",
"productSync.live.ordersSuccess": "Orders sync finished ({status}).",
"productSync.live.reviewsSuccess": "Reviews sync finished ({status}).",
"productSync.retry": "Retry sync",
"productSync.lastStatus": "Last: {status}",
"productSync.dryRun": "Dry run",
"productSync.lastSyncAt": "Last product sync: {date}",
"productSync.noneYet": "No product sync has completed yet.",
"productSync.lastRun": "Last run: {total} total · {created} created · {updated} updated · {failed} failed · {skipped} skipped",
"productSync.needsReconnect": "Product sync cannot run until credentials are reconnected after migration. On the Connection tab: Save, then Test Connection.",
"productSync.scheduleTitle": "Automatic product sync schedule",
"productSync.scheduleHelp": "Like feed sync intervals: set how often Descrybe pushes products to the store, or pause the schedule. Manual queue still works while paused. Store webhooks are not used — updates are polled/queued only.",
"productSync.scheduleInterval": "Sync interval (hours)",
"productSync.scheduleIntervalHint": "1168 hours. Default is 6 hours when unset on the server.",
"productSync.schedulePause": "Pause automatic sync",
"productSync.schedulePauseHint": "Stops scheduled pushes only. You can still queue a product sync manually.",
"productSync.scheduleSave": "Save schedule",
"productSync.scheduleSaved": "Product sync schedule saved.",
"productSync.schedulePausedSaved": "Automatic product sync paused.",
"productSync.scheduleSaveFailed": "Could not save product sync schedule",
"productSync.schedulePausedBadge": "Schedule paused",
"productSync.scheduleActiveBadge": "Schedule active",
"productSync.scheduleNeedsConfig": "Save store connection first",
"productSync.scheduleAdminOnly": "Company admin required",
"productSync.delivery.title": "Updates use polling, not store webhooks",
"productSync.delivery.body": "Descrybe does not receive Shopify or WooCommerce webhooks. Product pushes run when you queue them or on the automatic schedule. This page watches progress by polling connection status — not via live store push events.",
"productSync.delivery.inboundNote": "Orders and reviews also use queued pulls (scheduled or manual), not live webhooks.",
"productSync.delivery.hubNote": "Store connectors sync on a schedule or when you queue a job — not via live store webhooks.",
"productSync.delivery.badge.manual": "Manual queue",
"productSync.delivery.badge.scheduled": "Scheduled every {hours}h",
"productSync.delivery.badge.scheduledDefault": "Scheduled (server default)",
"productSync.delivery.badge.paused": "Schedule paused",
"productSync.delivery.badge.webhooksOff": "Store webhooks: not available",
"productSync.scope.title": "What to sync",
"productSync.scope.hint": "Optional filters for this push only. Leave blank to sync the latest processed products up to the limit.",
"productSync.scope.status": "Status",
"productSync.scope.statusAll": "All statuses",
"productSync.scope.statusCompleted": "Completed",
"productSync.scope.statusNeedsReview": "Needs review",
"productSync.scope.statusProcessing": "Processing",
"productSync.scope.statusError": "Error",
"productSync.scope.category": "Category",
"productSync.scope.categoryPlaceholder": "Exact category name (optional)",
"productSync.scope.limit": "Max products",
"productSync.scope.products": "Specific products",
"productSync.scope.productsHint": "Optional. Search and select processed products to push only those.",
"productSync.scope.productsOverrideHint": "Selected products override status, category, and max-products filters for this sync.",
"productSync.scope.productsSearch": "Search products…",
"productSync.scope.productsLoading": "Loading products…",
"productSync.scope.productsEmpty": "No processed products found.",
"productSync.scope.productsSelected": "{count} selected",
"productSync.scope.productsSelectedList": "Selected products",
"productSync.scope.productsClear": "Clear selection",
"productSync.scope.productsMax": "Maximum {max} products",
"store.syncingLive": "Syncing…",
"files.recentUploads": "Recent uploads",
"files.colFileName": "File name",
"files.colKind": "Kind",
"files.colUploaded": "Uploaded",
"files.colRows": "Rows",
"files.loading": "Loading uploads…",
"files.empty": "No uploads yet.",
"products.filters.sortProducts": "Sort Products",
2026-08-22 18:51:17 +02:00
"products.table.options": "Options",
"access.restricted.title": "Access restricted",
"access.restricted.message": "Your company owner has turned off access to this area. Ask them to enable it if you need it.",
"access.restricted.featureHint": "Permission: {feature}",
"settings.permissions.action": "Permissions",
"settings.permissions.title": "Permissions for {email}",
"settings.permissions.description": "Choose what this teammate can open. Turning an area off hides it from their sidebar and blocks it in the API.",
"settings.permissions.ownerNotice": "The company owner always has full access and cannot be restricted.",
"settings.permissions.ownerOnly": "Only the company owner can change permissions.",
"settings.permissions.summary": "{allowed} of {total} areas allowed",
"settings.permissions.allowAll": "Allow all",
"settings.permissions.denyAll": "Deny all",
"settings.permissions.planLocked": "Not in your plan",
"settings.permissions.searchPlaceholder": "Search areas…",
"settings.permissions.noMatches": "No areas match that search.",
"settings.permissions.save": "Save permissions",
"settings.permissions.saved": "Permissions updated for {email}",
"settings.permissions.saveFailed": "Could not update permissions",
"settings.permissions.loadFailed": "Could not load permissions",
"settings.permissions.restrictedBadge": "Restricted",
"settings.permissions.restrictedHint": "{count} areas turned off",
"settings.tabLockedByAdmin": "Turned off by your company owner"
};