# Settings strings (English) for dash/settings.js. key=value; merged into Resources/UiMessages.resx by tools/ui-strings.py.
# Reused from core/resx (not repeated here): dash.tabSettings, dash.tabTeam, dash.sPlan, dash.sSave, dash.saved, dash.sWsName, dash.sUpload,
# dash.mName, dash.mEmail, dash.mRole, dash.mActions, dash.mAdded, dash.mEmailed, dash.mShareToken, dash.stEnabled, dash.planCurrent,
# dash.planContact, dash.tabProducts, dash.ovPerpetual, col.status, col.actions, col.expiry, ui.role.*, ui.roleHint, ui.remove, ui.done,
# ui.open, ui.docs, ui.details, ui.none, ui.locked, ui.seePlans, ui.selfHosted, ui.edition, ui.password, ui.inDays, ui.trialActive,
# ui.home.activeDevices, ui.nothingHere, ui.err.generic.
ui.settings.sub=Your workspace, team, sign-in, email alerts, plan, data and this instance.
ui.settings.subnav=Settings sections
ui.settings.tab.workspace=Workspace
ui.settings.tab.security=Sign-in & security
ui.settings.tab.email=Email & alerts
ui.settings.tab.data=Data
ui.settings.tab.instance=Instance
ui.settings.tab.branding=Branding
ui.settings.ownerOnly=Owners only.
ui.settings.managed=Managed by the operator.
ui.settings.saved=Saved
# workspace
ui.settings.ws.nameHint=Shown in the dashboard header, the customer portal and invite emails.
ui.settings.ws.logoUrl=Logo URL
ui.settings.ws.logoUrlHint=A public https:// image link — or upload a file below and we'll store a small copy inline.
ui.settings.ws.uploadHint=PNG, JPEG or SVG. The image is scaled down to 256 px on its longest side before saving.
ui.settings.ws.logoPreview=Logo preview
ui.settings.ws.noLogo=No logo yet — the workspace initial is shown instead.
ui.settings.ws.logoReady=Logo ready — click Save to keep it.
ui.settings.ws.logoFailed=Couldn't read that image
ui.settings.ws.notImage=Choose an image file (PNG, JPEG, SVG, WebP).
ui.settings.ws.savedBody=The header updates the next time the dashboard loads.
ui.settings.ws.checklist=Setup checklist
ui.settings.ws.checklistBody=The first-run checklist on the Home page walks a new workspace through product, edition, first license, SDK and store. You can bring it back at any time — nothing you've already set up is changed.
ui.settings.ws.rerun=Re-run setup checklist
ui.settings.ws.rerunBody=The checklist will show on Home again until every step is done or you dismiss it. Your products, licenses and settings are untouched.
ui.settings.ws.rerunDo=Show the checklist
ui.settings.ws.slug=Workspace id
ui.settings.ws.plan=Plan
ui.settings.ws.yourRole=Your role
# team
ui.settings.team.lead=Everyone who can sign in to this dashboard. Roles decide what each person can do; owners manage the team.
ui.settings.team.ownerOnlyBody=The member list and these controls are available to workspace owners.
ui.settings.team.invite=Invite member
ui.settings.team.inviteDo=Invite
ui.settings.team.inviteLead=Add a person to this workspace. They sign in with their email (password + authenticator, Google, GitHub or SSO — whatever this deployment offers).
ui.settings.team.emailHint=Optional, but needed for email sign-in and for sending the invitation.
ui.settings.team.noEmail=No email — token sign-in only
ui.settings.team.disabled=Disabled
ui.settings.team.joined=Added
ui.settings.team.empty=No team members yet
ui.settings.team.emptyBody=You're signing in with the admin token. Invite a member so people sign in with their own account — and so there is a named owner.
ui.settings.team.roles=What each role can do
ui.settings.team.signinTitle=How members sign in
ui.settings.team.signinBody=Members use the sign-in methods enabled for this deployment. Two-factor is required for password sign-in and self-enrols on first use.
ui.settings.team.conflict=That change isn't allowed
ui.settings.team.lastOwnerHint=The last enabled owner can't be demoted, disabled or removed, and you can't change your own role — make someone else an owner first.
ui.settings.team.roleChanged={0} is now {1}
ui.settings.team.enable=Enable
ui.settings.team.disable=Disable
ui.settings.team.disableTitle=Disable {0}?
ui.settings.team.disableBody=They won't be able to sign in or use their token until re-enabled. Nothing is deleted.
ui.settings.team.enabledToast={0} enabled
ui.settings.team.disabledToast={0} disabled
ui.settings.team.setPassword=Set password
ui.settings.team.pwLead=Give this member a dashboard password. Share it with them privately — it is shown once.
ui.settings.team.pwHint=At least 12 characters. Use Generate for a strong random one.
ui.settings.team.pwShort=Use at least 12 characters.
ui.settings.team.generate=Generate a strong password
ui.settings.team.mfaNote=Two-factor is required: on their first password sign-in they'll be asked to add the account to an authenticator app.
ui.settings.team.pwSet=Password set
ui.settings.team.pwOnceTitle=Share this password now — it won't be shown again.
ui.settings.team.pwOnceBody={0} signs in with their email and this password, then enrols two-factor on first use.
ui.settings.team.resetMfa=Reset two-factor
ui.settings.team.resetMfaBody=Use this when someone lost their authenticator. Their current enrolment is cleared; they'll be asked to set up a new one on their next password sign-in.
ui.settings.team.mfaResetDone=Two-factor reset for {0}
ui.settings.team.removeBody=Remove {0} from this workspace? Their sessions and token stop working immediately.
ui.settings.team.removeNote=This can't be undone. To block access temporarily, disable them instead.
ui.settings.team.removed={0} removed
ui.settings.team.token=Access token
ui.settings.team.tokenOnce=This token is shown once.
ui.settings.team.tokenOnceBody={0} was added as {1}. Copy the token now if you need to share it — it can't be retrieved later.
ui.settings.team.notEmailed=The invitation email could not be sent (email isn't configured or delivery failed) — share the token or set a password instead.
ui.settings.team.noEmailGiven=No email was given, so no invitation was sent — share the token or set a password.
ui.settings.role.owner=Everything, including the team, plan, billing and email settings.
ui.settings.role.admin=Manage products, editions, licenses, coverage, credits and integrations. Can't change the team or plan.
ui.settings.role.support=Day-to-day customer support: look up licenses, free seats, send portal links, add coverage. No issuing or revoking.
ui.settings.role.billing=Read everything plus the plan and billing pages. Can't change licenses.
ui.settings.role.viewer=Read-only access to every page.
# sign-in & security
ui.settings.sec.methods=Sign-in methods
ui.settings.sec.readOnly=Read-only
ui.settings.sec.leadSelf=Sign-in methods are configured with environment variables on the server and shown here as they are. Change them in your deployment and restart.
ui.settings.sec.leadSaas=Sign-in methods on the hosted service are configured by the operator. This shows what's available to your team.
ui.settings.sec.method=Method
ui.settings.sec.off=Off
ui.settings.sec.howTo=How it's enabled
ui.settings.sec.password=Email + password with two-factor
ui.settings.sec.passwordHow=Built in. Owners set a member's password from the Team page; two-factor self-enrols on first sign-in.
ui.settings.sec.google=Google
ui.settings.sec.github=GitHub
ui.settings.sec.oauthHow=Native OAuth on your own domain. Set the client id and secret, plus the public base URL used for the callback.
ui.settings.sec.supabase=Hosted accounts (Supabase Auth)
ui.settings.sec.supabaseHow=Consumer identity layer for the hosted service: email magic links and social sign-in. Needs the project URL, JWT secret and anon key.
ui.settings.sec.sso=Single sign-on (OIDC)
ui.settings.sec.ssoHow=Your identity provider issues an ID token the dashboard exchanges for a session. Set the issuer and audience, and either a public key or the provider's authority (JWKS).
ui.settings.sec.selfSignup=Self-service sign-up
ui.settings.sec.selfSignupHow=Lets new workspaces sign up on the free plan. Needs hosted accounts and the plan key.
ui.settings.sec.ssoLockTitle=Single sign-on is an Enterprise feature.
ui.settings.sec.ssoLockBody=The KEYRIGHT_SSO_* settings are ignored until the instance license includes sso. Everything else on this page works as shown.
ui.settings.sec.mfa=Two-factor authentication
ui.settings.sec.mfaBody=Two-factor is mandatory for password sign-in: each member adds the account to an authenticator app the first time they sign in, and enters a 6-digit code every time after that. Social and SSO sign-ins rely on the provider's own second factor.
ui.settings.sec.mfaReset=Lost authenticator? An owner can reset a member's two-factor from the
ui.settings.sec.tokens=Access tokens
ui.settings.sec.tokensBody=Every member also has a personal access token (shown once when invited) for automation and the CLI. Disabling or removing the member revokes it. The admin token from the environment is the root credential — keep it out of day-to-day use.
ui.settings.sec.docsLink=Self-hosting guide: sign-in configuration
# email & alerts
ui.settings.email.ownerOnlyBody=Email delivery settings and alert routing are available to workspace owners.
ui.settings.email.smtp=Email delivery (SMTP)
ui.settings.email.smtpLead=Used for invitations, portal sign-in links, renewal notices and the alerts below. When this is off, the server's own mail settings are used if it has any; otherwise emails are only logged.
ui.settings.email.enabled=Use these SMTP settings
ui.settings.email.enabledBody=off: fall back to the server's KEYRIGHT_SMTP_* settings.
ui.settings.email.host=SMTP host
ui.settings.email.port=Port
ui.settings.email.user=Username
ui.settings.email.password=Password
ui.settings.email.pwSet=A password is stored. Leave blank to keep it; type a new one to replace it.
ui.settings.email.pwUnset=No password stored. Leave blank if your server doesn't need one.
ui.settings.email.from=From address
ui.settings.email.fromName=From name
ui.settings.email.ssl=Use TLS
ui.settings.email.sslBody=on for port 465 or STARTTLS on 587; off only for an internal relay.
ui.settings.email.savedBody=Send a test email to confirm delivery works.
ui.settings.email.test=Send a test email
ui.settings.email.testLead=Sends a short message with the saved settings so you can confirm delivery before relying on alerts.
ui.settings.email.testTo=Send to
ui.settings.email.sendTest=Send test email
ui.settings.email.testSent=Test email sent to {0}.
ui.settings.email.testSentBody=Check the inbox (and spam folder).
ui.settings.email.testFailed=The test email couldn't be sent.
ui.settings.email.testFailedHint=Check the host, port, TLS setting and credentials, then save and try again.
ui.settings.email.rules=Alert rules
ui.settings.email.rulesNote=Each row saves separately.
ui.settings.email.rulesLead=Pick who hears about what. Recipients are email addresses separated by commas. Recurring conditions are sent once, not on every check.
ui.settings.email.event=Event
ui.settings.email.recipients=Recipients
ui.settings.email.enableFor=Send alerts for {0}
ui.settings.email.recipientsFor=Recipients for {0}
ui.settings.email.recipientsRequired=Add at least one recipient to enable this alert.
ui.settings.email.ruleSaved=Alert rule for "{0}" saved.
ui.settings.email.howTitle=How alerts are delivered
ui.settings.email.how1=An enabled rule emails its recipients when the event happens. Instance-level events (license, database, scheduled jobs) are the ones to route to on-call.
ui.settings.email.how2=With SMTP switched off here, delivery uses the server's environment settings:
# plan & billing
ui.settings.plan.lead=What your plan includes and how much of it you're using. Meters turn amber at 80% and red at the limit.
ui.settings.plan.selfTitle=Quotas come from this instance's license.
ui.settings.plan.selfBody=A self-hosted instance has no hosted plan: limits and features are set by the Keyright license installed on the server. See
ui.settings.plan.activeLicenses=Active licenses
ui.settings.plan.atLimit=At the limit — upgrade to add more
ui.settings.plan.pctUsed={0}% of your plan
ui.settings.plan.noLimit=No limit on your plan
ui.settings.plan.limitFromLicense=Limit set by the instance license
ui.settings.plan.whatsIncluded=What's included
ui.settings.plan.included=Included
ui.settings.plan.unlimited=Unlimited
ui.settings.plan.nDays={0} day|{0} days
ui.settings.plan.f.coverage=Release coverage
ui.settings.plan.f.eventWebhooks=Event webhooks
ui.settings.plan.f.airgap=Offline (air-gapped) credit blocks
ui.settings.plan.f.sso=Single sign-on
ui.settings.plan.f.whitelabel=White-label branding
ui.settings.plan.f.resellers=Resellers
ui.settings.plan.f.history=Usage history retained
ui.settings.plan.f.creditBlock=Largest offline credit block
ui.settings.plan.catalogue=Plans
ui.settings.plan.noPlans=No plans are published
ui.settings.plan.billingCycle=Billing cycle
ui.settings.plan.monthly=Monthly
ui.settings.plan.annual=Annual
ui.settings.plan.perMonth={0} / month
ui.settings.plan.perYear={0} / year
ui.settings.plan.free=Free
ui.settings.plan.contactPricing=Custom pricing
ui.settings.plan.current=Current plan
ui.settings.plan.popular=Popular
ui.settings.plan.upgrade=Upgrade to {0}
ui.settings.plan.contactUs=Contact us
ui.settings.plan.lowerPlan=Contact us to move to a smaller plan.
ui.settings.plan.checkoutFailed=Checkout couldn't be started — try again or contact support.
ui.settings.plan.checkoutNote=Upgrades open a secure checkout; your plan changes as soon as the subscription starts.
ui.settings.plan.devicesIncluded=Up to {0} active devices
ui.settings.plan.devicesUnlimited=Unlimited active devices
ui.settings.plan.productsIncluded=Up to {0} products
ui.settings.plan.productsUnlimited=Unlimited products
# data
ui.settings.data.exportTitle=Export everything
ui.settings.data.exportBody=Download every product, edition, license, activation and coverage record in this workspace as one JSON file. Use it for backups, audits or moving to another instance.
ui.settings.data.exportNote=The export contains customer names and license keys — store it as carefully as a database backup. Per-product and CSV exports are on the Licenses page.
ui.settings.data.export=Export everything (JSON)
ui.settings.data.exported=Export downloaded
ui.settings.data.retentionTitle=Usage history
ui.settings.data.retention=Usage and credit history is kept for {0} days on your plan; older entries are trimmed automatically.
ui.settings.data.retentionUnlimited=Usage and credit history is kept indefinitely on this instance.
ui.settings.data.backupTitle=Backups
ui.settings.data.backupSelf=Back up the Postgres database on a schedule and keep the KEYRIGHT_KEK and signing key alongside it — without them an encrypted backup can't be restored.
ui.settings.data.backupSaas=The hosted service is backed up by the operator. Keep your own export for independent records.
ui.settings.data.backupDocs=Backup & restore guide
# instance
ui.settings.inst.license=Instance license
ui.settings.inst.managedBody=This is the hosted service: the instance license, database and upgrades are looked after by the operator. Your plan and quotas are on Plan & billing.
ui.settings.inst.diagnostics=Diagnostics
ui.settings.inst.refresh=Refresh
ui.settings.inst.docsLink=Self-hosting guide
ui.settings.inst.phase.off=Not enforced
ui.settings.inst.phase.active=Active
ui.settings.inst.phase.expiring=Expiring
ui.settings.inst.phase.grace=In grace
ui.settings.inst.phase.gated=Gated
ui.settings.inst.p.off=License enforcement is off on this build — nothing to do.
ui.settings.inst.p.active=Your license is valid and expires {0}.
ui.settings.inst.p.activePerpetual=Your license is valid and does not expire.
ui.settings.inst.p.expiring=Your license expires in {0} days. Install the renewed license before then — a paid license gets a short read-only grace window after expiry; a trial stops immediately.
ui.settings.inst.p.trialEnding=Your trial ends in {0} days. When it ends, runtime validation and provisioning stop until a paid license is installed.
ui.settings.inst.p.grace=Your license has expired. Customer apps keep validating, but the dashboard is read-only for {0} more days (until {1}). Install the renewed license to lift this.
ui.settings.inst.p.gated=No valid license: customer apps can't validate and nothing can be provisioned. Install a license and restart to resume.
ui.settings.inst.licensee=Licensed to
ui.settings.inst.graceUntil=Grace until
ui.settings.inst.enforced=Enforced
ui.settings.inst.yes=Yes
ui.settings.inst.no=No
ui.settings.inst.quotaLicenses=Active license quota
ui.settings.inst.quotaProducts=Product quota
ui.settings.inst.runtime=Customer validation
ui.settings.inst.running=Running
ui.settings.inst.blocked=Stopped
ui.settings.inst.writes=Provisioning
ui.settings.inst.allowed=Allowed
ui.settings.inst.readOnly=Read-only
ui.settings.inst.featuresNote=Features (SSO, white-label, offline credits) and quotas come from this license and apply while it is valid — through the grace window for a paid license.
ui.settings.inst.install=Install or renew a license
ui.settings.inst.installLead=Delta1 issues your license as a small JSON file. Installing it takes a restart, no redeploy.
ui.settings.inst.step1=Save the file on the server, or keep its contents handy.
ui.settings.inst.step2=Set KEYRIGHT_SELF_LICENSE_FILE to the file path — or KEYRIGHT_SELF_LICENSE to the JSON itself.
ui.settings.inst.step3=Restart the service, then come back here to confirm the new expiry.
ui.settings.inst.installNoUi=Installing a license from this screen isn't available yet — use the environment variable.
ui.settings.inst.version=Version
ui.settings.inst.uptime=Uptime
ui.settings.inst.uptimeD={0}d {1}h
ui.settings.inst.uptimeH={0}h {1}m
ui.settings.inst.uptimeM={0} min
ui.settings.inst.serverTime=Server time
ui.settings.inst.database=Database
ui.settings.inst.reachable=Reachable
ui.settings.inst.unreachable=Unreachable
ui.settings.inst.migrations=Schema
ui.settings.inst.pendingN={0} pending migrations — restart to apply
ui.settings.inst.upToDate=Up to date
ui.settings.inst.licensePhase=License phase
ui.settings.inst.mode=Mode
ui.settings.inst.modeOperator=Multi-tenant (operator)
ui.settings.inst.entitlements=Entitlements
ui.settings.inst.smtp=Email delivery
ui.settings.inst.configured=Configured
ui.settings.inst.notConfigured=Not configured
ui.settings.inst.alertRules=Alert rules
ui.settings.inst.nRules={0} rule enabled|{0} rules enabled
ui.settings.inst.errors24h=Server errors alerted (24h)
ui.settings.inst.diagNote=This check also answers while the instance is gated, so it's the first place to look when something is wrong. Quote the version when contacting support.
# branding
ui.settings.brand.lead=How the dashboard and customer portal are branded right now. Branding is set on the server, so this page is a preview.
ui.settings.brand.custom=Customised
ui.settings.brand.default=Keyright default
ui.settings.brand.noLogo=No logo set
ui.settings.brand.name=Product name
ui.settings.brand.company=Company
ui.settings.brand.logo=Logo
ui.settings.brand.color=Accent colour
ui.settings.brand.support=Support link
ui.settings.brand.lockTitle=White-label is an Enterprise feature.
ui.settings.brand.lockBody=The KEYRIGHT_BRAND_* settings are ignored until the instance license includes whitelabel; customers see Keyright branding until then.
ui.settings.brand.howTitle=How to change it
ui.settings.brand.howSelf=Set these environment variables on the server (or the Helm brand.* values) and restart:
ui.settings.brand.howSaas=On the hosted service, white-label branding is configured by the operator for Enterprise workspaces — contact support to set it up. The variables used are:
ui.settings.brand.restartNote=Changes take effect after a restart. The colour accepts any CSS colour; the logo should be a public https:// image or SVG.
ui.settings.brand.workspaceLogoNote=Looking for your own workspace logo (shown in the header and invites)? That's on
