# Products page strings (English). key=value; merged into Resources/UiMessages.resx by tools/ui-strings.py.
# list
ui.products.sub=Everything you sell: editions, trials, releases, pricing and the key that signs its licenses.
ui.products.all=All products
ui.products.limit={0} of {1} products on your plan
ui.products.capTitle=You've reached your plan's product limit.
ui.products.capBody=Your plan includes {0} products. Creating another needs a higher plan.
ui.products.emptyTitle=No products yet
ui.products.emptyBody=A product is what you sell. Create one, add an edition, then issue your first license.
ui.products.create=Create product
ui.products.created={0} created
ui.products.editions=Editions
ui.products.trial=Trial
ui.products.trialOn={0}-day trial · {1}
ui.products.trialOff=No self-service trial
ui.products.signingKey=Signing key
ui.products.keyOwn=Per-product key
ui.products.keyWorkspace=Workspace key
ui.products.activeOfTotal={0} active of {1} issued
ui.products.nEditions={0} edition|{0} editions
ui.products.addEdition=Add edition
ui.products.copySlug=Copy slug
ui.products.editDetails=Edit name & description
ui.products.tab.editions=Editions
ui.products.tab.trials=Trials
ui.products.tab.releases=Releases
ui.products.tab.pricing=Pricing
ui.products.tab.signingKey=Signing key
ui.products.tab.messages=Messages
# new product
ui.products.newLead=A product is one thing you license — an app, a library or a service. You'll add editions and issue licenses against it.
ui.products.namePh=e.g. Acme Studio
ui.products.slug=Slug
ui.products.slugHint=Used by the SDK and the API (lower-case, letters, digits and dashes). Filled in from the name; edit it if you like. It can't change later.
ui.products.desc=Description
ui.products.descPh=Optional — what it is, for your team
ui.products.descHint=Internal only; customers never see it.
ui.products.genKey=Generate a signing key for this product
ui.products.genKeyHint=licenses for this product are then signed with their own key instead of the workspace key. Recommended for anything you ship separately.
ui.products.keyFailed=Product created, but the signing key couldn't be generated
ui.products.slugFixed=The slug ({0}) can't be changed — the SDK and the API refer to it.
# legacy feature templates
ui.products.legacy.title=Default feature templates
ui.products.legacy.badge=legacy
ui.products.legacy.body=Workspace-wide templates from before per-product editions. Editions on each product are the recommended way to define seats and features; these templates are kept for older integrations.
ui.products.legacy.empty=No templates.
ui.products.legacy.add=Add template
ui.products.legacy.editTitle=Edit template — {0}
ui.products.legacy.deleteTitle=Remove template {0}?
ui.products.legacy.deleteBody=Issued licenses keep their own features; only the template goes away.
ui.products.legacy.deleted=Template removed
ui.products.features=Features
ui.products.edit=Edit
# overview
ui.products.ofIssued=of {0} issued
ui.products.quickLinks=Next steps
ui.products.ql.quickstart=Developers quick start
ui.products.ql.quickstartD=Add the SDK to your app and see the first device activate.
ui.products.ql.releases=Releases & coverage
ui.products.ql.releasesD=Register releases and decide what each edition includes.
ui.products.ql.issueD=Create a license key for a customer of this product.
ui.products.ql.licenses=Licenses for this product
ui.products.ql.licensesD=Find, renew and support every license you've sold.
ui.products.trialSummary={0} days on the {1} edition with {2} seat(s). Anyone can request one with their work email.
ui.products.trialOffBody=Turn on a self-service trial so prospects can try before they buy.
ui.products.keyOwnBody=Licenses for this product are signed with their own key. Embed its public key in the app.
ui.products.keyWorkspaceBody=Licenses for this product are signed with the workspace key. Generate a per-product key if you ship this product separately.
ui.products.noEditionsShort=No editions yet — add one so you can issue licenses.
# editions
ui.products.noEditions=No editions yet
ui.products.noEditionsBody=An edition is a plan you sell — a name, a seat count and the features it unlocks. Add one to start issuing licenses.
ui.products.editionsHow=How editions work
ui.products.editionsHow1=Each edition is a template: when you issue a license you pick an edition, and its seats and features are copied onto the license. Changing an edition later only affects new licenses.
ui.products.editionsHow2=Features are key/value pairs the SDK exposes to your app (for example tier=pro or maxProjects=10). Credits included let an edition bundle a usage allowance.
ui.products.creditsIncluded=Credits included
ui.products.editEdition=Edit edition — {0}
ui.products.editionLead=A name, how many seats a license of this edition gets by default, and the features it unlocks.
ui.products.nameFixed=The name identifies the edition and can't be changed.
ui.products.nameHint=Short and lower-case works best, e.g. starter, pro, enterprise.
ui.products.seatsHint=Default seats per license; you can override it when issuing.
ui.products.featuresHint=Key/value pairs your app reads from the license, e.g. maxProjects = 10.
ui.products.creditsLead=Optional. Bundle a usage allowance with every license of this edition. Leave the allowance at 0 if this edition doesn't meter usage.
ui.products.allowance=Allowance
ui.products.allowanceHint=0 = no credits bundled.
ui.products.unit=Unit
ui.products.unitHint=Shown to customers, e.g. credits, renders, pages.
ui.products.cadence=Renews
ui.products.cad.once=Once (on issue)
ui.products.cad.monthly=Monthly
ui.products.cad.annual=Annually
ui.products.overage=When the allowance runs out
ui.products.ov.hardStop=Stop — the action is refused
ui.products.ov.soft=Allow — go negative and bill later
ui.products.ov.autoTopup=Top up automatically
ui.products.overageHint=Applies to licenses issued from this edition.
ui.products.snapshotNote=Licenses already issued keep the seats and features they were issued with — nothing changes for existing customers.
ui.products.editionAdded=Edition {0} added
ui.products.deleteEdition=Delete edition
ui.products.deleteEditionBody=Delete the {0} edition of {1}? You won't be able to issue new licenses of it.
ui.products.editionDeleted=Edition {0} deleted
ui.products.credits=credits
# trials
ui.products.trialTitle=Self-service trial
ui.products.trialLead=Let prospects try this product without talking to you. They request a trial with their work email and get a time-limited key by email.
ui.products.trialEnabled=Trials enabled
ui.products.trialEnabledD=anyone with a work email can request a trial key for this product.
ui.products.trialDays=Trial length (days)
ui.products.trialDaysHint=The key expires this many days after it's requested.
ui.products.trialTierHint=Which edition's seats and features a trial key gets.
ui.products.trialNoEditions=Add an edition first — trial keys are issued from one.
ui.products.trialSeatsHint=Seats on each trial key.
ui.products.trialSaved=Trial on — {0} days
ui.products.trialDisabled=Self-service trial turned off
ui.products.trialRequest=Request a trial
ui.products.trialRequestBody=Your website or app calls this public endpoint. The key is only ever emailed, never returned, so it's safe to call from a browser.
ui.products.trialHow=How trials work
ui.products.trialHow1=Personal mailbox providers are rejected, and one trial per email per product is issued. Trial licenses show in Licenses with a Trial badge.
ui.products.trialHow2=When a trial customer buys, issue a normal license — their app picks it up on the next launch.
# releases
ui.products.manageReleases=Manage in Releases & coverage
ui.products.moreReleases={0} more not shown.
ui.products.policyBody=Decide which releases a new license of each edition can use — one major, updates for a period, or a subscription.
ui.products.openPolicy=Open coverage policy
# pricing
ui.products.pricingTitle=Action costs
ui.products.pricingLead=Price the actions your app meters. When the app reports an action, Keyright charges this many credits to the license's pool.
ui.products.action=Action
ui.products.actionHint=The name your app sends, e.g. export.pdf or render.4k. Letters, digits, dots and dashes.
ui.products.creditsCol=Credits
ui.products.creditsHint=Charged per unit of the action. 0 makes it free but still counted.
ui.products.creditsNegative=Credits must be zero or more.
ui.products.pool=Pool
ui.products.poolHint=Leave blank to charge the license's default pool.
ui.products.defaultPool=default pool
ui.products.updated=Updated
ui.products.addCost=Add action cost
ui.products.editCost=Edit action cost — {0}
ui.products.costLead=Name an action and what it costs. Your app only sends the action name; prices live here so you can change them without shipping an update.
ui.products.noCosts=No action costs yet
ui.products.noCostsBody=Add an action and its price to start metering usage against credits.
ui.products.deleteCost=Remove the cost for {0}?
ui.products.deleteCostBody=The app will get "unknown action" for {0} until you add it again.
ui.products.costDeleted=Cost for {0} removed
ui.products.pricingHow=From your app
ui.products.pricingHow1=The SDK reports an action by name with the license key; Keyright looks up the price here and deducts it.
ui.products.pricingHow2=Use dryRun to check whether a customer can afford an action before doing the work.
ui.products.pricingCreditsBody=Grant, top up and inspect credit pools per license in Usage & credits.
# signing key
ui.products.currentKey=Current public key
ui.products.currentKeyBody=Embed this public key in your app so it can verify licenses, leases and offline files for this product.
ui.products.copyKey=Copy public key
ui.products.generateKey=Generate key
ui.products.keyGenerated=Signing key generated — embed the new public key in your app
ui.products.importKey=Import key
ui.products.importLead=Bring your own RSA key pair. Paste the PKCS#8 private key (base64, with or without the PEM header). It's encrypted at rest and never shown again.
ui.products.importReplaces=This replaces the current key.
ui.products.privateKey=Private key (PKCS#8, base64)
ui.products.privateKeyHint=openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -nocrypt
ui.products.importNote=Only the public key is kept visible here; the private key is stored encrypted.
ui.products.keyImported=Signing key imported
ui.products.rotateKey=Rotate key
ui.products.rotateBody=New licenses will be signed with a new key. Shipped apps must embed the new public key — until they do, licenses issued after the rotation won't verify. Licenses issued under the old key keep verifying as long as your app also embeds the previous public key.
ui.products.rotateNote=The retiring public key is kept in the "previous keys" list so you can ship it alongside the new one.
ui.products.keyRotated=Signing key rotated — ship the new public key
ui.products.previousKeys=Previous keys
ui.products.previousKeysBody=Public keys retired by a rotation. Keep embedding them in your app while customers still hold licenses signed under them.
ui.products.previousKeyN=Previous key {0}
ui.products.noPreviousKeys=The key has never been rotated.
ui.products.revocation=Revocation list
ui.products.revocationBody=A signed list of revoked license keys for this product. Ship it with offline builds so revoked keys are refused without an internet connection.
ui.products.downloadRevocation=Download revocation list
ui.products.revocationSaved=Revocation list downloaded
ui.products.revocationFailed=Couldn't download the revocation list
ui.products.keyHow=How signing works
ui.products.keyHow1=Every license, lease and offline file is signed by the server. Your app holds only the public key, so a license can't be forged or edited.
ui.products.keyHow2=A per-product key keeps products independent: rotating one doesn't touch the others, and a product you sell to a partner can carry its own key.
# messages
ui.products.msg.coming=Customer-facing wording per product is being built on the coverage track. The fields are shown so you can see what you'll be able to change.
ui.products.msg.title=Customer-facing wording
ui.products.msg.lead=The words your customers read in the portal and in the app when coverage, renewals and upgrades come up.
ui.products.msg.updatesTerm=What you call updates
ui.products.msg.updatesTermHint=e.g. updates, upgrades, maintenance — used in sentences like "Your license includes updates through …".
ui.products.msg.line=Version line name
ui.products.msg.lineHint=How a major version is named, e.g. "{0} 2". Placeholders: {product}, {major}.
ui.products.msg.renewUrl=Renew link
ui.products.msg.upgradeUrl=Upgrade link
ui.products.msg.urlHint=Shown in the app when a customer needs to renew or upgrade. Placeholder: {key}.
ui.products.msg.preview=What they'll read
ui.products.msg.previewLead=An example of a coverage sentence using the current wording.
ui.products.msg.previewNote=Dates render in the customer's locale.

ui.products.keyAdvanced=Advanced: rotate, import, previous keys, revocation list
