{ "common": { "appName": "PieCed", "tagline": "AI Platform", "login": "Sign In", "logout": "Sign Out", "dashboard": "Dashboard", "admin": "Admin", "loading": "Loading…", "language": "Language", "cancel": "Cancel", "save": "Save", "error": "An error occurred", "register": "Register", "team": "Team" }, "login": { "title": "PieCed Portal", "subtitle": "Sign in to manage your AI assistant", "button": "Continue with ZITADEL", "footer": "Hosted on-premises in Switzerland", "noAccount": "No account yet?", "register": "Create an account" }, "register": { "title": "Create your account", "subtitle": "Set up your Swiss-hosted AI assistant", "companyName": "Company Name", "companyNamePlaceholder": "Acme GmbH", "givenName": "First Name", "familyName": "Last Name", "email": "Email Address", "submit": "Register", "hasAccount": "Already have an account?", "footer": "Your data is hosted exclusively on-premises in Switzerland.", "successTitle": "Registration received", "successDescription": "You will receive an invitation email with a link to set your password and verify your email address. Once completed, you can sign in to set up your AI assistant.", "goToLogin": "Go to Sign In", "duplicateDomain": "An account for the email domain {domain} is already registered. Please contact your company administrator to be invited, or reach out to PieCed IT support if you believe this is in error.", "individualToggle": "Register as an individual", "individualHint": "Tick this if you're not registering on behalf of a company. Your account will be set up as a personal workspace.", "accountTypeLabel": "Account type", "personalCardTitle": "Personal", "personalCardDescription": "For yourself.", "companyCardTitle": "Company", "companyCardDescription": "For your business or team." }, "onboarding": { "loading": "Loading status…", "welcomeTitle": "Set up your AI assistant", "welcomeDescription": "In a few steps, you'll have your own AI assistant — hosted exclusively in Switzerland, fully under your control.", "welcomeFeature_swissHosted": "Hosted on-premises in Switzerland — your data never leaves the country", "welcomeFeature_privacy": "No data shared with third parties — complete privacy", "welcomeFeature_customizable": "Fully customizable personality, packages, and integrations", "getStarted": "Get started", "configureTitle": "Configure your assistant", "configureDescription": "Give your assistant a name and personality. You can always change this later.", "agentName": "Agent Name", "soulMd": "Personality (SOUL.md)", "soulMdHint": "This defines how your assistant behaves. Markdown format. You can edit this later.", "agentsMd": "Agent Instructions (AGENTS.md)", "agentsMdHint": "Defines what your assistant does on session start. Optional — defaults work well for most setups.", "toolsMd": "Available Tools (TOOLS.md)", "toolsMdHint": "Auto-generated based on your selected packages. This file is managed automatically.", "advancedConfig": "Advanced Configuration", "packages": "Packages", "packagesHint": "Optional integrations. Packages requiring credentials will ask for them inline. You can also enable these later.", "billingTitle": "Billing information", "billingDescription": "We need your billing address to set up invoicing. A payment provider will be integrated in the future.", "billingCompany": "Company", "billingStreet": "Street", "billingPostalCode": "Postal Code", "billingCity": "City", "billingCountry": "Country", "billingNotes": "Notes", "billingNotesPlaceholder": "Any notes about billing (PO number, VAT ID, preferred payment method, etc.)", "confirmTitle": "Review & submit", "confirmDescription": "Please review your setup. Your request will be reviewed by our team before provisioning.", "confirmNote": "After submission, our team will review your request and billing details. You'll receive access once approved — typically within one business day.", "credentialsProvided": "Credentials provided", "submitRequest": "Submit request", "back": "Back", "next": "Next", "pendingTitle": "Request submitted", "pendingDescription": "Your onboarding request has been submitted and is awaiting review by our team. You'll receive access once approved — typically within one business day.", "rejectedTitle": "Request not approved", "rejectedDescription": "Unfortunately, your onboarding request was not approved. Please contact us for more information.", "provisioningTitle": "Setting up your instance", "provisioningDescription": "Your AI assistant is being provisioned. This usually takes a few minutes.", "phase": "Phase", "readyTitle": "Your assistant is ready!", "readyDescription": "Your AI assistant has been provisioned and is running. You can now manage it from the dashboard.", "goToDashboard": "Go to Dashboard", "submittedAt": "Submitted", "instanceName": "Instance name", "instanceNamePlaceholder": "e.g. Production, Dev, Sales", "instanceNameHint": "Optional human-readable name to distinguish this instance from others on your dashboard. Leave blank to use your company name.", "validationError": "Please fix the errors before submitting.", "validationErrorsTitle": "Some required fields are missing or invalid:", "reviewInstanceDefault": "(default — uses company name)", "reviewNoPackages": "None selected", "reviewBillingTo": "Billing to", "reviewContactEmail": "Contact email", "editRequestTitle": "Edit your request", "editRequestDescription": "Adjust the configuration before our team reviews it.", "editRequest": "Edit", "cancelRequest": "Cancel request", "cancelRequestConfirm": "Yes, cancel request", "cancelConfirmRequestTitle": "Cancel this request?", "cancelConfirmRequestDescription": "Your pending request will be marked as cancelled and removed from the review queue. You can submit a new request at any time.", "cancelFailed": "Could not cancel request.", "cancelledTitle": "Request cancelled", "cancelledDescription": "You cancelled this request before it was processed. No instance was created.", "dismiss": "Dismiss", "dismissFailed": "Could not dismiss.", "rejectionReason": "Reason given", "saveChanges": "Save changes" }, "dashboard": { "title": "Dashboard", "welcome": "Welcome back, {name}", "instanceStatus": "Instance Status", "usage": "Usage", "packages": "Packages", "noInstance": "No instance provisioned yet.", "comingSoon": "Detailed view coming in Session 6.2", "noInstanceDescription": "Set up your AI assistant instance to get started with PieCed IT.", "manage": "Manage instance & packages", "instances": "Your instances", "inflightRequests": "In-flight requests", "createInstance": "Create new instance", "createInstanceDescription": "Provision an additional AI assistant instance for your organization. The request will be reviewed by an administrator before the instance is created.", "noAccessNoInstances": "Your organization doesn't have any instances yet. Please ask the organization owner to set one up.", "noAssignmentsTitle": "No instances assigned", "noAssignmentsDescription": "Your organization has instances, but you haven't been granted access to any of them. Please ask your organization owner to assign you to an instance.", "noInstancesYetTitle": "No instances yet", "noInstancesYetDescription": "Your organization doesn't have any instances yet. Please ask your organization owner to set one up." }, "tenantDetail": { "agent": "Agent", "packages": "Packages", "workspaceFiles": "Workspace Files", "notFound": "Tenant not found.", "usage": "Usage & Spend", "provisioned": "Provisioned", "assignedUsers": "Assigned users", "subscriptionTitle": "Subscription", "subscriptionDescriptionActive": "Cancel your subscription if you no longer need this assistant. Your data will be preserved and you can resume anytime.", "subscriptionDescriptionSuspended": "Your subscription is cancelled. Resume to bring the assistant back online.", "cancelSubscription": "Cancel subscription", "cancelSubscriptionConfirm": "Yes, cancel", "resumeSubscription": "Resume subscription", "cancelConfirmTitle": "Cancel this subscription?", "cancelConfirmDescription": "Your assistant will become unavailable. You can resume anytime — your data is preserved.", "cancelConfirmBullet1": "Workspace files (SOUL.md, AGENTS.md) are kept", "cancelConfirmBullet2": "Package credentials remain stored", "cancelConfirmBullet3": "Billing information is kept on file", "subscriptionUpdateFailed": "Could not update subscription.", "suspendedTitle": "Subscription cancelled", "suspendedDescription": "Your assistant is paused. Configuration and data are preserved. Use the Resume control at the bottom of this page to bring it back online." }, "usage": { "inputTokens": "Input Tokens", "outputTokens": "Output Tokens", "totalSpend": "Total Spend", "totalCost": "Total Cost", "budget": "Budget", "noLimit": "No limit", "last30Days": "Last 30 Days", "noData": "No usage data available.", "dailyBreakdown": "Daily Breakdown", "requests": "requests" }, "workspace": { "save": "Save", "placeholder": "Enter content for {file}…", "readonlyNote": "This file is auto-generated and cannot be edited manually.", "seedingNote": "Workspace files are seeded on first boot. Updating on an existing instance triggers a ConfigMap update and pod restart." }, "packages": { "categories": { "channels": "Channels", "skills": "Skills" }, "enable": "Enable", "disable": "Disable", "enableAndSave": "Enable & Save", "configure": "Configure", "requiresApiKey": "Requires API key", "missingFields": "Please fill in all required fields.", "status": { "pending": "Pending", "active": "Active", "error": "Error" }, "telegram": { "description": "Connect your AI assistant to a Telegram bot.", "botTokenLabel": "Telegram Bot Token", "botTokenPlaceholder": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11", "instructions": "1. Open @BotFather on Telegram\n2. Send /newbot and follow the prompts\n3. Copy the bot token provided", "disclaimer": "I confirm I own this Telegram bot and authorize PieCed IT to connect it to my AI assistant." }, "discord": { "description": "Connect your AI assistant to a Discord server via a bot.", "botTokenLabel": "Discord Bot Token", "botTokenPlaceholder": "MTAxNjQ0OTk2NjAz...", "instructions": "1. Go to discord.com/developers/applications\n2. Create a new application and add a bot\n3. Copy the bot token", "disclaimer": "I confirm I own this Discord bot and authorize PieCed IT to connect it to my AI assistant." }, "email": { "description": "Enable your AI assistant to send and receive email.", "smtpHostLabel": "SMTP Host", "smtpHostPlaceholder": "smtp.example.com", "smtpUserLabel": "SMTP Username", "smtpUserPlaceholder": "user@example.com", "smtpPasswordLabel": "SMTP Password", "smtpPasswordPlaceholder": "••••••••", "imapHostLabel": "IMAP Host", "imapHostPlaceholder": "imap.example.com", "instructions": "Provide SMTP and IMAP credentials. The assistant uses these to send and monitor messages.", "disclaimer": "I confirm I am authorized to use these email credentials and that PieCed IT may access this mailbox." }, "webSearch": { "description": "Give your AI assistant the ability to search the web." }, "documentProcessing": { "description": "Enable document parsing, summarization, and extraction." }, "statusEnabled": "enabled", "statusDisabled": "disabled" }, "admin": { "title": "Platform Admin", "subtitle": "Manage onboarding requests and tenant lifecycle", "allTenants": "Tenants", "noTenants": "No tenants provisioned yet.", "noAccess": "Insufficient permissions for this view.", "name": "Name", "displayName": "Display Name", "phase": "Phase", "packages": "Packages", "created": "Created", "manage": "Manage", "requests": "Requests", "pendingRequests": "Pending Requests", "approve": "Approve", "reject": "Reject", "reApprove": "Re-approve", "company": "Company", "contact": "Contact", "agentName": "Agent", "status": "Status", "submitted": "Submitted", "updated": "Updated", "actions": "Actions", "noRequests": "No requests found.", "loadingRequests": "Loading requests…", "approveConfirm": "Approve this request and start provisioning?", "rejectConfirm": "Reject this request?", "rejectTitle": "Reject request", "adminNotesLabel": "Notes (optional)", "adminNotesPlaceholder": "Reason for rejection…", "cancelAction": "Cancel", "confirmReject": "Reject", "viewTenant": "View", "filter_all": "All", "filter_pending": "Pending", "filter_provisioning": "Provisioning", "filter_approved": "Approved", "filter_rejected": "Rejected", "totalTenants": "Total", "running": "Running", "provisioning": "Provisioning", "errors": "Errors", "suspend": "Suspend", "resume": "Resume", "suspended": "Suspended", "suspendedBadge": "SUSPENDED", "deleteTenant": "Delete", "deleteTitle": "Delete tenant", "deleteWarning": "This will permanently delete the tenant, its namespace, secrets, and all associated data. This action cannot be undone.", "confirmDelete": "Delete permanently", "loadingTenants": "Loading tenants…", "filter_deleted": "Deleted", "filter_active": "Active", "health": "Health", "serviceHealth": "Service Health", "vllmDescription": "GPU inference engine", "litellmDescription": "LLM proxy & spend tracking", "tenantOverview": "Tenant Overview", "spendOverview": "Spend Overview", "globalSpend": "Global Spend (CHF)", "activeTenants": "Active Tenants", "tenantsWithSpend": "tenants with recorded spend", "refresh": "Refresh", "healthUnavailable": "Health data unavailable.", "loadingHealth": "Loading health data…", "statusHealthy": "Healthy", "statusDown": "Down", "spendChf": "Spend (CHF)" }, "channelUsers": { "title": "Authorized Users", "description": "Manage which users can interact with your assistant on each channel. Add their numeric user ID to authorize access.", "users": "users", "placeholder": "Enter numeric user ID…", "add": "Add", "remove": "Remove", "alreadyAdded": "This user ID is already authorized.", "telegramIdHelp": "To find your Telegram user ID:\n1. Open Telegram and message @userinfobot\n2. It instantly replies with your numeric ID\n3. Enter that number here", "discordIdHelp": "To find your Discord user ID:\n1. Enable Developer Mode in Discord settings (Advanced)\n2. Right-click your name → Copy User ID\n3. Enter that number here", "emailIdHelp": "Enter the email address that should be authorized to interact with the assistant." }, "team": { "title": "Team", "description": "Manage members of your organization. Invite colleagues and assign them to instances.", "inviteSectionTitle": "Invite a member", "membersSectionTitle": "Members", "noMembers": "No members yet.", "you": "You", "noRole": "no role", "givenName": "First name", "familyName": "Last name", "email": "Email", "role": "Role", "roleUser": "User (read-only, must be assigned to instances)", "roleOwner": "Owner (full access to all instances)", "roleHint": "Owners can manage instances, billing, and team members. Users can only view instances they've been assigned to.", "inviteButton": "Send invitation", "inviteSent": "Invitation sent. The user will receive an email with a link to set their password.", "inviteUserExists": "A user with this email is already registered.", "changeRole": "Change role", "roleUpdated": "Role updated.", "roleUpdateFailed": "Could not update role.", "cancel": "Cancel", "save": "Save", "selfChangeBlocked": "You cannot change your own role." }, "assignments": { "loading": "Loading assignments…", "noneAssigned": "No users are assigned to this instance yet.", "noCandidates": "No team members available to assign. Invite users from the Team page first.", "pickUser": "Select a user…", "assign": "Assign", "revoke": "Remove" }, "countries": { "CH": "Switzerland", "DE": "Germany", "AT": "Austria", "FR": "France", "IT": "Italy", "LI": "Liechtenstein" }, "phase": { "Pending": "Pending", "Provisioning": "Provisioning", "Running": "Running", "Ready": "Ready", "Suspended": "Suspended", "Error": "Error", "Deleting": "Deleting", "Reconfiguring": "Reconfiguring" }, "warnings": { "oneTooltip": "1 warning", "manyTooltip": "{count} warnings" } }