{"common":{"actions":{"tryAgain":"Try again","goHome":"Go home","reconnectGithub":"Reconnect GitHub"},"auth":{"requestAccess":"Request access","enterDashboard":"Enter dashboard","requestEarlyAccess":"Request early access","signOut":"Sign out","expiredTitle":"Your GitHub access expired","expiredDescription":"Reconnect to continue.","connectingGithub":"Connecting to GitHub"},"releaseChannels":{"canary":"Preview","beta":"Beta","stable":"Stable"},"branches":{"main":"Main","develop":"Develop","featureWildcard":"feature/*"},"time":{"today":"Today","yesterday":"Yesterday","todayAt":"Today at {time}","yesterdayAt":"Yesterday at {time}"},"timeRanges":{"today":"Today","days7":"7 days","days30":"30 days","days90":"90 days"},"timeRangePhrases":{"today":"Today","last7Days":"The last 7 days","last30Days":"The last 30 days","last90Days":"The last 90 days","recently":"Recently"},"labels":{"versionLabel":"Version {version}","downloadsCount":"{count} downloads"},"selected":"Selected","unknown":"Unknown","unknownUser":"Unknown user","unknownEmail":"unknown@example.com","emptyValue":"-","apiErrors":{"methodNotAllowed":"Method not allowed","onlyPostAllowed":"Only POST requests allowed","invalidProjectId":"Invalid projectid","projectIdIsRequired":"Project ID is required","projectNotFound":"Project not found","notFound":"Not found","invalidProjectIdFormat":"Invalid project ID format","invalidProjectIdOrMemberId":"Invalid projectid or memberid","invalidBuildId":"Invalid buildid","invalidReleaseId":"Invalid releaseid","invalidStore":"Invalid store","invalidSlug":"Invalid slug","invalidParameters":"Invalid parameters","invalidRequest":"Invalid request","invalidToken":"Invalid token","invalidRequestType":"Invalid request type.","invalidBody":"Invalid body","invalidRequestBody":"Invalid request body","invalidFieldExpectedString":"Invalid {field}: expected string","failedToLoadReleaseEvents":"Failed to load release events","failedToMutateRelease":"Failed to mutate release","failedToLoadReleaseDetail":"Failed to load release detail","failedToLoadReleaseHistory":"Failed to load release history","defaultVersion":"0.0.0","stableChannel":"Stable","invalidEnvVars":"Invalid envvars","invalidSha":"Invalid sha","invalidChannel":"Invalid channel","invalidChannelId":"Invalid channelid","invalidChannelName":"Invalid channel name","failedToPromoteChannel":"Failed to promote channel","invalidBrowser":"Invalid browser","stableToPreviewRequiresRollback":"Stable→preview requires rollback=true","invalidRole":"Invalid role","githubUserNotFound":"GitHub user not found","githubUsernameRequired":"Githubusername required","invalidGithubUsername":"Invalid GitHub username","emailNotAvailableForGithubUser":"Email not available for this GitHub user","accessTokenRequired":"Access token is required.","installationIdRequired":"Installation ID is required.","githubAppCredentialsMissing":"GitHub App credentials are missing.","installationTokenRequired":"Installation token is required.","memberAlreadyExists":"Member already exists","inviteEmailRequired":"Enter an email address to send the invitation","inviteNotFound":"Invitation not found","memberNotFound":"Member not found","memberIdRequired":"Memberid required","cannotRemoveOwner":"Owner can't be removed","cannotChangeOwnerRole":"Owner role can't be changed","settingsJsonNotFound":"settings.json not found","iconNotFound":"Icon not found","iconBase64Required":"iconBase64 (data URL) required","invalidIconBase64Payload":"Invalid iconBase64 payload","iconTooLargeUnder5Mb":"Icon too large. Please upload an image under 5MB.","screenshotsTooMany":"Too many screenshots. Max {max}.","screenshotsInvalidType":"Screenshots must be PNG images.","screenshotTooLarge":"Screenshot too large. Please upload an image under 2MB.","noBuildWorkflow":"No build workflow","noPromoteWorkflow":"No promote workflow","failedToResolveBuildWorkflow":"Failed to resolve build workflow","failedToResolveReleasesWorkflow":"Failed to resolve releases workflow","failedToResolveBuildsWorkflow":"Failed to resolve builds workflow","rateLimitExceeded":"Rate limit exceeded","tooManyRequests":"Too many requests","requestTooLarge":"Request too large","csrfValidationFailed":"CSRF validation failed","notAuthenticated":"Not authenticated","githubConnectionExpired":"Your GitHub connection expired. Reconnect GitHub to continue.","workflowNotFound":"Workflow not found","forbiddenWorkflow":"Forbidden workflow","missingSignature":"Missing signature","invalidSignature":"Invalid signature","missingRequiredParameters":"Missing required parameters","missingProjectId":"Missing projectid","errorFetchingProjects":"Error fetching projects","errorFetchingProject":"Error fetching project","unknownError":"Unknown error","webhookSecretNotConfigured":"Webhook secret not configured","internalServerError":"Internal server error","internalServerErrorWithPeriod":"Internal server error.","missingChromeCredentials":"Missing Chrome credentials","missingAmoCredentials":"Missing AMO credentials","missingEdgeCredentials":"Missing Edge credentials","oauthTokenExchangeFailed":"OAuth token exchange failed: {details}","cwsApiCheckFailed":"CWS API check failed: {details}","amoApiCheckFailed":"AMO API check failed: {details}","azureTokenExchangeFailed":"Azure token exchange failed: {details}","invalidBuildSettings":"Invalid buildsettings","emailProviderError":"Email provider error","failedToDeleteRepositories":"Failed to delete repositories","failedToDeleteRepository":"Failed to delete repository","noRepositoriesToDelete":"No repositories to delete","repoNameNotDeletable":"Repo name is not deletable","deprecatedUseApiContentTeam":"Deprecated. Use /api/content/team instead.","sponsorsServiceUnavailable":"Sponsors service unavailable","upstreamError":"Upstream error","buildServiceUnavailable":"Build service unavailable","buildNotFound":"Build not found","artifactNotFound":"Artifact not found","malformedResponse":"Malformed response","mustBeSignedIn":"You must be signed in.","noProjectAccess":"You do not have access to this project.","ownerRequired":"Only workspace owners can do that.","invalidEnvironmentName":"Missing or invalid environment name.","unknownEnvironment":"Unknown environment \"{environment}\". Known: {known}."},"githubReleases":{"errors":{"missingTagOrTargetSha":"Missing tag or target_sha"}},"builds":{"labels":{"buildPrefix":"Build {sha}"}},"apiMessages":{"buildDispatched":"Build dispatched","promotionDispatched":"Promotion dispatched","dispatchAccepted":"Dispatch accepted","duplicateDispatchIgnored":"Duplicate dispatch ignored","deletedRepositories":"Deleted {count} repositories","bulkDeleteDryRunMatched":"Dry run: matched {count} repositories","webhookEndpointWorking":"Webhook endpoint is working","deliveryAlreadyProcessed":"Delivery already processed","eventAlreadyProcessed":"Event already processed","repositoryNotManaged":"Repository not managed by Extension.dev","webhookProcessedSuccessfully":"Webhook processed successfully","webhookProcessingFailed":"Webhook processing failed"},"apiIndex":{"description":"Extension.dev API - dual data source architecture","endpoints":{"releasesRoot":"List and create releases","releasesCurrent":"Current releases per channel","releasesHistory":"Release history (paginated)","releasesSummary":"Releases summary","releaseDetail":"Release detail (GET), mutate (PUT/DELETE)","buildDetail":"Build detail","buildLogs":"Build logs","buildArtifacts":"Build artifacts list","storesList":"Stores list","storeDetails":"Store details","storeSubmissions":"Store submissions (paginated)","projectsList":"List all projects for the authenticated user","projectDetail":"Get detailed project information from both user and mirror repos","projectUserRepo":"Get data from user repository (meta.json, settings.json, channels.json)","projectMirrorRepo":"Get data from mirror repository (settings.json, build settings)","projectSync":"Sync user repo content to mirror repo","projectDeploy":"Trigger deployment in mirror repository"},"params":{"projectIdFormat":"String - format: <userid>--<owner>--<repo>"},"dataSources":{"userRepo":{"description":"User repository with project configuration files","access":"User GitHub access token"},"mirrorRepo":{"description":"Mirror repository with build settings and CI/CD configuration","access":"GitHub App installation token"}},"architecture":{"description":"Dual data source architecture for secure and efficient project management","benefits":["User data remains in user repository","Build settings and CI/CD in controlled mirror repository","Secure access control through GitHub App installation","Separation of concerns between user config and build infrastructure"]}}},"marketing":{"home":{"metaTitle":"Ship Chrome, Firefox, Edge, and Safari extensions from one push","metaDescription":"Build, preview, and publish browser extensions. Reproducible builds, shareable previews, and release-ready submissions for Chrome, Firefox, Edge, and Safari.","section":{"capabilitiesTitle":"From push to published","capabilitiesDescription":"Follow a commit through build, preview, store submission, promote, and rollback on Chrome, Firefox, Edge, and Safari."},"continueSignIn":{"title":"Finish signing in to continue","description":"You were headed to the console. Sign in with GitHub and we'll take you back there.","cta":"Sign in with GitHub"},"handoff":{"title":"Taking you to the console","description":"You are signed in. This tab is on its way there now."}},"platformActions":{"trustLine":"Built by the maintainers of Extension.js, the open source CLI for browser extensions.","primaryCta":"Sign in with GitHub","primaryDescription":"Connect your repos and start building","secondaryCta":"Join the waitlist","secondaryDescription":"Get on the invite list","signInCta":"Sign in","subscribeCta":"Subscribe","subscribeDescription":"Get on the invite list","resourcesCta":"Quick extension links","resourcesDescription":"Templates and docs","resources":{"docs":{"title":"Documentation","description":"Guides for building, previewing, and publishing"},"templates":{"title":"Templates","description":"Start from a ready-made extension template"}},"createCta":"Create a new extension","createDescription":"Import a repo or a template"},"foundersNote":{"title":"Founder's note","description":"A letter to all my fellow browser extension developers","paragraphs":{"p1":"It was time to have a platform built for people shipping browser extensions.","p2":"If you have shipped an extension, you know the hard part is rarely the code. It is the path to publishing: store policies, review requirements, permission changes, and the small differences between browsers that turn releases into guesswork.","p3":"This platform is designed around that reality. Builds should be repeatable. Artifacts should be easy to inspect. Previews should be shareable. Release channels should be explicit.","p4":"This is for developers. The UI speaks in commits, artifacts, permissions, and channels. The goal is fewer surprises between Chrome, Firefox, Edge, and Safari, and more confidence when you press publish.","p5":"If something feels unclear or missing, tell me. I read every message."}},"foundersNotePage":{"metaTitle":"Founder’s note","badgeLabel":"Founder’s note","greeting":"Hi there,","createCta":"Create a new extension","aboutCta":"About Extension.dev"},"about":{"metaTitle":"About","header":{"title":"About Extension.dev","description":"It was time to have infrastructure designed specifically for people shipping browser extensions."},"intro":{"paragraphs":{"p1":"If you’ve shipped an extension, you know the hard part is rarely the code. It’s the path to publishing: store policies, review requirements, permission changes, and the small differences between browsers that turn releases into guesswork.","p2":"Extension.dev is designed around that reality.","p3":"You always know what’s being built, what’s being reviewed, and what’s going live. Artifacts come from real commits, previews are shareable links, and release channels are explicit. No guessing what the pipeline did.","p4":"The goal is fewer surprises between Chrome, Firefox, Edge, and Safari, and more confidence when pressing publish."}},"founder":{"title":"About the founder"},"team":{"roles":{"founderLead":"Founder, Extension.js creator"},"bio":{"founder":{"p1":"I build developer tooling focused on browser extensions and release infrastructure.","p2":"I created Extension.js, a zero-config CLI used in real projects to ship cross-browser extensions. It standardizes project structure, handles browser-specific manifest differences, and makes builds predictable across Chrome, Firefox, and Edge, covering the full development and build workflow.","p3":"Extension.dev builds on that work by addressing the harder part of extension development: releases, previews, and distribution across browsers."}},"seed":{"members":{"cezaraugusto":{"name":"Cezar Augusto"}}}},"contact":{"title":"Contact","bodyPrefix":"If you are building in the margins or need a straight answer, reach out at","emailAriaLabel":"Email hello@extension.dev","bodySuffix":"."},"cta":{"title":"Ready to ship faster?","description":"Join the waitlist and we'll email you when your invite is ready.","primary":"Create a new extension","secondary":"Join the waitlist","github":"Star Extension.js on GitHub"}},"subscribe":{"metaTitle":"Join the waitlist","title":"Private alpha access","description":"Access is limited while the platform is stabilized. Drop your email and we'll send the invite when it is ready. Invites go out by hand, one at a time.","pending":{"withLabel":"You were importing {label}. Access is invite-only right now, so we saved it. Once you have access, you'll pick up right where you left off.","generic":"Access is invite-only right now, so we saved where you were headed. Once you have access, you'll pick up right where you left off."},"notInvited":{"body":"Your GitHub sign-in worked. The alpha is invite-only and your account is not on the list yet. Leave your email below and we'll let you know when your invite is ready."},"gaUpdatesBody":"We'll also notify you when Extension.dev reaches general availability. No spam, two emails per quarter at most.","form":{"emailLabel":"Email","emailPlaceholder":"you@yourdomain.com","githubLabel":"GitHub handle (optional)","githubPlaceholder":"@yourhandle","submit":"Join the waitlist","submitting":"Joining…","errorGeneric":"Something went wrong. Try again in a moment.","errorInvalidEmail":"Enter a valid email address.","privacyNoticeBody":"By joining, your email is sent to our email provider (Substack) to manage the waitlist. Your GitHub handle is not sent to them.","privacyNoticeLink":"See our Privacy Policy"},"success":{"title":"You're on the list","description":"Thanks for joining. We'll email you when your invite is ready.","shareTitle":"Share it forward","shareDescription":"Send this link to someone else who ships extensions.","copyLink":"Copy link","linkCopied":"Link copied","referralAriaLabel":"Share link"},"noInvite":{"title":"Start building right away","description":"Browse ready-made templates, or scaffold locally with npx extension@latest create.","templatesCta":"Browse templates"}},"blog":{"metaTitle":"Blog","header":{"title":"Latest news","description":"Latest updates and announcements from the Extension.dev team."},"postComponent":{"notFound":"Post not found"},"post":{"loading":"Loading post…","notFound":{"title":"Post not found","description":"This post may have been moved or deleted."}},"errors":{"failedToLoadPosts":"Failed to load posts"},"seed":{"posts":{"welcome":{"title":"Welcome to Extension.dev","excerpt":"A quick overview of what we’re building and why it matters.","description":"Introducing Extension.dev","contentHtml":"<p>welcome! this is the Extension.dev dashboard blog. more updates soon.</p>"}}}},"platformSteps":{"steps":{"githubIntegration":{"title":"GitHub integration","description":"Connect GitHub so every push builds your extension and posts a preview link."},"generateBuildsPerCommit":{"title":"Generate builds per commit","description":"Build Chrome, Firefox, Edge, and Safari artifacts on pushes, pull requests, and releases."},"validateAndAudit":{"title":"Preflight before you publish","description":"Check store credentials, secrets, and artifact integrity before a submission is queued."},"previewDeployments":{"title":"Preview deployments","description":"Create shareable per-commit preview pages with downloads and build metadata for each browser."},"channelBasedReleases":{"title":"Channel-based releases","description":"Use preview and stable channels to keep releases explicit."},"storeSubmissionAndTracking":{"title":"Store submission and tracking","description":"Submit to major stores and track statuses from deployment pages."}}},"new":{"metaTitle":"Create a new extension","title":"Create a new extension","description":"Import a GitHub repository or start from a template.","signInTitle":"Sign in to see your GitHub projects","signInDescription":"Extension.dev connects to your GitHub account to list your repositories, so you can pick the extension to import and ship.","signInCta":"Sign in with GitHub","importBadge":"Import"},"pricing":{"metaTitle":"Pricing","metaDescription":"One paid plan at $29 per workspace per month. Free runs on your machine. Paid runs on ours.","header":{"title":"Pricing","description":"Free runs on your machine. Paid runs on ours."},"lead":{"p1":"That sentence is the whole rule. Anything that runs on your own CPU is free, with no account and no time limit. Anything we run for you, on our build machines or our AI key, is what the paid plan pays for.","p2":"There is one paid plan and one number."},"headline":{"amount":"$29","unit":"per workspace, per month","note":"Seats are never charged. Invite the whole team, and an agent is not a seat."},"tiers":{"title":"Three ways to use Extension.dev","description":"Two of them cost nothing, and the first one never asks who you are.","priceLabel":"Price","anonymous":{"name":"No account","qualifier":"Nothing to sign up for, nothing to install.","amount":"$0","unit":"no sign in, no expiry","items":["The whole extension CLI: create, dev, start, build, preview, logs, act, doctor and install.","20 of the 28 MCP tools, in any editor that speaks MCP.","Templates, themes and the docs.","Opening a shared preview link, with no sign in, for as long as the link lives.","The compile and run loop on code.extension.dev, which is esbuild-wasm on your own CPU."]},"account":{"name":"With an account","qualifier":"Sign in with GitHub. No card, ever.","amount":"$0","unit":"one project, 100 builds a month","items":["One project, imported from a GitHub repo or started from a template.","100 builds a month that you start yourself, from the console or the CLI.","extension publish, and preview links that stay live for 30 days.","Build logs, artifacts, environment variables and secrets.","Teammates, invites and access tokens.","Store submission by hand from the console, for Chrome, Firefox, Edge and Safari."]},"paid":{"name":"Paid","qualifier":"Everything above, plus the work we run without you watching.","amount":"$29","unit":"per workspace, per month","items":["A build on every git push, run on our machines.","Release cut, promote and rollback.","Store submission from CI, an agent or the API.","Every project after the first.","Preview links that do not expire.","AI generation past the free cap."]}},"allowance":{"title":"Why the free allowance is 100 builds","p1":"A build on our machines costs us about four cents in CI minutes. One hundred of them is a little over three dollars a month, which we would rather give away than meter.","p2":"A build you start yourself is one you are watching. Builds that fire on their own, from a push or a schedule, are the paid line, because that is where the cost stops being bounded by your attention."},"cta":{"title":"How to get on the paid plan","p1":"There is no checkout. We have not connected a payment provider yet, so billing is not self-serve, and we would rather write that here than give you a button that goes nowhere.","p2":"Email us. We turn the plan on for your workspace by hand and send an invoice.","primary":"Email hello@extension.dev","primaryAriaLabel":"Email hello@extension.dev about the paid plan","secondary":"Join the waitlist","note":"Extension.dev is in private alpha, so a workspace needs an invite before it can have a plan at all. The waitlist is how you get one."}}},"dashboard":{"auth":{"signInCta":{"title":"Please sign in to continue","button":"Sign in with GitHub","ariaLabel":"Sign in with GitHub"},"unauthorizedTool":{"title":"You don't have access to this tool","description":"This is an internal Extension.dev tool. Your account isn't permitted to use it."}},"invitesBanner":{"title":"You're invited to {workspace}","description":"You've been invited to join as {role}.","descriptionWithInviter":"{invitedBy} invited you to join as {role}.","actions":{"accept":"Accept invitation"},"notifications":{"acceptedTitle":"Joined {workspace}"},"errors":{"acceptFailed":"Could not accept the invitation"}},"preview":{"manifest":{"default":{"name":"Example Extension","description":"Default preview manifest used by Extension Dashboard.","actionTitle":"Example Extension","optionsPage":"options.html","devtoolsPage":"devtools.html"}}},"platform":{"root":{"unauthenticated":{"title":"Build, preview, and ship cross-browser extensions","description":"The deploy platform for Chrome, Firefox, Edge, and Safari extension teams. Wired into your GitHub on day one."}},"detailsTable":{"title":"Platform details","description":"Links and updates","rows":{"about":"About","pricing":{"label":"Pricing","value":"Free to start, $29/workspace"},"founderNews":{"label":"Founder news","value":"cezaraugusto.substack.com"},"docs":"Documentation"}},"capabilities":{"ariaLabel":"Platform capabilities"}},"workspace":{"metadataActions":{"createSomething":{"title":"Start something new...","description":"Extension, template, or land."},"createWithAi":{"title":"Create with AI","description":"Describe an extension and generate it"},"quickActions":{"title":"Quick actions...","description":"Builds, releases, and stores."},"newWorkspace":{"title":"New workspace","description":"Create a workspace to group your extensions"},"newFromTemplate":{"title":"New from template","description":"Start with a template and make it yours"}},"settingsDialog":{"title":"Land settings","description":{"enabled":"Manage land profile, members, and deletion.","disabled":"Unavailable"},"sections":{"workspace":{"label":"Land","description":"Identity and creation"},"connections":{"label":"GitHub connections","description":"Accounts and organizations connected to Extension.dev","loading":"Loading your GitHub connections…","empty":"No GitHub accounts or organizations have the Extension.dev app installed yet. Connect one to get started.","personalTag":"Personal account","activeTag":"Default","setDefault":"Set as default","connectOrg":"Connect another organization","switchAccount":"Switch GitHub account","error":"We couldn't verify your GitHub connections right now. Your GitHub session may have expired.","retry":"Try again"}},"comingSoonPrefix":"Coming soon for"},"dashboard":{"header":{"title":"Projects","description":"Your repositories and extension projects"},"loading":{"label":"Loading your projects…"},"empty":{"title":"No projects yet","description":"Create your first extension to get started.","cta":"Create a new extension"}},"metadataTable":{"title":"Land details","description":"Land profile and access details","rows":{"noData":{"label":"No data available"},"extensions":{"label":"Extensions"},"sharedBuilds":{"label":"Shared builds","action":"Manage"}}},"settingsSections":{"members":{"description":"Invite owners and members, then update roles."},"usage":{"description":"Build minutes, runs, and estimated cost per project."},"danger":{"description":"Delete this dev workspace after its projects are gone."}},"identityFields":{"iconHint":"PNG or JPEG, max 512 KB.","devWorkspaceUrl":{"label":"Dev workspace URL","copy":"Copy dev workspace URL","hint":"Dev workspace URLs are fixed after creation so routes and shared links stay stable."}},"identitySection":{"saveAction":"Save dev workspace settings","lockedFooter":"Display name is locked to @{username}.","lockedHint":"Locked to @{username}","saved":"Dev workspace details saved","saveFailed":"Failed to save dev workspace details.","loadFailed":"Failed to load dev workspace details."},"createDialog":{"creating":"Creating..."},"createProgress":{"title":"Workspace setup","description":"Follow along while your workspace is prepared.","helperText":"You can stay on this dialog while we finish the setup.","steps":{"validate":"Reviewing your workspace","create":"Creating the workspace","prepare":"Preparing your workspace","redirect":"Opening the workspace"}},"metadata":{"fallbackTitle":"Your workspace","fallbackDescription":"Welcome to Extension Dev."},"membersSection":{"title":"Dev workspace members","description":"Owners can invite, promote, demote, and remove members.","loadingCount":"Loading…","lastOwnerReason":"A workspace must keep at least one owner. Transfer ownership first.","youTag":"(You)","since":"since {date}","makeOwnerConfirm":"Make {name} the owner and step down to member? You will no longer be an owner of this workspace.","makeOwnerCta":"Make owner & step down","leave":{"title":"Leave workspace","description":"Remove yourself from this workspace. You'll lose access to its projects, but the workspace and its data stay for the remaining members.","soleOwnerTooltip":"You're the only owner. Transfer ownership or delete the workspace first.","confirm":"Leave this workspace? You'll lose access to its projects.","soleOwnerHint":"You're the only owner. Transfer ownership to another member (use \"Make owner & step down\" above) or delete the workspace before leaving."},"invite":{"description":"Invite someone by email into this dev workspace. They accept by signing in with GitHub, so they end up linked to their GitHub account.","sendingHint":"Sending the invitation can take a moment while we deliver the email."},"pendingInvites":{"description":"People you've invited who haven't joined yet. Resend the email or revoke the invite.","invitedOn":"invited {date}"},"removeConfirm":"Remove {name} from this workspace? They lose access immediately."},"memberActions":{"inviteMissingEmail":"Enter an email address to send the invitation.","inviteFailed":"Failed to invite member.","inviteReadyTitle":"Invitation ready","inviteShareDescription":"Share the invite link below with {email}.","roleUpdateFailed":"Failed to update role.","removeFailed":"Failed to remove member.","leaveFailed":"Failed to leave workspace.","leftWorkspace":"You left the workspace","ownershipTransferred":"Ownership transferred to @{login}","transferFailed":"Failed to transfer ownership.","revokeFailed":"Failed to revoke invitation.","resendFailed":"Failed to resend invitation.","resentTitle":"Invitation resent","readyToShareTitle":"Invitation ready to share"},"dangerSection":{"title":"Delete dev workspace","personalDescription":"This is your personal workspace, tied to your GitHub account. It's permanent and can't be deleted. To remove a project, delete the project itself; to wind down team work, delete the team workspace instead.","projectCount":{"one":"{count} project","many":"{count} projects"},"descriptionWithProjects":"This permanently deletes the workspace and its {projects}, including all builds, releases, and store data. This cannot be undone.","descriptionEmpty":"This permanently deletes the workspace. This cannot be undone.","confirmLabel":"Type \"delete\" to confirm","deleteWithProjects":"Delete workspace and {projects}","confirmTypeDelete":"Please type \"delete\" to confirm.","deleteFailed":"Failed to delete workspace.","deleteWorkspaceFailed":"Failed to delete dev workspace.","deleted":"Dev workspace deleted"},"usageSection":{"title":"GitHub build usage","description":"Builds and releases run on GitHub Actions in the private mirror repository extension.dev keeps for each project. The figures below estimate that compute (build minutes, workflow runs, artifact storage) at GitHub list rates, so you can see what each project costs to build.","billingMonth":"Billing month","tiles":{"minutes":"Build minutes","runs":"Workflow runs","cost":"Estimated GitHub cost"},"loadingLabel":"Loading usage","notConfigured":"Usage metering isn't available yet. Check back soon; your builds keep running as usual in the meantime.","errorFallback":"Failed to load usage data.","meteredAsOf":"{period} · metered from GitHub Actions as of {time}","billedByGithub":"GitHub bills this compute to extension.dev, not to you. The estimate is here so you can see what each project costs to build.","minutesShort":"{minutes} min","runCount":{"one":"{count} run","many":"{count} runs"},"noMeteredUsage":"No metered usage this month","byProject":{"title":"Usage by project","description":"Each project's share of this workspace's metered usage, sorted by cost.","empty":"No build runs this billing month."}},"unavailable":{"title":"This workspace isn't available to you","description":"You don't have access to “{workspace}”, or it doesn't exist. Pick one of your workspaces below, or create a new one.","switchLabel":"Your workspaces","createCta":"Create a workspace","unverifiedTitle":"We couldn't verify this workspace","unverifiedDescription":"Something went wrong loading your workspaces, so we can't confirm access to “{workspace}” right now. This is usually temporary.","retryCta":"Try again"}},"hello":{"header":{"description":"Set up a new dev workspace with the same identity defaults used in dev workspace settings."},"fields":{"displayName":{"label":"Display name","placeholder":"Team workspace","hint":"This is the label people will see across the dev workspace."},"slug":{"label":"Slug","placeholder":"team-workspace","hint":"Pick a short permanent path for this dev workspace."},"description":{"label":"Description","placeholder":"A shared dev workspace for your team's projects.","hint":"Add short context so members understand what this dev workspace is for."},"websiteUrl":{"label":"Website URL","placeholder":"https://example.com","hint":"This link appears below the title in the dev workspace and project metadata column."}},"team":{"title":"Team","description":"Manage who can access this dev workspace.","ownerTitle":"Owner","ownerDescription":"You will be the founding owner of this dev workspace.","you":"You","avatarAlt":"{name} GitHub avatar","inviteHint":"Invite collaborators from the dev workspace settings once it is created."},"create":{"cta":"Create dev workspace","creating":"Creating dev workspace...","successTitle":"Dev workspace created","errorFallback":"Failed to create workspace."},"hints":{"reservedSlug":"The slug \"{slug}\" is reserved.","slugsAreFixed":"Slugs are fixed after creation so routes and shared links stay stable."},"progress":{"title":"Creation progress","description":"Live status of your new dev workspace.","creatingTitle":"Creating dev workspace","failedTitle":"Creation failed","createdTitle":"Dev workspace created","creatingDescription":"Saving identity, slug, and owner role...","failedDescription":"Fix the issue below and try again.","createdDescription":"Redirecting you to the new dev workspace.","errorHeading":"Could not create dev workspace","steps":{"validate":"Validate workspace details","create":"Create dev workspace","finalize":"Finalize and redirect"}}},"common":{"noData":"No data","lastUpdated":"Updated {time}","loadMore":"Load more","loadingMore":"Loading…","expand":"Expand","collapse":"Collapse"},"project":{"titleFallback":"Project","metadataHeader":{"description":"Repository overview, build and deployment activity, and store status across browsers."},"overview":{"states":{"failedToLoad":"Couldn't load the project overview. Try again.","failedToLoadDescription":"Refresh the page or try again in a moment."}},"onboard":{"status":{"checking":"Checking onboarding status...","notOnboardedYet":"{repoRef} is not onboarded yet.","alreadyOnboardedTitle":"This repo is already onboarded","alreadyOnboardedDescription":"{repoRef} resolves to an active project. The commands below are reference for re-onboarding or audits.","notOnboardedTitle":"Onboard this repo"},"notOnboarded":{"title":"Project not onboarded","description":"This repository ({repoRef}) hasn't been onboarded yet.","actions":{"howToOnboard":"How to onboard","retry":"Retry"}},"resolveError":{"title":"Unable to resolve project","description":"We couldn't validate this repo's onboarding status. Try again.","actions":{"retry":"Retry"}},"steps":{"clone":{"title":"1) Clone the authority repo","description":"You'll make a small JSON change and push it."},"createWorkspace":{"title":"2) Create a workspace","description":"Pick a slug and copy the ws_... id from the output."},"attachRepo":{"title":"3) Attach this repo to the workspace","description":"This creates a stable prj_... and indexes repoRef → projectId. The --mirror value tells www which extensiondev mirror repo to use for settings/env."},"verify":{"title":"4) Verify locally","description":"Confirm that repoRef resolves to a projectId."}},"copyCommand":"Copy command","backToProject":"Back to project","intro":"An owner or admin must create a workspace and attach this repo in the developers-db authority repository. This page is read-only (no writes).","afterPush":"After you commit and push to extensiondev/developers-db main, refresh the project page."},"metadataActions":{"primary":{"title":"Open preview","description":"Unavailable"},"menu":{"createRelease":{"title":"Create release","description":"Promote a successful build to a channel"},"submitToStore":{"title":"Submit to store","description":"Package and submit a release to browser stores"},"downloadLatestBuild":{"title":"Download latest build","description":"Get the most recent build artifacts"},"viewAnalytics":{"title":"View analytics","description":"Usage, ratings, and performance metrics"}}},"metadataTable":{"title":"Extension details","description":"Information about this extension project","rows":{"repository":{"label":"Repository"},"targetBrowsers":{"label":"Browser support","notConfigured":"No build setup configured"},"releaseChannels":{"label":"Release channels"},"storeDistribution":{"label":"Stores","valueNone":"Setup a store integration","valueOne":"{count} store","valueOther":"{count} stores"},"lastActivity":{"label":"Last activity","empty":"No activity yet"}}},"tabs":{"overview":"Overview","activity":"Activity","builds":"Builds","releases":"Releases","stores":"Stores"}},"projectCard":{"ariaLabel":{"default":"Project card","withRepo":"{Repo} project card"},"sections":{"extensionDetails":"Extension details","browserSupport":"Build details"},"actions":{"viewOnGithub":"View on GitHub"},"values":{"notAvailable":"n/a"},"links":{"openGithubRepoAriaLabel":"Open GitHub repository {repo}","openProjectAriaLabel":"Open project","openProjectAriaLabelWithRepo":"Open {repo}"},"labels":{"defaultBranch":"Default branch"}},"bulkDelete":{"loading":"Loading...","unauthorized":{"title":"Unauthorized","description":"Please sign in to access this page."},"header":{"title":"Bulk cleanup","description":"Admin-only cleanup. This removes mirror repos and authority entries for the selected users/projects. This can’t be undone."},"dialog":{"title":"Are you absolutely sure?","description":"This action cannot be undone.","wipeUsersDescription":"This will permanently delete all mirror repos and authority entries for the specified users.","wipeMeDescription":"This will permanently delete all of your mirror repos and authority entries.","actions":{"cancel":"Cancel","confirm":"Delete now"}},"form":{"usersPlaceholder":"4672033\ncezaraugusto\nanother-user-id-or-login","usersHint":"One per line. You can paste GitHub numeric user IDs or GitHub logins. We’ll wipe all mirror repos (<userId>--*) plus authority entries."},"actions":{"deleteAll":"Delete now","deleting":"Deleting…","wipeSpecifiedUsers":"Wipe specified users","wipeMyProjects":"Wipe my projects"},"errors":{"failedToDeleteRepositories":"Failed to delete repositories","couldntDeleteRepositories":"Couldn’t delete repositories","couldntDeleteRepositoriesWithMessage":"Couldn’t delete repositories: {message}"}},"teamInviteEmail":{"subject":"@{senderGithubUsername} invited you to collaborate in Extension.dev","title":"You’ve been invited to collaborate","body":{"withName":"{name}, @{senderGithubUsername} invited you to collaborate in {extensionDevLink}.","withoutName":"@{senderGithubUsername} invited you to collaborate in {extensionDevLink}."},"summary":{"sentByLabel":"Sent by:","destinationLabel":"Workspace access:","roleLabel":"Collaboration role:"},"code":{"intro":"Use this invitation code after signing in with GitHub as {githubUsername}:","instructions":"Open {codeEntryUrl}, paste the code, and Extension.dev will connect you to the shared workspace."},"actions":{"acceptInvitation":"Join workspace"},"footnotes":{"expiresIn24Hours":"This link expires in 24 hours.","ignoreIfUnexpected":"If this was not meant for you, ignore this email and no access will be granted."}},"teamJoinCode":{"title":"Join shared workspace","description":"Signed in as {githubUsername}. Enter the invitation code from your email to join the shared workspace.","codeLabel":"Invitation code","codePlaceholder":"123-456","errors":{"invalidOrExpiredCode":"Invalid or expired invitation code"},"actions":{"redeeming":"Joining…","redeem":"Join workspace"}},"build":{"metadataHeader":{"description":"Project information and context. Build-specific title and details are shown on the right."},"browserBuild":{"metadataHeader":{"description":"Project information and context. Browser-build specific title and details are shown on the right."}},"summaryTable":{"title":"Build details","description":"Share this URL with reviewers and testers.","copySha":"Copy SHA"}},"release":{"metadataHeader":{"description":"Project information and context. Release-specific title and details are shown on the right."},"summary":{"title":"Release summary","description":"Key information about this release","rows":{"channel":"Channel","environment":"Environment","version":"Version","build":"Build"}}},"settings":{"shell":{"title":"Project settings"},"modal":{"title":"Project settings","description":"Change identity, builds, deployment, stores, and team access for this project.","discardConfirm":"You have unsaved changes. Discard them and close settings?"},"entry":{"description":"Open project settings"},"common":{"saveSettings":"Save settings","saving":"Saving…","savedTitle":"Settings saved","savedDescription":"Your changes are saved.","failedToSaveTitle":"Couldn't save","on":"On","off":"Off","stagedTitle":"Settings staged","stagedDescription":"These settings apply when you create the project. Leaving or reloading this page discards them.","changeSummary":{"updated":"Updated: {fields}","more":"+{count} more"}},"sections":{"general":{"label":"Project information","description":"Basic details"},"icon":{"label":"Icon","description":"Brand image"},"team":{"label":"Team members","description":"Who can change this project"},"environment":{"label":"Environment variables","description":"Build configuration"},"build":{"label":"Browser builds","description":"Browser build configuration"},"deployment":{"label":"Deployment","description":"Hosting and rollout"},"channels":{"label":"Release channels","description":"Release flow and versioning"},"stores":{"label":"Store publishing","description":"Store automation and credentials"},"danger":{"label":"Danger zone","description":"Irreversible actions"}},"general":{"projectSlugLabel":"Project slug","projectInfoFields":{"slugLabel":"Slug","slugFallback":"Untitled","nameLabel":"Extension name","namePlaceholder":"My Extension","nameHint":"Up to {max} characters.","slugHint":"Read-only. Derived from the project name.","descriptionLabel":"Description","descriptionPlaceholder":"A brief description of your extension","descriptionHint":"Appears in stores and your project overview."},"changeMap":{"name":"Name","description":"Description","homepageUrl":"Homepage URL","supportUrl":"Support URL"},"projectInfo":{"saveFailed":"Couldn't save project info","savedTitle":"Project info saved"},"webPresence":{"title":"Web presence","description":"Optional URLs that help users find support and documentation.","saveFailed":"Couldn't save web presence","savedTitle":"Web presence saved","fields":{"homepageLabel":"Homepage URL","homepagePlaceholder":"https://your-extension.com","homepageHint":"Optional. Use a valid https URL.","supportLabel":"Support URL","supportPlaceholder":"https://support.your-extension.com","supportHint":"Optional. A help center or email form URL."},"errors":{"urlTooLong":"URL exceeds 2048 characters","urlProtocol":"Only http(s) URLs are allowed","urlInvalid":"Enter a valid URL (https://...)"}},"usage":{"title":"Usage docs","description":"Markdown shown to users on your project's preview page. Explain how to install, configure, and use the extension.","label":"USAGE.md","hint":"Markdown supported. Max 256KB.","placeholder":"## Getting started\n\nDescribe how to use your extension here…","previewDescription":"Preview how this guide will render for reviewers.","saveFailed":"Couldn't save usage docs","savedTitle":"Usage docs saved","savedDescription":"Updated USAGE.md.","fallbackProjectName":"Browser Extension"},"screenshots":{"title":"Screenshots","description":"Add up to 6 PNG screenshots for store listings and previews.","label":"Screenshots","hint":"PNG only. Max 2MB each.","upload":"Upload screenshots","remove":"Remove","empty":"No screenshots uploaded yet.","count":"{count}/{max} screenshots","previewAlt":"Screenshot {index}","saveFailed":"Couldn't save screenshots","savedTitle":"Screenshots saved","savedDescription":"Saved {count} screenshots.","errors":{"type":"Only PNG files are supported.","size":"Screenshot exceeds 2MB.","read":"Failed to read file"}},"icon":{"upload":"Upload icon","empty":"No icon","errors":{"missing":"Please upload an icon before saving.","invalidType":"Please upload a PNG or JPEG image.","tooLarge":"Icon is too large. Max size is 512KB."}}},"environment":{"savedTitle":"Environment variables saved","errors":{"failedToSave":"Couldn't save environment variables","invalidKey":"Invalid variable name \"{key}\". Use A-Z, 0-9, and _ only.","duplicateKey":"Duplicate variable name \"{key}\".","missingValue":"Variable \"{key}\" requires a value.","missingKey":"Variable name is required."},"ui":{"header":{"title":"Environment variables","description":"Variables and secrets used during builds and deployments."},"add":{"title":"Add variable","description":"Values are encrypted and stored as repository secrets. We never display secret values-enter a new value to overwrite.","action":"Add","pendingHint":"Name the current variable before adding another."},"draft":{"title":"New environment variable #{index}"},"defined":{"title":"Defined variables","description":"Variables currently configured for this project.","empty":"No variables defined yet."},"existing":{"title":"{name} environment variable","fallbackName":"Environment variable #{index}"},"status":{"set":"Set","notSet":"Not set","setAria":"A value is stored for this variable","notSetAria":"No value is stored for this variable yet"},"fields":{"name":{"label":"Variable name","placeholder":"VARIABLE_NAME","hint":"Use A-Z, 0-9, and _ only."},"value":{"label":"Value","placeholderNew":"Enter secret value","placeholderKeep":"Leave blank to keep current","hintNew":"This value will be saved as a secret.","hintExistingHasValue":"Stored as a GitHub Secret. Enter a new value to replace."},"note":{"label":"Note (optional)","placeholder":"Description of this variable's purpose"},"scope":{"ariaLabel":"Scope"}},"actions":{"removeAriaLabel":"Remove variable"},"keyErrors":{"tooLong":"Key exceeds {max} characters","invalidFormat":"Use A-Z, 0-9 and underscore only"},"import":{"empty":"No environment variables found. Paste KEY=value lines from a .env block.","importedOne":"Imported {count} variable.","importedOther":"Imported {count} variables."}},"unified":{"hint":"Build-time variables baked into the extension. Scope each one: “All channels” applies to every build; “Production” and “Staging” override it for the channels bound to them (Stable uses Production, Preview uses Staging).","loadingAriaLabel":"Loading environment variables","saveAction":"Save variables","savedTitle":"Saved environment variables.","partialSaveTitle":"Saved variable names, but some values were not written.","partialSaveDescription":"The GitHub App could not write one or more secrets. Check its Secrets and Environments permissions.","errors":{"load":"Failed to load","loadVariables":"Failed to load environment variables","saveVariables":"Failed to save variables","save":"Failed to save"}}},"build":{"savedTitle":"Build settings saved","errors":{"failedToSave":"Couldn't save browser build settings"},"ui":{"header":{"title":"Browser builds","description":"Configure build settings for Chrome extension, Firefox add-on, and Edge add-on."},"rows":{"configureBuildsDescription":"Set build settings for {browser}."},"enable":{"title":"Enable builds","description":"Turn this on to build the packaged output for {browser}.","switchAriaLabel":"Enable {browser} builds"},"fields":{"outputDirectory":{"label":"Output directory","placeholder":"dist/{browser}"},"installCommand":{"label":"Install command","placeholder":"Pnpm install"},"buildCommand":{"label":"Build command","placeholder":"Pnpm build:{browser}"}}}},"deployment":{"savedTitle":"Deployment settings saved","errors":{"failedToSave":"Couldn't save deployment settings"},"ui":{"header":{"title":"Deployment","description":"Branch and runtime configuration for builds."},"fields":{"branch":{"label":"Deployment branch","placeholder":"Main","hint":"The Git branch used for automatic deployments."},"nodeVersion":{"label":"Node.js version","placeholder":"Select Node.js version","hint":"Runtime used to build your extension.","options":{"lts20":"Node.js 20.x (LTS)","current22":"Node.js 22.x (current)"}},"rootDirectory":{"label":"Root directory","placeholder":"apps/extension","hint":"Relative path from the repository root. Leave empty to build from the repository root."},"workspaceRoot":{"label":"Workspace root (advanced)","placeholder":"Auto-detected - e.g. \".\" for a monorepo at repo root","hint":"Override only if auto-detection picks the wrong directory. Install runs here; build still runs in the root directory above. We auto-detect pnpm, npm, yarn, and bun workspaces."},"runWhatsNew":{"title":"Generate What's new","description":"When enabled, generate what's-new.json for each commit.","switchAriaLabel":"Toggle What's new generation"},"runExtensionExecutables":{"title":"Generate extension executables","description":"When enabled, generate executable artifacts during deployment.","switchAriaLabel":"Toggle executable generation","platforms":{"linux":{"label":"Linux","description":"Generates a Linux binary that, when run, opens your extension loaded in the specified browser."},"macos":{"label":"macOS","description":"Generates a macOS .app that, when opened, opens your extension loaded in the specified browser.","gatekeeperWarning":"macOS .app bundles aren't notarized yet, so Gatekeeper may report them as \"damaged\" when downloaded. Recipients can right-click and choose Open, or remove the quarantine flag, until notarization is enabled."},"windows":{"label":"Windows","description":"Generates an .exe that, when clicked, opens your extension loaded in the specified browser."}},"platformSwitchAriaLabel":"Run extension executables: {os}"}}},"changeMap":{"branch":"Branch","nodeVersion":"Node.js version","rootDirectory":"Root directory","workspaceRoot":"Workspace root","runWhatsNew":"What's new generation","runExtensionExecutables":"Executable generation"}},"team":{"errors":{"failedToUpdateRole":"Failed to update role","failedToRemoveMember":"Failed to remove member"},"notifications":{"roleUpdatedTitle":"Role updated","roleUpdatedDescription":"{Name} is now {role}","memberRemovedTitle":"Member removed"},"inviteFlow":{"errors":{"failed":"Failed to invite member","missingEmail":"Enter an email address to send the invitation","revokeFailed":"Failed to revoke invitation"},"notifications":{"sentTitle":"Invitation sent","sentDescription":"We emailed an invitation to {email}. They accept by signing in with GitHub.","manualShareDescription":"The invite for {email} is ready. Share the accept link below if the email does not arrive."}},"members":{"title":"Members","description":"Manage who has access to this project and what they can do.","empty":"No team members are available for this project yet.","count":{"one":"1 member","many":"{count} members"},"rolePlaceholder":"Role","roles":{"member":"Member","admin":"Admin","owner":"Owner"},"removeAriaLabel":"Remove {name}","since":"Since {date}"},"invite":{"title":"Invite member","description":"Invite someone by email to collaborate on this project. They accept by signing in with GitHub, so they end up linked to their GitHub account.","emailLabel":"Email address","emailPlaceholder":"name@example.com","roleLabel":"Role","rolePlaceholder":"Select a role","roles":{"member":"Member","admin":"Admin"},"actions":{"sending":"Sending…","send":"Send invitation","sendingHint":"Sending the invitation can take a little while while we verify delivery."},"share":{"title":"Invite ready","sentDescription":"We emailed an invitation to {email}. Share this link if they do not receive it.","manualDescription":"Email delivery was not available for {email}. Share this link or the code below so they can accept it directly.","linkLabel":"Accept invite link","codeEntryLabel":"Code redemption page","deliveryLabel":"Email dispatch","providerAccepted":"Accepted by {provider} with id {emailId}.","providerEvent":"Latest provider event: {event}.","providerAuditRestricted":"Provider accepted the email, but this API key cannot retrieve delivery status. Add a broader audit key if you want in-app delivery verification.","providerAuditUnavailable":"Provider accepted the email, but delivery status could not be retrieved right now.","copy":"Copy link","copySuccess":"Invite link copied","dismiss":"Dismiss"}},"confirmRemove":{"title":"Remove member","description":"Are you sure you want to remove this member from the team? This action cannot be undone.","actions":{"cancel":"Cancel","remove":"Remove"}},"pendingInvites":{"title":"Pending invitations","description":"People you invited who have not joined yet. They will see the invitation when they sign in.","count":{"one":"1 pending","many":"{count} pending"},"roleSummary":"Invited as {role}","invitedBy":"by {invitedBy}","expires":"Expires {date}","actions":{"resend":"Resend","resending":"Resending…","revokeAriaLabel":"Revoke invitation for {email}"},"notifications":{"revokedTitle":"Invitation revoked"},"confirmRevoke":{"title":"Revoke invitation","description":"Revoke the pending invitation for {email}? They will no longer be able to join with the existing link or code.","actions":{"cancel":"Cancel","revoke":"Revoke"}}}},"danger":{"confirmDelete":{"errorTitle":"Please type \"delete\" to confirm"},"deletedMockTitle":"Project deleted","ui":{"header":{"title":"Danger zone","description":"Irreversible and destructive actions."},"delete":{"title":"Delete project","description":"Permanently delete this project. This action cannot be undone and will remove builds, releases, and configurations.","action":"Delete project","deleting":"Deleting project…","deletingHint":"Removing builds, releases, store data, and the mirror repository. This can take a moment."},"confirm":{"label":"Type “delete” to confirm","placeholder":"Type 'delete' to confirm"}},"notOwner":"Only workspace owners can delete this project. Ask an owner of this workspace if it needs to be removed.","deletedTitle":"Project deleted","deleteFailed":"Failed to delete project."},"github":{"header":{"title":"GitHub integration","description":"Repository connection and automation preferences."},"connectedOn":"Connected on {date}","installCancelledTitle":"GitHub connection not finished","installCancelledDescription":"The GitHub window closed before the app was authorized. Nothing changed. Select Authorize again to continue.","actions":{"disconnect":"Disconnect"},"fields":{"pullRequestComments":{"title":"Pull request comments","description":"Post build status and deployment links to PRs."},"commitComments":{"title":"Commit comments","description":"Add build status comments to commits."}},"savedTitle":"GitHub settings updated"},"stores":{"header":{"title":"Store submission automation","description":"Configure only the credentials, identifiers, and rollout modes used by automated store submissions."},"health":{"title":"Store credentials need attention","description":"These saved store credentials failed their last automated check. Fix them so your next submission does not fail silently.","checkedAt":"checked {time}","recheck":"Re-check now","recheckQueued":{"title":"Re-checking credentials","description":"Queued a fresh check. Results update here in about a minute."},"recheckFailed":"Couldn't queue a credential re-check."},"rows":{"description":{"chrome":"Automated submission to Chrome Web Store","firefox":"Automated submission to Firefox Add-ons","edge":"Automated submission to Microsoft Edge Add-ons","safari":"Automated upload to the App Store via App Store Connect"}},"enable":{"title":"Enable automated submission","description":"Turn off to disable automated submissions for this store.","switchAriaLabel":"Enable automated submission for {store}"},"apiConfigTitle":"Automation configuration","apiConfigDescription":"Fields used by the automated submission workflow. Listing copy, screenshots, and provider questionnaires stay in the store dashboard.","automationStatus":{"summary":"Mode: {submissionMode} · Secrets: {credentialsStatus}","derivedUrlMissing":"Listing URL will appear once a store identity is configured.","modeFallback":"not configured","credentialsReady":"ready","credentialsMissing":"missing"},"readonly":{"shared":{"title":"Uses shared project data","description":"These values are reused from the project-wide settings and assets you already manage elsewhere in Extension.dev.","summary":"{available} of {total} reusable fields ready","missingValue":"Missing from shared project data","manageAction":"Edit in general settings","status":{"available":"Ready","missing":"Missing"}},"provider":{"title":"Still requires provider dashboard","description":"Extension.dev can queue the submission, but these provider-owned steps still live in the store dashboard or reviewer workflow.","status":{"warning":"Action needed","info":"Provider-owned"}}},"validation":{"chrome":"Missing or invalid automation settings: Extension ID, OAuth Client ID, Client Secret, or Refresh Token. Extension ID must be 32 lowercase letters.","firefox":"Missing or invalid automation settings: API Key or API Secret. Add-on GUID must be in GUID format if provided.","edge":"Missing or invalid automation settings: Publish API Client ID, API Key, or Product ID. Product ID must be a GUID from Partner Center.","safari":"Missing or invalid automation settings: App Store Connect key ID, issuer ID, private key, or bundle ID. The bundle ID must be your reverse-DNS identifier, and the App Store ID must be numeric when set."},"actions":{"saveAsGithubSecret":"Save automation secrets","testConnection":"Test automation setup","testing":"Testing automation…","connected":"Connected","notifications":{"connectionOk":"Connection verified","healthCheckQueued":"Queued a live credential check on the mirror repository. Results appear here in about a minute."},"errors":{"failedToSaveSecrets":"Couldn't save secrets","connectionFailed":"Connection failed","reenterSecretsToTest":"Saved secrets are stored write-only in GitHub Actions and cannot be read back. Re-enter the secret values above to run a live connection test."},"connectionFailing":"Connection failing"},"connect":{"trigger":"Guided setup","title":"Connect {store}","description":"Three steps: get your credentials, enter and verify them, then save your automation settings.","step1":"Get your credentials","step1Hint":"Open the provider console and copy the values. Watch the highlighted gotcha for this store.","step2":"Enter and verify","step2Hint":"Paste the values, then Test automation setup. A green Connected badge means the credentials work.","step3":"Save automation settings","step3Hint":"Persist the submission mode and identifiers for this store.","done":"Done","close":"Close"},"secrets":{"errors":{"fixValidationFirst":"Fix validation errors before saving secrets","missingChrome":"Add Chrome Web Store credentials (a service account key, or client ID + client secret + refresh token) and the extension ID","missingFirefox":"Add required Firefox Add-ons (AMO) credentials","missingEdge":"Add required Microsoft Edge Add-ons credentials","failedToSave":"Couldn't save secrets","secretsNotStored":"We couldn't store these secrets on the repository. Nothing was saved - please try again.","secretsForbidden":"Secrets weren't stored: the extension.dev GitHub app lacks permission to write repository secrets for this project. An admin needs to grant it 'Secrets: Read and write'.","missingSafari":"Enter the App Store Connect key ID, issuer ID, and private key."},"notifications":{"savedToGithub":"Secrets saved to GitHub Actions"}},"config":{"errors":{"failedToSave":"Couldn't save store settings"},"notifications":{"savedTitle":"Settings saved for {storeName}"}},"fields":{"common":{"secretHint":"Stored as a repository secret for the automation workflow. We never display secret values.","secretConfiguredHint":"Saved. Leave blank to keep the current value, or enter a new one to replace it.","secretConfiguredPlaceholder":"•••••••••••• (saved)","selectTargetPlaceholder":"Select target","selectChannelPlaceholder":"Select channel","hideSecrets":"Hide secrets","revealSecrets":"Reveal secrets","dryRun":{"title":"Dry run","description":"Don’t submit. Validate only.","switchAriaLabel":"Enable dry run for {storeName}"},"whereToGet":{"trigger":"Where do I get this?","fullGuide":"Read the full credential guide"}},"chrome":{"clientId":{"label":"OAuth client ID","placeholder":"Your {storeName} OAuth client ID","whereToGet":{"steps":["Run extension-deploy init in your project. It mints the OAuth client ID and secret locally and prints both.","Copy the printed client ID and paste it here.","Skip the OAuth Playground. It fails with a redirect_uri_mismatch error. Prefer the service account key above if you can."],"linkLabel":"Open Google Cloud credentials"}},"clientSecret":{"label":"Client secret","placeholder":"Your {storeName} client secret","whereToGet":{"steps":["Run extension-deploy init in your project. It prints the OAuth client secret next to the client ID.","Copy the printed secret and paste it here.","You can also open the OAuth client on the Google Cloud credentials page and copy the secret there."],"linkLabel":"Open Google Cloud credentials"}},"extensionId":{"label":"Extension ID","placeholder":"Abcdefghijklmnopabcdefghijklmnop","errorInvalid":"Must be 32 lowercase letters.","helperText":"Find this 32-character ID in your Chrome Web Store Developer Dashboard. It appears in the extension's URL and item details page.","whereToGet":{"steps":["Open the Chrome Web Store developer console and click your extension.","Look at the address bar. The 32 letter string at the end of the URL is the extension ID.","Copy that string and paste it here.","New account? Pay the one time $5 developer registration and upload the first version manually. API publishing only works after that first manual upload."],"linkLabel":"Open the developer console"}},"publisherId":{"label":"Publisher ID","placeholder":"00000000-0000-0000-0000-000000000000","errorInvalid":"Must be a UUID from your Chrome Web Store dev console URL.","helperText":"Required. The publisher UUID from your dev console URL (chrome.google.com/webstore/devconsole/<UUID>).","whereToGet":{"steps":["Open the Chrome Web Store developer console and go to the Account page.","Copy the publisher ID shown there. It is the same UUID that appears in the developer console URL.","Paste the UUID here."],"linkLabel":"Open the developer console"}},"serviceAccountJson":{"label":"Service account key (JSON)","placeholder":"Paste the JSON key downloaded from the Google Cloud Console","helperText":"Optional alternative to the OAuth fields below, and immune to the 7-day refresh-token expiry. Create a service account with the Chrome Web Store API enabled, add its email to your publisher (dev console > Account), and paste the JSON key here.","errorInvalid":"Must be the full JSON key including client_email and private_key.","whereToGet":{"steps":["In the Google Cloud console, create a service account under IAM and admin, then Service accounts.","Open the account, go to the Keys tab, and add a new JSON key. The file downloads once.","On the Chrome Web Store Account page, grant that service account email access to your publisher.","Paste the full contents of the downloaded JSON file here."],"linkLabel":"Open Google Cloud service accounts"}},"refreshToken":{"label":"Refresh token","placeholder":"Your OAuth2 refresh token","whereToGet":{"steps":["Run extension-deploy init in your project and finish the Google sign in it opens.","Copy the refresh token it prints and paste it here.","Testing consent expires every 7 days, so this token stops working weekly. Prefer the service account key above for automation."]}},"deployPercentage":{"label":"Staged rollout percentage","placeholder":"100","helperText":"Percentage of users who receive the update (1-100). Leave empty for a full rollout.","requirement":"Chrome only allows staged rollout for extensions with more than 10,000 weekly users. Below that, leave this at full rollout.","footgun":"Publishing a new version abandons an in-progress rollout, and Chrome does not allow more than one rollout at a time."},"reviewExemption":{"title":"Request expedited review","description":"Request an expedited review from the Chrome Web Store team. Only eligible extensions may use this.","switchAriaLabel":"Request expedited review for {storeName}"},"skipPublish":{"title":"Upload draft only","description":"Upload the new version but skip the publish step. Nothing enters review or ships; publish manually from the Chrome Web Store dashboard when ready. The safest submission mode on the v2 API.","switchAriaLabel":"Upload draft only for {storeName}"},"stagedPublish":{"title":"Staged publish","description":"Publish as a staged rollout: after approval, the rollout percentage can be raised without a new review. Pair with the rollout percentage above; ignored when uploading drafts only.","switchAriaLabel":"Staged publish for {storeName}"}},"firefox":{"apiKey":{"label":"API key","placeholder":"Your {storeName} API key","whereToGet":{"steps":["Sign in to addons.mozilla.org and accept the developer agreement if you have not yet.","Open the API credentials page and generate credentials if none exist.","Copy the JWT issuer value, which looks like user:12345:67, and paste it here."],"linkLabel":"Open the AMO API credentials page"}},"apiSecret":{"label":"API secret","placeholder":"Your {storeName} API secret","whereToGet":{"steps":["On the AMO API credentials page, find the JWT secret next to your issuer.","Copy it right away. AMO shows the secret one time only.","Paste it here. If you lost it, generate a new key pair and update both fields."],"linkLabel":"Open the AMO API credentials page"}},"addonGuid":{"label":"Add-on GUID","placeholder":"{12345678-1234-1234-1234-123456789abc}","errorInvalid":"GUID format invalid.","helperText":"Required when updating an existing add-on. For new add-ons submitting to 'unlisted' channel, leave empty and Firefox will auto-generate one. Find this in your add-on's Developer Hub page.","whereToGet":{"steps":["Open your add-on in the AMO Developer Hub.","Copy the GUID shown on the add-on page and paste it here.","A brand new add-on has no GUID yet. Leave this empty, submit the first version as unlisted, and we save the AMO assigned GUID for you."],"linkLabel":"Open the AMO Developer Hub"}},"releaseChannel":{"label":"Automated release channel","options":{"listed":"Listed","unlisted":"Unlisted"}}},"edge":{"clientId":{"label":"Publish API Client ID","placeholder":"Your {storeName} Publish API Client ID","whereToGet":{"steps":["Open the Publish API page in Partner Center.","Enable the Publish API if you have not yet. It is self contained, so do not create an Azure AD app.","Copy the client ID and paste it here."],"linkLabel":"Open the Publish API page"}},"clientSecret":{"label":"Publish API key","placeholder":"Your {storeName} Publish API key","whereToGet":{"steps":["On the same Publish API page, create a new API key.","Copy the key right away and paste it here.","Keys expire after roughly 72 days, so plan to rotate this value."],"linkLabel":"Open the Publish API page"}},"productId":{"label":"Product ID (GUID)","placeholder":"c232d32f-19e3-4dee-974b-2e62848595ab","errorInvalid":"Must be a GUID from Partner Center Extension Identity (e.g., c232d32f-19e3-4dee-974b-2e62848595ab)","helperText":"Use the Partner Center Product ID GUID required by the Edge Publish API. Automated submissions require an existing product. This is different from the short public store slug used in listing URLs.","whereToGet":{"steps":["Open Partner Center and select your extension.","Copy the Product ID GUID from the product page.","Paste it here. The Publish API requires it and rejects submissions without it."],"linkLabel":"Open Partner Center"}},"publishAfter":{"title":"Submit draft after upload","description":"When enabled, the automation submits the uploaded draft for review immediately.","switchAriaLabel":"Submit after upload for {storeName}"}},"safari":{"bundleId":{"label":"Bundle ID","placeholder":"com.example.my-extension","helperText":"Your reverse-DNS bundle identifier, registered under your Apple Developer team. Bundle IDs are permanent, so pick a name you own rather than one derived from the project slug. The extension appex uses this ID plus .extension.","errorInvalid":"Must be a reverse-DNS identifier such as com.example.my-extension."},"appAppleId":{"label":"App Store ID","placeholder":"6451234567","helperText":"The numeric ID from the app record in App Store Connect (apps.apple.com/app/id<number>). Leave empty before the first upload and it is captured for you.","errorInvalid":"Must be the numeric App Store ID."},"ascKeyId":{"label":"App Store Connect key ID","placeholder":"Key ID from the API key page"},"ascIssuerId":{"label":"App Store Connect issuer ID","placeholder":"Issuer ID from the API key page"},"ascKeyP8":{"label":"App Store Connect private key (.p8)","placeholder":"Paste the contents of the downloaded .p8 file","helperText":"The private key downloads once when the API key is created. Paste the full PEM contents or its base64 form; it is stored only as a repository secret."},"signingAssets":{"title":"Signing assets","description":"The certificates and provisioning profiles that sign the App Store package. Exported once from your Apple Developer account. Stored write-only as repository secrets."},"appCert":{"label":"Mac App Distribution certificate (.p12)","helperText":"Export the Mac App Distribution certificate and its private key as a .p12 from Keychain Access. Choose the file to upload it."},"appCertPassword":{"label":"App certificate password","placeholder":"Password you set when exporting the .p12"},"installerCert":{"label":"Mac Installer Distribution certificate (.p12)","helperText":"Export the Mac Installer Distribution certificate and its private key as a .p12 from Keychain Access. Choose the file to upload it."},"installerCertPassword":{"label":"Installer certificate password","placeholder":"Password you set when exporting the .p12"},"appProfile":{"label":"App provisioning profile","helperText":"The Mac App Store provisioning profile for your app bundle ID. Download it from the Apple Developer portal and choose the file."},"appexProfile":{"label":"Extension provisioning profile","helperText":"The Mac App Store provisioning profile for the extension (appex) bundle ID (your bundle ID with .extension appended)."}}},"setup":{"title":"Automation setup instructions","see":"See","gotchas":{"title":"Before you start","chrome":"The Google Cloud OAuth client must be a Desktop app client. A Web application client fails with redirect_uri_mismatch on the local token flow.","edge":"Use the Publish API key from Partner Center (the value labelled \"Publish API key\"). This is not an Azure AD client secret.","firefox":"For a new unlisted add-on you do not need an existing add-on GUID. Leave it blank and one is created on first upload.","safari":"The platform never creates App Store app records. Create the app once in App Store Connect under your bundle ID; the signing certificates and provisioning profile are separate repository secrets. App Review is measured in days, and uploads stay in TestFlight until you submit for review. Extension.dev uploads the build but does not read App Store review state back, so follow the review in App Store Connect."},"chrome":{"prefix":"These fields configure automated package submission only. Create a Google Cloud project, enable the {storeName} API, and create an OAuth client of type \"Desktop app\" (a \"Web application\" client rejects the loopback redirect with redirect_uri_mismatch). Then use OAuth Playground (or a loopback consent flow) with that client to obtain a long-lived refresh token.","links":{"apiDocs":"Chrome Web Store API docs","gcpConsole":"GCP Console","oauthPlayground":"OAuth Playground","devConsole":"Chrome Web Store Developer Console","credentialGuide":"Chrome credential guide (step by step)"}},"firefox":{"prefix":"These fields configure automated package submission only. Generate Firefox Add-ons (AMO) API credentials (Issuer/Secret) in Developer Hub. Use Add-on ID (GUID) only if updating an existing add-on.","links":{"apiCredentials":"Get API credentials","signingApi":"Firefox Add-ons signing API","submittingAddon":"Submitting an add-on","credentialGuide":"Firefox credential guide (step by step)"}},"edge":{"prefix":"These fields configure automated package submission only. Go to Partner Center, navigate to Edge > Publish API, click 'Turn on API' or 'New API key', then copy the Publish API Client ID and API Key. Use the Product ID GUID from Extension Identity, not the short public store slug.","links":{"addonsApi":"{shortName} API","partnerCenter":"Partner Center","publishApi":"Partner Center Publish API","visualGuide":"Edge credential guide (step by step, with screenshots)"}},"safari":{"prefix":"These fields configure automated build upload only. Create an App Store Connect API key (App Manager role), register your bundle ID, and create the app record in App Store Connect before the first submission.","links":{"credentialGuide":"Creating App Store Connect API keys","apiKeys":"Open App Store Connect API keys","appRecords":"Open your apps in App Store Connect","distributionDocs":"Distributing a Safari web extension"}}},"disclosure":{"title":"Where your credentials live","storage":"Credentials you save here are encrypted client-side by GitHub and stored as GitHub Actions secrets on this project's private mirror repository in the extensiondev GitHub org (one mirror per project). They are never stored in the extension.dev database, and they are write-only: after you save, they cannot be read back or displayed again - not by you, not by the dashboard. Only the mirror's submission CI, which extension.dev operates, can use them.","blastTitle":"What each credential can do if it leaks","blast":{"chrome":"Chrome: an OAuth refresh token or service account key grants upload and publish for every extension its Google account or publisher can manage, not just this project.","firefox":"Firefox: an AMO API key and secret grant the full add-ons API for that Mozilla account, covering all of its add-ons.","edge":"Edge: a Publish API client ID and key grant the Publish API for every product in that Partner Center account.","safari":"Safari: an App Store Connect API key grants the App Store Connect API for every app in that Apple Developer account, scoped by the role the key was created with."},"rotate":"To rotate a credential, paste the new value over the old one (leaving a field blank keeps the current value). To revoke a leaked credential, invalidate it at the provider; the per-store guides show where.","guides":{"chrome":"Chrome credential guide","firefox":"Firefox credential guide","edge":"Edge credential guide","safari":"App Store Connect key guide"}}},"channels":{"header":{"title":"Release channels","description":"Manage preview and stable release channels for your extension."},"githubRelease":{"title":"GitHub Release per shipped version","description":"When you promote a build to a channel, also create a GitHub Release and tag on your source repo, with each browser's built package attached. Non-stable channels are marked pre-release. Off by default.","toggleLabel":"Create a GitHub Release on promote","savedOn":"GitHub Releases enabled for this project","savedOff":"GitHub Releases disabled for this project","saveError":"Couldn't update the GitHub Release setting","loadError":"The current setting couldn't be loaded, so the switch is disabled. Reload to try again."},"errors":{"failedToCreate":"Failed to create channel","failedToDelete":"Failed to delete channel","protectedChannel":"Default channels can't be deleted."},"create":{"title":"Create channel","description":"Create a release channel for previews, staged rollouts, or production releases.","fields":{"nameLabel":"Channel name","namePlaceholder":"beta","nameHintPrefix":"Use lowercase names like","canaryToken":"Preview","nameHintMiddle":"for previews,","stableToken":"Stable","nameHintSuffix":"for production, or create your own channel slug.","badgeColorLabel":"Badge color","descriptionLabel":"Description","descriptionPlaceholder":"Describe this channel's purpose"},"actions":{"create":"Create channel","creating":"Creating channel...","creatingHint":"Saving channel metadata to your mirror repository."},"errors":{"invalidNameTitle":"Invalid channel name","invalidNameDescription":"Use lowercase letters, numbers, and hyphens only.","alreadyExistsTitle":"Channel already exists","alreadyExistsDescription":"You already have a \"{name}\" channel."},"notifications":{"createdTitle":"Channel created"}},"existing":{"title":"Existing channels","description":"Existing channels on this project.","count":{"one":"1 channel","many":"{count} channels"},"empty":"No channels created yet.","createdLabel":"Created","descriptionFallback":"-","actions":{"removeAriaLabel":"Remove {name} channel","removeConfirm":"Delete the {name} channel? Its channel pins are removed for every browser and this can't be undone."},"notifications":{"removedTitle":"Channel removed"}}},"states":{"failedToLoad":"Couldn't load these settings","failedToLoadDescription":"The current values couldn't be fetched, so editing is disabled to protect what's saved. Retry to load them."},"accessTokens":{"section":{"label":"Access tokens","description":"Mint and revoke CLI access tokens, and connect AI agents via MCP."},"mint":{"title":"Mint access token","description":"Long-lived bearer token for CLI use, CI scripts, and any tool that needs to read this project's private artifacts. Token is shown once; copy it before leaving this page.","labelLabel":"Label","labelPlaceholder":"e.g. CI deploy","ttlLabel":"TTL (days)","minting":"Minting...","action":"Mint token","ttlError":"TTL must be between 1 and 7 days.","mintedTitle":"Access token minted.","mintFailed":"Failed to mint token","copyNow":"Copy this token now. It will not be shown again.","copyTokenAriaLabel":"Copy access token","tokenIdLabel":"Token id","expiresLine":"expires {date}"},"outstanding":{"title":"Outstanding tokens","description":"Revoking a token denies it on the registry within ~60 seconds (worker cache TTL).","loading":"Loading...","loadFailed":"Failed to load access tokens","loadErrorBody":"The token list couldn't be loaded.","tryAgain":"Try again","empty":"No tokens have been minted for this project yet.","unlabeled":"(unlabeled)","status":{"active":"active","revoked":"revoked","expired":"expired"},"issuedLine":"issued by {user} on {date}","expiresLine":"expires {date}","revokedLine":"revoked by {user} on {date}","revoking":"Revoking...","revoke":"Revoke","confirmRevoke":"Revoke this token? Anything using it loses access.","revokeFailed":"Failed to revoke token","revokedTitle":"Token revoked.","alreadyRevokedTitle":"Token was already revoked.","propagationPendingTitle":"Token revoked; registry propagation pending.","propagationPendingDescription":"The revocation list publish failed, so the registry may briefly keep honoring this token. It is enforced on the next republish."},"agent":{"title":"Agent access (MCP)","description":"Give AI agents hands on this project. The @extension.dev/mcp server exposes tools to scaffold, run, inspect, publish, and promote; pair it with the @extension.dev/skill playbooks so agents verify against the live browser instead of guessing.","connectLabel":"Connect the MCP server (Claude Code; any MCP client works)","loginLabel":"Log the server in to this project (approve the code at extension.dev/device)","promoteLabel":"Headless release promotion with an access token from above","copyCommandAriaLabel":"Copy command: {label}"}},"visibility":{"section":{"label":"Visibility","description":"Choose who can view this project's artifacts."},"card":{"title":"Project visibility","description":"Private projects require workspace membership to view artifacts. Public projects stay accessible to anyone with the URL."},"state":{"private":"Private","public":"Public","loading":"Loading...","unavailable":"Unavailable","privateDescription":"Only workspace members can load build pages and download artifacts.","publicDescription":"Anyone with the URL can load build pages and download artifacts.","loadingDescription":"Fetching the current visibility.","unavailableDescription":"The current visibility couldn't be loaded."},"confirmPublic":"Make this project public? Anyone with the URL will be able to load build pages and download artifacts.","confirmPrivate":"Make this project private? Only workspace members will be able to view artifacts.","toasts":{"loadFailed":"Failed to load visibility","saveFailed":"Failed to update visibility","savedPrivate":"Visibility set to private","savedPublic":"Visibility set to public","propagatingTitle":"Visibility saved; gating still propagating.","propagatingDescription":"The private index publish didn't land yet, so artifacts may stay reachable briefly. It self-heals shortly."},"tryAgain":"Try again","footnote":"Changes take effect right away. Switching to private purges cached public responses from the edge, which can take a moment to propagate worldwide.","toggleAriaLabel":"Toggle project visibility"}},"new":{"auth":{"signInTitle":"Please sign in to view your repositories","signInButton":"Sign in with GitHub","signInAriaLabel":"Sign in with GitHub"},"header":{"title":"Select repository","description":"Choose a repository to import and configure for builds and previews."},"empty":{"authorizeTitle":"Authorize the Extension.dev GitHub App","authorizeButton":"Authorize GitHub App","authorizeAriaLabel":"Authorize the Extension.dev GitHub App","templateAlternative":"Not ready to connect GitHub?","templateButton":"Start from a template instead","templateAriaLabel":"Start a new extension from a template instead of connecting GitHub"},"installations":{"selectFallback":"Select a GitHub installation","triggerAriaLabel":"Choose a GitHub installation","selected":"Selected","itemIdSrOnly":"Installation ID {id}.","authorize":{"title":"Authorize new installation","description":"Connect the Extension.dev GitHub App to another org or user to discover more repositories."}},"repositories":{"searchPlaceholder":"Search repositories…","tableLabel":"Repositories","columns":{"repository":"Repository","updated":"Updated"},"emptyForInstallation":"No repositories available for the selected installation.","connected":"Connected","row":{"importAriaLabel":"Import {repo}","openConnectedAriaLabel":"Open the {repo} project","updatedSrOnly":"Updated"},"noMatches":"No repositories match your search. Search covers every repository the GitHub App can access, so if one is missing, grant the app access to it on GitHub."},"metadataHeader":{"title":"New extension","description":"Create a new extension project."},"primaryAction":{"title":"New extension","description":"Connect a repository"},"metadataActions":{"startFromTemplates":{"title":"Start from templates","description":"Browse starter projects"}},"settings":{"trigger":{"title":"Project settings"},"shell":{"title":"Project settings","subtitleFallback":"Untitled project"},"common":{"applyChanges":"Apply changes"},"sections":{"general":{"label":"General","description":"Name and basic info"},"git":{"label":"Git","description":"Choose the GitHub account and repository this project uses."}},"identity":{"title":"Project identity","description":"Name and template","fields":{"projectNameLabel":"Project name","projectNamePlaceholder":"My-awesome-extension","templateLabel":"Template","templatePlaceholder":"Blank | popup | background | options"}},"browsers":{"title":"Target browsers","description":"Choose which browsers you want to support.","browserLabel":"{Browser}"},"git":{"title":"Git repository","description":"Pick the GitHub account and repository for this template.","fields":{"ownerLabel":"GitHub user or organization","repoLabel":"Repository name","repoPlaceholder":"my-extension","privateLabel":"Private repository"}}},"metadataTable":{"title":"Project details","description":"Defaults for your new extension","rows":{"repository":{"label":"Repository","connected":"Connected","notConnected":"Not connected"},"defaultBranch":{"label":"Default branch"}}}},"templates":{"header":{"title":"Templates","description":"Pick a starter template and preview the layout before creating."},"preview":{"alt":"Template preview","altWithName":"Preview of {name}","placeholderTitle":"Pick a template to get started","placeholderDescription":"Choose a template from the dropdown to see a live preview and project details.","unavailable":"Preview not available for this template yet.","viewDetails":"View details","viewSource":"View source"},"dropdown":{"placeholder":"Select a template","triggerAriaLabel":"Select a template"},"errors":{"fetchFailed":"Unable to load templates right now."},"description":{"title":"Template description","empty":"No template description available yet."},"table":{"label":"Templates","searchPlaceholder":"Search templates…","count":"{count} templates available","selected":"Selected","viewRepo":"View repo","columns":{"template":"Template","preview":"Preview"},"previewAction":"Preview","useTemplateAction":"Use template","row":{"selectAriaLabel":"Select template {name}"},"empty":"No templates match your search.","emptyWithQuery":"No templates match your search. Try a different keyword.","emptyCatalog":"No templates are available right now. Please try again shortly."},"detailsTable":{"title":"Project details","description":"Template metadata for the selected project","empty":"Select a template to view details","repository":"Repository","context":"Context","jsFramework":"JS framework","css":"CSS","difficulty":"Difficulty","tags":"Tags","hostAccess":"Host access"},"metadataActions":{"startFromGithub":{"title":"Create from GitHub","description":"Connect a repository"}}},"import":{"about":{"title":"What happens when you create this","description":"The steps Extension.dev runs for you, start to finish.","steps":{"repo":{"title":"A repository is created","body":"Extension.dev creates a new repository from this template in the GitHub account or organization you select above.","titleExisting":"Your repository is connected","bodyExisting":"Extension.dev connects the existing GitHub repository you selected so it can push commits, run builds, and open preview deployments for you."},"authorize":{"title":"The GitHub App is authorized","body":"You grant the Extension.dev GitHub App access to that repository so it can push commits, run builds, and open preview deployments for you."},"build":{"title":"Your extension is built","body":"Each push builds your extension for the browsers you picked and produces a shareable preview you can load unpacked."},"publish":{"title":"Ship to the stores","body":"When you are ready, submit the same build to the Chrome Web Store, Edge Add-ons, and Firefox from your dashboard."}},"scopeNote":"Extension.dev only accesses the repository created here, never your other repositories.","mirrorNote":"A companion build mirror repository is created under the extensiondev organization to run your builds and previews. Your source code stays in your repository."},"page":{"loading":"Loading project details…"},"states":{"loading":{"title":"Loading deployment setup…","indicator":"Loading deployment setup…"},"unauthenticated":{"title":"Please sign in to continue","signInButton":"Sign in with GitHub","signInAriaLabel":"Sign in with GitHub"},"finishingAuth":{"title":"Finishing authorization...","subtitle":"This window will close automatically.","stalledTitle":"Still working on it?","stalledBody":"If this window didn't close on its own, you can continue here or close it and return to the original tab.","continue":"Continue here","close":"Close window"}},"defaults":{"newExtensionDisplayName":"New extension","newExtensionDescription":"A browser extension project"},"header":{"title":"Project settings","description":"Set name, Git target, builds, and deployment defaults. You can change these later.","templateTitle":"Deploy {name}","templateDescription":"Create a GitHub repository from this template, connect it to Extension.dev, and start the first build.","templateFallbackName":"template","templateBackLink":"Back to template","templateRepositoryLink":"View template source","templateVisitLink":"Visit template","templateLoadFailed":"We couldn't load this template's details. You can still set the name and repository below and continue."},"buildConfig":{"title":"Build config","description":"Set the root directory and the per-browser build output for this project."},"actions":{"createProject":"Create project","creating":"Creating…","createTemplateProject":"Create repository and deploy","creatingTemplateProject":"Creating repository and deploy…","signInToCreateTemplateProject":"Sign in with GitHub to create","groupTitle":"Project files","groupDescription":"Optionally prepare the environment variables and usage docs that ship with your project.","openEnvironmentVariables":"Environment variables","environmentVariablesDescription":"Set values that build commands can read, like API keys or feature flags.","environmentVariablesCallToAction":"Configure","openUsageDocs":"Usage notes","usageDocsDescription":"Write the USAGE.md that ships with the project's docs.","usageDocsCallToAction":"Edit","openWhatHappens":"What happens when you create this","workspaceDestination":"The project will be created in the {workspace} workspace."},"notifications":{"buildDispatchedTitle":"Build dispatched","viewInGithubActions":"View in GitHub Actions","templateRepoFailedTitle":"Repository setup failed","createFailedTitle":"Project creation failed"},"template":{"authorizeHint":"Choose where the new GitHub repository should live. Extension.dev will guide authorization next.","permissionHint":"This GitHub installation still needs repository administration access before Extension.dev can create the repository.","permissionRetryHint":"GitHub returned, but this installation still cannot create the repository.","permissionRetryAction":"Request permissions again","installSignal":{"requested":"Installation request sent to {owner} admins. We'll list the org here once they approve.","cancelled":"Installation didn't complete. Pick another owner or try again.","unknown":"GitHub returned an unexpected response. Try again, or pick another owner.","dismiss":"Dismiss"},"repositoryHint":"Choose a repository name for the new GitHub project.","preflightChecking":"Checking availability…","preflightAvailable":"That repository name is available and ready to use.","preflightTaken":"That repository already exists. Pick a different name, or delete the existing repository on GitHub first.","preflightError":"We couldn’t confirm repository access. Check your GitHub connection and try again.","gitDescription":"Pick the GitHub account, repository name, and visibility for the new project created from this template.","browserDefaultsTitle":"Target browsers","browserDefaultsDescription":"Choose where the first build should ship. You can fine-tune commands and output directories later.","browserToggleDescription":"Enable the first build for {browser}.","advancedBuildsTitle":"Build commands and output directories","advancedBuildsDescription":"Review or override the default commands only if this template needs custom build settings.","advancedDeploymentTitle":"Deployment defaults","advancedDeploymentDescription":"Branch, Node version, and release automation defaults for the new project.","authorizeDialog":{"title":"Authorize GitHub repository creation","noInstallationDescription":"To create \"{repo}\", connect the Extension.dev GitHub App first. We’ll return here and continue setup automatically after authorization.","insufficientPermissionDescription":"To create \"{repo}\", GitHub needs you to approve repository administration access for the Extension.dev GitHub App. We’ll return here and continue setup automatically after authorization.","insufficientPermissionSteps":"On GitHub, open Extension.dev and approve the requested repository administration access for this installation.","tokenExpiredTitle":"Your GitHub connection expired","tokenExpiredDescription":"Reconnect your GitHub account to keep creating \"{repo}\". Reinstalling the app will not refresh an expired connection.","cancel":"Cancel","continue":"Continue on GitHub"}},"progress":{"header":{"title":"Setup progress","description":"Track project setup and the first build in one place.","templateTitle":"Deployment progress","templateDescription":"We’re creating the repository, configuring Extension.dev, and starting the first build."},"branchLabel":"Branch {branch}","rootDirectoryLabel":"Project root:","rootDirectoryRepositoryRoot":"repository root","inProgress":"In progress","queued":"Up next","viewBuilds":"Open build","softTimeoutHint":"This is taking longer than usual. Your project may still be finishing setup; you can keep waiting or follow the run for details.","creatingProject":"Starting setup","startingTitle":"Starting setup","startingDescription":"We are preparing your project and will show each milestone here as it becomes available.","stepCounter":"Step {current} of {total}","redirectNotice":"You’ll be redirected as soon as provisioning finishes.","buildDispatchedLink":"First build opened in GitHub Actions","buildStatus":{"running":"First build running","succeeded":"First build ready","failed":"First build needs attention"},"status":{"success":"Done","failed":"Needs attention"},"actions":{"show":"Show","hide":"Hide","cancel":"Cancel"},"error":{"title":"Creation failed","unknown":"Unknown error"},"steps":{"prepareTemplateRepo":"Preparing your repository (about a minute)","preparingGeneratedRepository":"Creating your repository and committing your files","validateRequest":"Checking your setup","checkRepository":"Confirming repository availability","createMirrorRepository":"Preparing your project repository","seedMirrorPlatformSecrets":"Applying secure project settings","prepareGeneratedMirrorRepository":"Preparing generated project files","createUserRepository":"Creating your GitHub repository","commitGeneratedFiles":"Committing your generated files","registerProject":"Registering your project","fetchRepositoryInfo":"Reviewing repository details","generateConfiguration":"Generating project settings","writeSettingsJson":"Saving project settings","writeChannelsJson":"Saving release channels","seedMetaAndLinks":"Saving project metadata","seedRepositorySecrets":"Saving secure repository values","uploadCustomIcon":"Uploading your icon","createPagesSeeds":"Preparing deployment pages","dispatchFirstBuild":"Queueing the first build","finalize":"Wrapping up setup"},"groupSteps":{"validateUserRequest":"Validating user request","checkRepositoryAvailability":"Checking repository availability","createRegistry":"Creating registry for {repo}","writeRegistrySettings":"Writing build and deployment settings to the registry","prepareReleaseChannels":"Preparing release channels for the registry","seedDeploymentPage":"Setting up the public deployment page"}},"clone":{"repositoryAlreadyExists":"Repository already exists","repositoryCreatedSuccessfully":"Repository created successfully","noBuildWorkflowDetected":"No build workflow detected","skippingFirstBuildNoCommitsFound":"Skipping first build (no commits found)","initialBuildAfterImport":"Initial build after import","apiErrors":{"invalidSettingsJsonStructure":"Invalid settings.json structure","sourceRepoNotFoundOrGithubAppPermissions":"The source repository could not be found, or the GitHub App does not have the required permissions.","repositoryAccessDeniedInstallApp":"We couldn't access {owner}/{repo}. Make sure the repository exists and install the extensiondev GitHub App on {owner} with access to it, then try again.","templateRepositoryNotFoundOrAccessDenied":"The template repository could not be found, or the GitHub App does not have access to it.","templateRepositoryNotMarkedAsTemplate":"The template repository is not marked as a GitHub template. Please enable \"Template repository\" in the repo settings.","insufficientPermissionsToCreateRepository":"Insufficient permissions to create repository","failedToCreateRepository":"Failed to create repository","missingRequiredProjectMetadata":"Missing required project metadata (displayname, description)","missingRequiredGithubConfiguration":"Missing required GitHub configuration (installationid, owner, repo)","invalidProjectUrlFormat":"Invalid project URL format","validationError":"Validation error: {message}"},"seeds":{"pages":{"usageMd":"# Usage\n\nThis project uses the preview channel for releases."},"channels":{"canaryDescription":"Preview builds from pull requests and feature branches","stableDescription":"Production-ready release from the main branch"}}},"metadataActions":{"menu":{"newFromTemplate":{"title":"Import from template","description":"Start a new project from a template"}}},"metadataTable":{"title":"Project details","description":"Defaults for your new extension","rows":{"repository":{"label":"Repository","notConnected":"Not connected"},"defaultBranch":{"label":"Default branch"},"rootDirectory":{"label":"Root directory","repositoryRoot":"Repository root"},"targetBrowsers":{"label":"Browser support","notConfigured":"No build setup configured"},"homepageUrl":{"label":"Homepage URL","notSet":"Not set"}}},"settings":{"trigger":{"title":"Project settings","description":"Open project settings","disabledDescription":"Unavailable"},"shell":{"title":"Project settings","subtitleFallback":"Untitled project"},"common":{"applyChanges":"Apply changes"},"git":{"title":"Git repository","description":"Pick the GitHub account and repository for this template.","fields":{"ownerLabel":"GitHub user or organization","repoLabel":"Repository name","repoPlaceholder":"my-extension","privateLabel":"Private repository"}},"sections":{"general":{"label":"General","description":"Name and basic info"},"git":{"label":"Git","description":"Choose the GitHub account and repository this project uses."},"builds":{"label":"Browser builds","description":"Configure build settings"},"environment":{"label":"Environment","description":"Variables & secrets"},"usage":{"label":"Usage notes","description":"Seed the project's USAGE.md documentation"},"deployment":{"label":"Deployment","description":"Branch & Node.js"}},"general":{"panels":{"projectDetailsTitle":"Project details","deploymentSlugLabel":"Deployment slug","webPresenceTitle":"Web presence"}}}},"activity":{"header":{"title":"Activity","description":"Recent milestones, build outcomes, releases, and store updates for this project."},"timeline":{"title":"Recent activity"},"summary":{"title":"Activity summary","labels":{"builds":"Builds","releases":"Releases","storeStatus":"Store","lifecycle":"Lifecycle"},"actions":{"view":"View"},"values":{"successful":"Successful","failed":"Failed","published":"Published","promoted":"Promoted","latest":"Latest","none":"None yet","approved":"Approved","pending":"Pending","rejected":"Rejected","milestones":"Milestones","started":"Started","unknown":"Unknown"}},"filters":{"time":{"all":"All time","today":"Today","week":"This week","month":"This month"},"type":{"all":"All activity","builds":"Builds","releases":"Releases","stores":"Stores","lifecycle":"Lifecycle"}},"empty":{"title":"No activity yet","description":"Create the project, run a build, or publish a release to start building this timeline."},"group":{"eventCount":"{count} {count, plural, one {event} other {events}}"},"errors":{"loadFailed":"Some activity items may be missing right now."},"chips":{"actor":"Actor","commit":"Commit","browsers":"Browsers","duration":"Duration","build":"Build","target":"Target","repository":"Repository","version":"Version","fallback":"-"},"subtitle":{"channel":"Channel {channel}","releases":"Releases","stores":"Stores"},"events":{"projectCreated":{"title":"Project created"},"projectDeleted":{"title":"Project deleted","subtitle":"Project lifecycle"},"buildFailed":{"title":"Build failed","subtitle":"Needs attention"},"buildSucceeded":{"title":"Build completed","subtitle":"Ready to review"},"buildRecovered":{"title":"Build fixed","subtitle":"Recovered after a failure"},"buildInProgress":{"title":"Build in progress","subtitle":"Currently running"},"releasePublished":{"title":"Release published"},"releasePromoted":{"title":"Release promoted","movedTo":"Moved to {channel}"},"releaseFailed":{"title":"Release failed"},"releaseUpdated":{"title":"Release updated"},"releaseActivity":"Release activity","storeReview":"Store review","storeSubmitted":{"title":"Store submission sent","withStore":"Submitted to {store}"},"storeApproved":{"title":"Store submission approved","withStore":"{store} approved it"},"storeRejected":{"title":"Store submission rejected","withStore":"{store} requested changes"},"storeUpdated":{"title":"Store status updated","withStore":"{store} status changed"},"fallback":{"title":"Activity updated","subtitle":"Project activity"}}},"promoteToChannelMenu":{"ariaLabel":"Promote to channel","promoteTo":"Promote to {channel}","descriptions":{"canary":"Share a preview build for review.","beta":"Promote to beta for limited rollout.","stable":"Move to stable for full release."}},"stores":{"states":{"resolvingProject":"Resolving project…","failedToLoad":"Couldn't load store data. Try again.","failedToLoadDescription":"Refresh the page or try again in a moment."},"errors":{"statusUnavailable":"Store status is temporarily unavailable."},"metadataPanel":{"metadataHeader":{"description":"Project context. Store-specific details are shown on the right."},"actions":{"primary":{"title":"View live listing","description":"Open in a new tab"},"menu":{"viewLiveListing":{"title":"View live listing","description":"Open the current store page"},"viewBuildDetails":{"title":"View build details","descriptionWithId":"Open build #{id}"},"copyBuildId":{"title":"Copy build ID","description":"Copy the latest build ID"},"downloadPackage":{"title":"Download ZIP","description":"Download the latest extension package (.zip)"},"noBuildAvailable":"No build available"}},"summaryTable":{"title":"Store listing summary","description":"Key information about this store listing."},"help":{"manifestVersion":{"title":"Manifest version","description":"The browser extension manifest version used by this project (e.g. Manifest V3). This affects capabilities and store compliance."},"currentVersion":{"title":"Current version","description":"The version currently associated with this store listing."},"permissions":{"title":"Permissions","description":"Permissions requested by the extension. Stores review these carefully because they impact user privacy and security."},"background":{"title":"Background","description":"The background entry point (service worker/event page) responsible for long-lived logic and event handling."},"contentScripts":{"title":"Content scripts","description":"Scripts injected into matching pages. These run in the context of websites and are governed by match patterns."},"fallback":{"title":"Field","description":"Extra context for this store field."}}},"api":{"storeDetails":{"defaults":{"status":"Unknown","version":"0.0.0","conversionRate":"0%","health":"Unknown","growth":"Flat","dataUsage":"Unknown","updateFrequency":"Unknown"}}},"header":{"title":"Stores","description":"Automation readiness and submission activity across browser stores."},"empty":{"noStoresConnectedTitle":"No live store listings yet","noStoresConnectedDescription":"Published listings and their download and rating stats appear here once a submission goes live. Manage store connections from the Stores tab."},"headings":{"storeOverview":"Store overview","storePresence":"Automation coverage","recentSubmissions":"Recent submissions"},"overview":{"stats":{"enabledAutomation":{"label":"Automation","description":"Stores enabled"},"readyToQueue":{"label":"Queue-ready","description":"Credentials"},"sharedCoverage":{"label":"Stores fully shared","description":"Stores with every reusable field set"},"latestSubmission":{"label":"Latest update","description":"{store} · {status}","emptyValue":"No submissions yet","emptyDescription":"No submissions yet"}}},"storePresence":{"openInStoreAriaLabel":"Open {storeName} listing","labels":{"rolloutMode":"Rollout","sharedData":"Reusable fields","secrets":"Secrets","latestEvent":"Latest event"},"states":{"disabled":"Disabled","ready":"Automation ready","needsSetup":"Needs setup","credentialsFailing":"Credentials failing"},"values":{"ready":"Ready","missing":"Missing","notConfigured":"Not configured"}},"recentSubmissions":{"openInStoreAriaLabel":"Open {storeName} listing","submittedLabel":"Submitted","emptyTitle":"No submissions yet","emptyDescription":"When you submit to a store, updates will show up here."},"new":{"title":"Connect a store","description":"Store connections live in project settings. You'll be taken to Settings > Stores to add credentials for Chrome, Firefox, Edge, or Safari."},"single":{"assignedGuid":{"title":"Firefox assigned this add-on a GUID","description":"AMO assigned the GUID {guid} on the last submission. Save it to your store settings so the next submission updates this add-on instead of creating another new one.","save":"Save GUID to store settings","saving":"Saving…","saved":"GUID saved to store settings.","saveFailed":"Couldn’t save the GUID. Try again, or paste it into Settings > Stores."},"errors":{"couldntLoadTitle":"Couldn’t load store details","couldntLoadDescription":"We couldn’t fetch {storeName} details yet. Please try again."},"header":{"description":"Automation status, reused project data, and submissions for {storeName}."},"storeDetails":{"title":"Automation status","description":"Configuration Extension.dev can actually use for automated submissions.","disabledTitle":"{storeName} automation is disabled","disabledDescription":"Enable store automation in settings before queueing submissions or reviewing store-specific readiness here.","labels":{"storeId":"Store ID","automationEnabled":"Automation enabled","automationSecrets":"Automation secrets","rolloutMode":"Rollout mode","liveListing":"Live listing","updateFrequency":"Update frequency","supportContact":"Support contact"},"actions":{"copyStoreIdAriaLabel":"Copy store ID","copyStoreIdTitle":"Copy store ID","viewLiveListing":"View live listing","openSettings":"Open settings"},"values":{"ready":"Ready","notSet":"Not set","notPublished":"Not published yet"}},"reusedData":{"title":"Reused project data","description":"These values come from shared project settings and assets instead of store-specific forms.","summary":"{available} of {total} reusable fields ready","manageAction":"Manage in project settings","status":{"available":"Ready","missing":"Missing"},"values":{"missing":"Missing from shared project data"}},"providerManaged":{"title":"Provider-managed requirements","description":"These steps still belong to the store dashboard or reviewer workflow after automation runs.","status":{"warning":"Action needed","info":"Provider-owned"}},"submissions":{"title":"Submissions","disabledTitle":"Submissions unavailable","disabledDescription":"Enable {storeName} automation to queue submissions and review submission history on this page.","actions":{"create":"Create submission","viewAll":"View all","created":"Submission queued","createdDescription":"{store} submission for {channel} ({buildId}) has been queued.","failed":"Failed to create submission","failedDescription":"Please try again in a moment."},"new":{"title":"Create submission","description":"Choose a release source and queue an automated submission for {store}.","emptyTitle":"No release available","emptyDescription":"No {store} release is ready to submit. Promote a build to a release channel, and make sure {store} builds are enabled for this project.","releaseSectionTitle":"Submission source","releaseSelectLabel":"Release and build","previewTitle":"Submission preview","summaryLine":"Submitting {store} for channel {channel}, version {version}, build {buildId}.","summaryLineNoVersion":"Submitting {store} for channel {channel}, build {buildId}.","preflight":{"title":"Preflight checks","description":"Review what Extension.dev can automate, what it reuses from project data, and what still requires provider-side follow-up before queueing this submission.","release":"Release selected","build":"Build available for this store","storeEnabled":"Store publishing is enabled","storeConfigured":"Store configuration is present","connection":"Store API connection check","metadata":"Store listing metadata readiness","checkConnection":"Check automation setup","checkingConnection":"Checking automation setup...","openSettings":"Open automation settings","connectionPassMode":"Automation settings and required secrets are saved. Current rollout mode: {mode}.","connectionPassGeneratedAddon":"Firefox is ready to create a new unlisted add-on from this upload.","connectionDerivedUrl":"Store ID is configured. The public listing URL will be derived automatically.","connectionWarn":"Connection check could not be fully verified from this step.","connectionDisabled":"Automated store submission is disabled in project settings.","connectionMissingConfig":"A required automation identifier is missing in project settings.","connectionMissingSecrets":"Required store secrets are missing: {secrets}.","connectionBroadMode":"Current rollout mode is broader than a draft or limited rollout: {mode}.","connectionUnavailable":"Connection endpoint is not available for this store yet.","blockingHint":"Resolve failed checks before creating the submission.","prefillTitle":"Prefilled values","metadataMissing":"Missing listing fields: {fields}.","summary":{"blockersTitle":"Resolve these before submitting","blockersSubtitle":"{count} item needs your attention before this submission can be queued.","blockersSubtitlePlural":"{count} items need your attention before this submission can be queued.","readyTitle":"Ready to submit","readySubtitle":"Extension.dev handled the automated checks. Review the details below, then queue the submission.","errorTitle":"Couldn't run the readiness checks","errorSubtitle":"We couldn't verify this submission yet. Check your store connection and try again before submitting.","handledNote":"{count} check handled for you.","handledNotePlural":"{count} checks handled for you.","connectStore":"Connect store","proofToggle":"Show all checks","proofToggleHide":"Hide all checks","reviewNeededTitle":"Ready to queue, store review still needs a few items","reviewNeededSubtitle":"{count} listing item is managed in the store's dashboard. It won't block queueing, but the store needs it before review can approve.","reviewNeededSubtitlePlural":"{count} listing items are managed in the store's dashboard. They won't block queueing, but the store needs them before review can approve."},"groups":{"automated":{"title":"Automated by Extension.dev","description":"These checks cover workflow inputs, repository secrets, and queueing readiness that Extension.dev can act on directly."},"shared":{"title":"Reused from shared project data","description":"These listing checks reuse project-wide metadata and assets instead of asking for store-specific duplicates.","reusedDataTitle":"Reused project data","missingValue":"Missing from shared project data","status":{"available":"Ready","missing":"Missing"}},"provider":{"title":"Still provider-managed","description":"These requirements still live in the store dashboard or reviewer workflow even after Extension.dev queues the submission.","status":{"warning":"Action needed","info":"Provider-owned"}}},"pass":"Pass","warn":"Warning","fail":"Fail","connectionPassConfig":"Automation settings and required secrets are saved.","loadingHint":"Running the readiness checks…","errorHint":"The readiness checks couldn't run. Check the store connection and try again.","documentation":"Documentation","expected":"Expected: {value}","actual":"Actual: {value}","stages":{"integration":"Integration","review":"Review"}},"mode":{"heading":"What this submission will do","rolloutSafe":"Safe rollout","rolloutBroad":"Broad rollout","broadWarning":"This is a broad, public-facing rollout, not a limited or draft submission.","pending":"The exact submission mode is confirmed during preflight."},"creating":"Creating submission...","create":"Create submission","emptyCreateRelease":"Create release","emptyOpenBuildSettings":"Build settings","progress":{"title":"Submission progress","description":"Track queueing, record creation, and redirect.","steps":{"queue":"Queueing submission to the store pipeline","create":"Confirming the submission record","redirect":"Redirecting to submission details"}},"buildOptionLabel":"build {sha}"},"detail":{"failureHelp":"What to check for {storeName} failures","title":"Submission {id}","titleFallback":"Submission","description":"Submission details and lifecycle for {store}.","loading":"Loading submission details...","notFoundTitle":"Submission not found","notFoundDescription":"We couldn't locate this submission yet.","sectionTitle":"Submission details","labels":{"status":"Status","version":"Version","channel":"Channel","build":"Build","submittedAt":"Submitted at","approvedAt":"Approved at","submissionId":"Store submission ID","failureReason":"Failure reason","assignedGuid":"Assigned add-on GUID"}},"list":{"title":"{storeName} submissions","description":"Track all submissions for this store.","emptyTitle":"No submissions yet","emptyDescription":"Create a submission to start tracking review progress."}},"tabs":{"metadata":{"storeRequirementsTitle":"Store requirements","privacyPermissionsTitle":"Privacy & permissions","permissionsUsedTitle":"Permissions used","dataUsageTitle":"Data usage","supportContactTitle":"Support contact","requirements":{"chrome":["Manifest V3 compliance","Privacy policy required","Store listing description (min 132 chars)","Screenshots (1280x800 minimum)","Valid icons (16×16, 48×48, 128×128)"],"firefox":["Manifest V2/V3 support","Add-on review guidelines compliance","Source code availability","Privacy policy (if data collection)","Valid Firefox Add-ons (AMO) metadata"],"edge":["{Edgestorename} policies compliance","Manifest V3 required","Store listing content","Age rating classification","Valid certification requirements"]}},"analytics":{"storePerformanceTitle":"Store performance","storeDetailsTitle":"Store details","stats":{"weeklyDownloads":{"label":"Weekly downloads","description":"Active this week"},"monthlyDownloads":{"label":"Monthly downloads","description":"Active this month"},"conversionRate":{"label":"Conversion rate","description":"Views to installs"},"healthStatus":{"label":"Health status","description":"Performance status"}},"details":{"storeId":"Store ID","updateFrequency":"Update frequency","supportContact":"Support contact","copyStoreIdAriaLabel":"Copy store ID","copyStoreIdTitle":"Copy store ID","viewLiveListing":"View live listing"}},"settings":{"listingSettingsTitle":"Listing settings","listingSettingsDescription":"Store listing status and automation.","storeApiTitle":"Store API","storeApiDescription":"Integration status and limits.","labels":{"autoUpdateOnRelease":"Auto-update on release:","developerVerification":"Developer verification:","analyticsTracking":"Analytics tracking:","reviewNotifications":"Review notifications:","enabled":"Enabled","verified":"Verified","active":"Active","connected":"Connected","apiIntegration":"API integration:","lastSync":"Last sync:","apiCallsToday":"API calls today:"},"values":{"lastSyncValue":"2 minutes ago","apiCallsTodayValue":"247 / 1000"},"actions":{"configureApi":"Configure API"}}},"submissionsTab":{"title":"Submissions","filter":"Filter","openSubmission":"Open submission","submissionOfWithDate":"Submission of {date}","submissionOfFallback":"Submission of -","channelLabel":"Channel","submittedLabel":"Submitted","approvedLabel":"Approved","rejectedLabel":"Rejected","approvalTimeLabel":"Approval time","buildLabel":"Build","storeSubmissionIdLabel":"Store submission ID","versionLabel":"Version","buildReference":"build reference"},"assignedAppleId":{"title":"The App Store assigned this app an ID","description":"App Store Connect assigned the App Store ID {guid} on the last upload. Save it to your store settings so later submissions and the public store link use it.","save":"Save App Store ID to store settings","saving":"Saving…","saved":"App Store ID saved to store settings.","saveFailed":"Couldn’t save the App Store ID. Try again, or paste it into Settings > Stores."}}},"actions":{"openPreview":"Open preview","submitToStore":"Submit to store","viewInStore":"View in store","createRelease":"Create release","connectStore":"Connect a store","addStore":"Add a store","storePublishingGuide":"Store publishing guide","downloadArtifacts":"Download artifacts","openBuilds":"Open builds","openReleases":"Open releases","openReleasesDescription":"Manage releases and channels."},"descriptions":{"downloadArtifacts":"All artifacts for this build","downloadZipArtifact":"ZIP artifact for this build"},"builds":{"actions":{"previewBuildAriaLabel":"Preview this build","submitToStoreDescription":"Submit this build to {store}","downloadForPlatform":"Download for {platform}","viewAnalytics":"View analytics","viewAnalyticsDescription":"Usage metrics for this build"},"header":{"title":"Builds","description":"Build outputs and artifacts for each target browser."},"groups":{"today":"Today","yesterday":"Yesterday","earlier":"Earlier"},"timeline":{"title":"Recent builds","countOne":"{count} build","countOther":"{count} builds","elapsedPrefix":"Elapsed:","buildTimePrefix":"Build time:"},"states":{"resolvingProject":"Resolving project…","buildEventFallback":"Build event","failedToLoadBuilds":"Couldn’t load builds. Try again."},"empty":{"title":"No builds yet","description":"Builds run automatically when you push to your repo. You can also start the first one now from the latest commit on your default branch.","action":"Run first build","running":"Starting build…","pushHint":"Or push a commit to GitHub to build automatically."},"metrics":{"title":"Build statistics","labels":{"success":"Success","failed":"Failed","pending":"Pending","avgTime":"Average time"}},"dispatch":{"defaults":{"ref":"Main","message":"Manual dispatch from dashboard","author":"Dashboard","browser":"Chrome"}},"rebuild":{"trigger":"Rebuild","triggerDescription":"Re-run the build for the latest commit.","confirm":"Rebuild the latest commit? This dispatches a CI build.","success":"Build triggered successfully.","errors":{"failed":"Failed to trigger rebuild.","noCommits":"No commits found on the target branch.","noWorkflow":"No build workflow found for this project."},"confirmCommit":"Rebuild commit {sha}? This dispatches a CI build."},"api":{"errors":{"failedToLoadArtifacts":"Couldn’t load artifacts. Try again.","failedToLoadLogs":"Couldn’t load logs. Try again.","failedToLoadBuildDetail":"Couldn’t load build details. Try again."},"artifacts":{"types":{"extensionPackage":"Extension package","buildMetadata":"Build metadata"}},"logs":{"noLogsAvailable":"No logs available from artifact metadata."}},"single":{"header":{"title":"Build #{id}","versionTitle":"Version {version}","browserTitle":"{Browser} build #{id}","browserVersionTitle":"{Browser} v{version}","backToBuilds":"Back to builds","viewRun":"View run","projectVisualAlt":"{reponame} icon","ciProvenance":"Built on GitHub Actions","ciProvenanceTooltip":"Builds run on GitHub Actions in the private mirror repository extension.dev keeps for this project, on extension.dev's account. We orchestrate the cross-browser workflow. See Usage for estimated build minutes and cost.","backToReleases":"Back to releases","backToStores":"Back to stores","backToStore":"Back to {store}"},"details":{"title":"Build details","logs":{"title":"Build logs","description":"Open the build logs grouped by browser.","callToAction":"Review","live":"Live","streaming":"Build in progress, logs appear as each step finishes…","dialogTitle":"Build logs","dialogDescription":"Review the build output logs for each browser.","loading":"Loading…","empty":"No logs available.","unknownBrowser":"Unknown browser","defaultLevel":"info","rowInvite":"Follow each step of the build, per browser.","errorTitle":"Couldn't load the build logs","errorDescription":"The logs request failed. This is usually temporary.","viewRun":"View GitHub Actions run"},"tabs":{"whatsNew":"What's new","logs":"Logs"},"usage":{"title":"Usage","description":"Read the usage guide and testing steps for this build.","dialogTitle":"Usage guide","callToAction":"Visualize","loading":"Loading usage guide…","updatedPrefix":"Last updated","errorTitle":"Usage guide not available","errorDescription":"Add a public USAGE.md with install and testing steps for reviewers.","fallbackDescription":"Install, run, and test {project} locally.","rowInvite":"Install, load, and test this build step by step."},"releaseNotes":{"title":"Release notes","description":"Review the notes that will ship with this build.","rowTitle":"Current release notes","rowDescription":"Open the editor to review the notes and preview markdown output.","callToAction":"Review","dialogDescription":"Edit and preview the release notes for this build.","previewEmpty":"Add release notes to preview the markdown output.","tabs":{"edit":"Edit","preview":"Preview"}},"whatsNew":{"title":"What's new","description":"A reviewer-ready summary of changes in this build.","loadingSummary":"Loading what's new summary…","errorSummary":"Couldn't load what's new. Try again.","emptyTitle":"No what's new summary yet","emptyDescription":"Publish whats-new.json to show reviewers what's new."},"validation":{"title":"Validation & audit","description":"Manifest, permissions, and host access checked at build time."},"preview":{"title":"Preview & pull request","description":"Where to find this build's preview deployment on GitHub.","note":"Preview builds post a live preview link as a comment on the originating pull request, and update it on each new commit.","viewPullRequest":"View pull request","viewWorkflowRun":"View workflow run"}},"visuals":{"title":"Project Visuals"},"commitMessage":{"showFullAriaLabel":"Show full commit message"},"browserBuilds":{"title":"Browser builds","description":"Open a browser build to review details and download the matching artifact.","promote":"Promote…","actions":{"promote":"Promote…"},"preparing":"Preparing build details…","builtForConfig":"Built for {env} config"},"environment":{"title":"Environment details","labels":{"node":"Node.js","npm":"npm","pnpm":"pnpm","os":"Operating system","arch":"Architecture","runner":"Runner"},"footerNote":"Environment values are captured during CI and may vary by runner. Secrets are never included."},"states":{"notFoundTitle":"Build not found","notFoundDescription":"No build matches “{buildId}” in this project. It may have been cleaned up, or the link may be stale.","backToBuilds":"Back to builds","failedToLoadTitle":"Couldn't load this build","failedToLoadDescription":"The build service didn't respond for “{buildId}”. This is usually temporary."}},"browserBuilds":{"labels":{"size":"Size","duration":"Duration","format":"Format"},"empty":{"title":"No browser builds yet","description":"Build this extension to generate browser-specific artifacts."},"formats":{"zip":"ZIP"},"menu":{"moreActionsAriaLabel":"More actions","openArtifact":"Open artifact","openPreview":"Open preview","downloadZip":"Download ZIP","downloadApp":"Download .app"}},"browserBuildPage":{"health":{"title":"{Browser} review summary","description":"A trust-first summary of key signals for this build.","tableTitle":"Key signals","topBlockers":"Top blockers","labels":{"verdict":"Verdict","risk":"Risk","score":"Score","manifest":"Manifest","permissions":"Permissions","hostAccess":"Host access","notSpecified":"Not specified","manifestVersionPrefix":"MV{version}"}},"audit":{"title":"{Browser} validation report","description":"Detailed validation checks grouped by section.","docsCta":"Read the validation docs","summaryCta":"Open executable summary","readiness":{"title":"Submission readiness","ready":"Ready","blocked":"Blocked","labels":{"verdict":"Verdict","blockers":"Blocking issues"}},"blockers":{"title":"Top blockers","description":"Resolve these failures before submitting to stores."},"topFindings":{"title":"Top findings","description":"Highest-impact issues across all sections."},"store":{"title":"Store readiness"},"permissionRisk":{"title":"Permission risk","description":"Permissions that may require reviewer justification."},"security":{"title":"Security signals","labels":{"evalDetected":"Eval detected","newFunction":"New Function()","cspUnsafeEval":"CSP unsafe-eval","remoteCode":"Remote code","obfuscation":"Obfuscation risk"}},"diff":{"title":"Diff impact","labels":{"baselineAvailable":"Baseline available","permissions":"New permissions","hostAccess":"New host access","apiUsage":"New APIs"}},"coverage":{"title":"Coverage","labels":{"filesScanned":"Files scanned","filesSkipped":"Files skipped","skippedLarge":"Skipped (too large)","skippedUnsupported":"Skipped (unsupported)"}},"checklist":{"title":"Reviewer checklist","labels":{"readme":"README present","testing":"Testing instructions"}}},"details":{"openIntegrityAria":"Open artifact integrity checks","labels":{"buildSha":"Build SHA","integrityHash":"Integrity hash","builtAt":"Built at","elapsedTime":"Elapsed time","buildTime":"Build time","permissionsDeclared":"Permissions declared","hostAccessDeclared":"Host access declared","manifestVersion":"Manifest version","buildVersion":"Build version","capabilitiesDeclared":"Capabilities declared","localesDeclared":"Locales declared"},"moreCount":"+{count} more","none":"None"}},"browser":{"actions":{"promote":"Promote…"},"progress":{"title":"Build in progress","description":"Streaming live status from the internal CI workflow. Reviewers watching this page or the linked GitHub check will see updates as each phase completes.","elapsed":"Elapsed","badge":{"active":"Building {browser} preview…","pending":"Queued","queued":"Queued","building":"Building {browser}…","running":"Building {browser}…","in_progress":"Building {browser}…","uploading":"Uploading {browser} artifacts…","publishing":"Publishing {browser}…","success":"{browser} build ready","succeeded":"{browser} build ready","failed":"{browser} build failed","failure":"{browser} build failed","error":"{browser} build failed","partial":"{browser} build partially completed","skipped":"{browser} build skipped","cancelled":"{browser} build cancelled","canceled":"{browser} build cancelled"},"phases":{"queued":"Waiting for runner","building":"Building extension","publishing":"Publishing artifacts","completed":"Preview ready"},"status":{"pending":"Pending","in_progress":"Running","done":"Done","failed":"Failed"},"links":{"ciLog":"Open CI log","checkRun":"Open GitHub check"}},"details":{"title":"Build details","commit":"Commit","message":"Message","version":"Version","status":"Status","pending":"Pending","duration":"Duration","size":"Size","view":"View","detail":"Detail","info":"info"},"logs":{"title":"{Browser} build logs"},"artifacts":{"title":"Artifacts","download":"Download","loading":"Loading…","empty":"No package artifacts","generating":"Generating package…","finalizing":"Build finished, finalizing the download…","failedEmpty":"This build failed, so no package was produced"},"executables":{"title":"Executables","empty":"No executable artifacts reported yet.","generating":"Generating executables…","finalizing":"Build finished, finalizing executables…","download":"Download","macosPending":"Available to download once this build is promoted to a release (notarized so it opens without a Gatekeeper warning).","groups":{"windows":"Windows","macos":"macOS","linux":"Linux","other":"Other"}},"metadata":{"title":"Build metadata"},"validation":{"title":"Validation"},"integrity":{"title":"Integrity checks","status":"Integrity","loading":"Loading…","ok":"OK","fail":"Fail","unknown":"-","check":"Check","docs":"Docs"}},"artifacts":{"title":"{Browser} build artifacts ({count})","downloadAll":"Download all","types":{"extensionPackage":"Extension package"},"meta":{"size":"Size","type":"Type"},"clickToDownload":"Click to download"},"filters":{"searchPlaceholder":"Search builds, commits, branches...","status":{"all":"All","success":"Success","pending":"Pending","failed":"Failed","building":"Building"},"branch":{"all":"All branches"},"time":{"all":"All time","today":"Today","week":"This week","month":"This month"},"browser":{"all":"All browsers","chrome":"Chrome","firefox":"Firefox","edge":"Edge"},"apply":"Apply filters"},"userland":{"title":"Userland traffic","lastUpdated":"Last updated {time}","repoViews":{"label":"Repo views (7d)","description":"All tracked userland page loads for this repo"},"latestBuildViews":{"label":"Latest build views","description":"Traffic for the current build route set","shaWindow":"{sha} in the last 7 days","awaitingBuild":"Available once a build is selected"},"topBrowser":{"label":"Top browser","description":"Most-viewed browser build page","empty":"No browser traffic yet"},"topRoute":{"label":"Top route","description":"Highest-traffic userland path","empty":"No route traffic yet"},"pageLoads":"{count} page loads","error":{"title":"Analytics unavailable","description":"Traffic data is temporarily unavailable. It will reappear once analytics can be reached."},"empty":{"title":"No traffic yet","description":"Tracking is configured, but this repo has not recorded any userland page loads in the selected window yet."},"header":{"browserViews":"Browser views (7d)","buildViews":"Build views (7d)","unavailable":"unavailable","topBrowserPrefix":"Top browser:","topRoutePrefix":"Top route:"}}},"overview":{"header":{"title":"Overview","description":"Monitor builds, releases, and store status."},"nextSteps":{"title":"Get your extension live","description":"A few steps to take your extension from build to published.","progress":"{done}/{total}","dismiss":"Dismiss","dismissAriaLabel":"Dismiss the get-started checklist","steps":{"firstBuild":{"todo":"Run your first build","inProgress":"Building your extension…","done":"First build succeeded","cta":"View build","ctaAriaLabel":"View the latest build"},"enableBrowsers":{"todo":"Build for more browsers","done":"Building for multiple browsers","cta":"Configure","ctaAriaLabel":"Choose which browsers to build"},"createRelease":{"todo":"Create a release","done":"Release created","locked":"After your first build","cta":"Create release","ctaAriaLabel":"Create a release"},"publishStore":{"todo":"Publish to a store","done":"Published to a store","locked":"After your first release","cta":"Publish","ctaAriaLabel":"Publish to a store"}}},"buildSummary":{"title":"Latest build","description":"Review which browser packages this project is set up to generate before you run the first build.","configuredState":{"title":"No registry builds yet","description":"Build results will appear here after Extension.dev receives the first registry artifact set. Until then, this section shows which browser packages are configured.","configured":"Configured","notConfigured":"Not configured"},"empty":{"title":"No builds in {range}","description":"Connect CI and run your first build to see status, commit details, and browser results.","actions":{"openBuildsAriaLabel":"Open builds","learnFirstBuild":"How to run your first build","learnFirstBuildAriaLabel":"Learn how to run your first build","dismissTips":"Dismiss tips","dismissTipsAriaLabel":"Dismiss tips"},"tips":{"step1":"Authorize the Extension.dev GitHub App","step2":"Configure CI with the build command","step3":"Push a change to trigger a build"}},"labels":{"commitInline":"Commit {commit}","elapsed":"Elapsed: {elapsed}","duration":"Duration:","commitLabel":"Commit:"},"hints":{"refresh":"Updates when status changes. You can also open Actions."}},"releaseSummary":{"title":"Release summary","channelFallback":"Channel","channelTitle":"{Channel} channel","empty":{"title":"No releases in {range}","description":"Create a release to track rollout, health, and impact.","actions":{"createFirst":"Create first release","createFirstAriaLabel":"Create first release","learn":"Learn about releases","learnAriaLabel":"Learn about releases"},"tips":{"step1":"Tag the version you want to release","step2":"Choose a rollout strategy","step3":"Monitor health and feedback"}},"labels":{"downloads":"{Downloads} Downloads","rollout":"{Rollout} Rollout","updated":"Updated {date}"}},"health":{"title":"Project health","stats":{"downloads":{"label":"Downloads","description":"Across all stores"},"buildSuccess":{"label":"Builds","description":"Success rate, all builds"},"deployment":{"label":"Deployment","description":"Per day average"},"pageVisits":{"label":"Page visits","description":"{range}"}}},"headings":{"storeSummary":"Store summary"},"storeSummary":{"ratingSummary":"{Rating} rating ({reviews} reviews)"},"empty":{"noStoresConnectedTitle":"No stores connected yet","noStoresConnectedDescription":"Connect a store to track versions, status, ratings, and reach."},"actions":{"addStoreAriaLabel":"Add a store","openStorePublishingGuideAriaLabel":"Open store publishing guide","connectStoreAriaLabel":"Connect {store}"},"popularStores":"Popular stores","bullets":{"pickStore":"Pick a store to submit to","prepareListing":"Prepare listing assets and metadata","submitAndMonitor":"Submit and monitor review status"},"buildToast":{"completedTitle":"Build completed","completedDescription":"The latest build has finished.","failedTitle":"Build failed","failedDescription":"The latest build did not finish. Check the build logs."}},"releases":{"states":{"resolvingProject":"Resolving project…","failedToLoad":"Couldn't load releases. Try again.","failedToLoadDescription":"Refresh the page or try again in a moment."},"headings":{"browserStoreStatus":"Store status","browserStoreSubmissions":"Store submissions","activeReleaseChannels":"Active release channels"},"overview":{"title":"Release overview","stats":{"liveChannels":{"label":"Live channels","description":"Currently shipping"},"rollout":{"label":"Rollout","description":"Average coverage"},"downloads":{"label":"Downloads","description":"Release reach"},"latestPromotion":{"label":"Promotion","description":"Last update"}}},"notifications":{"promoteBuild":{"title":"Promote build","descriptionWithChannel":"Ready to promote build {buildId} to {channel}. Select “Release to channel” in available builds.","descriptionNoChannel":"Ready to promote build {buildId}. Select “Release to channel” in available builds."},"mockReleaseCreated":{"title":"Mock: release created","description":"Selected build {buildid} for the release flow."}},"history":{"title":"Release history","empty":{"title":"No release history","description":"When you create or promote a release, it will appear here.","action":"Create your first release"},"groups":{"today":"Today","yesterday":"Yesterday","thisWeek":"This week","earlier":"Earlier"},"count":{"one":"{count} release","many":"{count} releases"},"emptyGroup":"No releases for this period.","row":{"versionPrefix":"v{version}","noVersionTitle":"Release","buildLabel":"Build","releasedLabel":"Released","browsersLabel":"Browsers","commitLabel":"Commit","liveNow":"Live now","rolledBack":"Rolled back","releasedAtTime":"Released at {time}","releasedOnDayTime":"Released {day} at {time}","releasedOnDate":"Released on {date}"}},"availableBuilds":{"title":"Available builds","countReady":"{count} ready for release","empty":{"title":"No builds available","description":"Run a build to prepare a version for release."},"actions":{"openGitHubActions":"Open GitHub Actions","refresh":"Refresh","viewAll":"View all builds"},"row":{"title":"Build #{buildId}","commitLabel":"Commit","builtLabel":"Built","moreActionsAriaLabel":"More actions","releaseToChannel":"Release to channel"}},"single":{"states":{"notFoundTitle":"Release not found","notFoundDescription":"This release doesn't exist in the project registry.","emptyChannelTitle":"No release on this channel yet","emptyChannelDescription":"Nothing has been promoted to \"{channel}\" yet. Promote a build to this channel to see its release details here.","backToReleases":"Back to releases"},"releaseBuildTitle":"Release build","header":{"title":"Release v{version}","titleNoVersion":"Release","description":"Release overview and status.","descriptionWithChannel":"Overview and status for the {channel} channel.","promoteNewBuild":"Promote new build"},"details":{"title":"Release details","notes":{"title":"Release notes","description":"Review the notes attached to this release.","callToAction":"Review","dialogTitle":"Release notes","dialogDescription":"Review the release notes for this channel.","empty":"No notes yet"},"timeline":{"title":"Release timeline","occurredLabel":"Occurred","actorLabel":"By","rollbackLabel":"Rollback","storeLabel":"View store","storeSubmissionIdLabel":"Submission","emptyTitle":"No timeline events yet","emptyDescription":"Release activity appears here after channel promotions and store updates.","buildUpdateLabel":"Build update","verbPromoted":"Promoted","verbRolledBack":"Rolled back","toChannel":"to {channel}","status":{"completed":"Completed","submitted":"Submitted","approved":"Approved","failed":"Failed","pending":"Pending"}}},"rollback":{"action":"Roll back","prompt":"Roll {channel} back to {sha}?","confirm":"Confirm","cancel":"Cancel","inProgress":"Rolling back…","successTitle":"Rolling back","successDescription":"{channel} is reverting to build {build}.","partialTitle":"Rollback incomplete","partialDescription":"These browsers did not roll back: {browsers}.","degradedDescription":"The channel pin didn't update; the registry may briefly show the previous build.","errorTitle":"Rollback failed","errorRetry":"Please try again."},"releaseBuildMessage":"Release {version}","releaseBuildMessageNoVersion":"Release"},"activeChannels":{"channelTitle":"{channel} channel","releasedLabel":"Released","buildCompletedLabel":"Build completed","notReleasedLabel":"Not released yet","mixedBuilds":"Mixed builds","browserStates":{"notInRelease":"Not in release","notEnabled":"Not enabled","buildFailed":"Build failed","buildFailedHint":"This browser's build for this release failed. Re-run the build or promote a passing build.","passingNotPromoted":"Passing build, not promoted","passingNotPromotedHint":"This browser has a passing build but it has not been promoted to this channel yet."},"empty":{"title":"No active releases","description":"Release to stable or preview to see channel details here."}},"storeStatus":{"approvalLabel":"Approval {time}","buildLabel":"Build {buildId}","buildStatus":"Build status","submitted":"Submitted","approved":"Approved","status":"Status"},"storeSubmissions":{"actions":{"createSubmission":"Create submission","submitting":"Submitting..."},"status":{"notSubmitted":"Not submitted","inReview":"In review","approved":"Approved","rejected":"Rejected","pending":"Pending"}},"actions":{"create":"Create release","viewBuildDescription":"Open build details","downloadArtifactsDescription":"All artifacts for this release","openBuild":"Open build","openBuildDescription":"Go to linked build"},"header":{"title":"Releases","description":"Promote builds to channels and track rollouts."},"new":{"title":"Create release","description":"Promote a build to a release channel and preview per-browser readiness.","sections":{"build":{"title":"Select build","description":"Choose a successful build to promote.","placeholder":"Select a build"},"version":{"placeholder":"Release version (e.g. 1.2.3)","invalid":"Use 1-4 dot-separated integers, like 0.3.0 or 1.2.3.4.","tooLowInline":"Lower than the packaged v{buildVersion}.","useVersion":"Use v{buildVersion}"},"setup":{"title":"Release setup"},"channel":{"title":"Select channel","description":"Pick the release channel for this promotion.","placeholder":"Select a channel"},"browsers":{"title":"Target browsers","description":"Choose which browsers to release this build for.","placeholder":"Select browsers","all":"All browsers","none":"No browsers"},"preview":{"title":"Release preview","description":"Each browser can ship a different build if needed."},"safety":{"title":"Safety checks","description":"Confirm artifacts are ready before submitting to stores.","selectBuildHint":"Select a build above to see its per-browser artifact readiness."},"whatsNew":{"title":"What's new","description":"Reviewer-ready summary from whats-new.json."},"notes":{"title":"Release notes","description":"Optional, but helps reviewers and users.","placeholder":"Summarize the changes in this release…","helper":"Release notes are optional. Adding them improves store reviews.","sample":"- You can now search for files directly in the channel details pane.\n- Notifications are more reliable when you switch devices mid-session.\n- Fixed a bug where some emoji reactions appeared twice.","callToAction":"Review","callToActionDone":"Reviewed","confirm":"Looks good","titleFor":"Release notes for {project}","invite":"Add optional notes for reviewers and users.","editorPlaceholder":"Summarize the changes in this release…","useWhatsNew":"Use what's new","previewEmpty":"Add release notes to preview the markdown output.","tabs":{"edit":"Edit","preview":"Preview"},"prSeedDescription":"These notes prefill the release PR; you can still edit them on GitHub before merging."}},"preview":{"buildTitle":"Build {buildId}","noBuild":"Select a build to preview"},"progress":{"title":"Release progress","description":"Follow along while your release is prepared.","helper":"You can stay on this page while we keep things moving."},"safety":{"artifactReady":"{browser} artifacts ready","reviewHint":"If artifacts are missing, store review may be delayed."},"whatsNew":{"emptyTitle":"No what's new summary yet","emptyDescription":"Publish whats-new.json to show reviewers what's new."},"actions":{"create":"Create release","creating":"Preparing release...","created":"Release queued","createdDescription":"{channel} is updating now. We will open it as soon as it is ready.","viewBuilds":"View all builds","openReleasePr":"Open release PR","openingReleasePr":"Opening release PR..."},"disabledHint":{"selectBuild":"Select a build to release.","selectChannel":"Choose a release channel.","selectBrowsers":"Select at least one browser to release to.","needsVersion":"The selected build doesn't report a manifest version, so it can't be released. Pick a different build.","invalidVersion":"The release version must be 1-4 dot-separated integers, like 0.3.0 or 1.2.3.4.","versionTooLow":"v{typedVersion} is lower than the selected build's packaged v{buildVersion}. Stores only accept increasing versions, so type a higher version or use the packaged one.","resolvingProject":"Still connecting this page to its project. If this does not settle in a few seconds, reload the page.","buildQuotaExhausted":"Builds are unavailable for this workspace right now, so the release PR can't be opened. See the notice above."},"errors":{"missingProject":"Project not ready yet","missingProjectDescription":"Please wait for the project to resolve and try again.","failed":"Unable to create release","failedDescription":"Check your inputs and try again.","mirrorDegraded":"The release was queued but its state ({pending}) did not sync. Reload the channel to confirm before assuming it shipped.","notConfirmed":"We couldn't confirm the release landed on {channel}. Reload the channel to check before assuming it shipped.","ciNotPickedUp":"The release was dispatched, but no CI run picked it up yet. {channel} shows the release, but artifacts may not have published - check the repository's Actions before assuming it shipped.","ciRunFailed":"CI reported the {browser} release run as {conclusion}. The channel may show the release, but artifacts did not publish - check the repository's Actions."},"cut":{"prOpened":"PR #{prNumber} releases v{version} when merged. Test the build artifacts and edit the release notes on the PR, then merge to ship.","manualFallback":"Set \"version\" to {version} in {manifestPath}, commit, and open a PR. A build for v{version} appears here once it passes.","reviewPr":"Review & test PR","reviewPrNumbered":"Review & test PR #{prNumber}","openManifest":"Open manifest.json"},"prFlow":{"title":"What happens next","stepPr":"A pull request opens on your source repo, bumping manifest.json to v{version}.","stepBuild":"CI builds the per-browser artifacts on the PR, with download and preview links to test before you merge.","stepMerge":"Merging releases v{version} to {channel} automatically once the build passes."},"quotaBanner":{"title":"Builds are unavailable right now","exhausted":"This workspace has used all {limit} monthly builds, so a release PR opened now could not build after merging. The quota resets next month.","dispatchDisabled":"Build dispatch is temporarily disabled by the operator, so a release PR opened now could not build after merging. Try again later."}},"empty":{"noActiveReleases":"No active releases yet. Release to preview to see channel details here."},"filters":{"channel":{"all":"All channels","stable":"Stable","canary":"Preview"},"status":{"all":"All status","live":"Live","rolling":"Rolling","pending":"Pending","rejected":"Rejected"}}},"shares":{"header":{"title":"Shared builds","description":"A live share is a public link. Anyone who has it can open your extension in the emulator and download the whole build as a zip. A share stops working on its expiry date, or the moment you revoke it."},"summary":{"counts":"{live} live, {expired} expired, {revoked} revoked"},"loading":{"label":"Loading shared builds"},"table":{"label":"Shared builds","columns":{"extension":"Extension","link":"Public link","actions":"Actions"}},"row":{"version":"v{version}","sharedOn":"Shared {date}","kind":{"source":"Source","dist":"Packaged build"}},"attribution":{"scope":{"project":"Project share","projectNamed":"Project share in {owner}","personal":"Personal share","unknown":"Owner not recorded"},"byLogin":"Shared by {login}","byToken":"Shared via CLI token {tokenId}","byUnknown":"Publisher not recorded","revocable":{"project":"Any member of the workspace can revoke this link.","personal":"Only you can see and revoke this link."}},"state":{"live":"Live","expired":"Expired","revoked":"Revoked","liveDetail":"Public until {date}","noExpiryDetail":"Public, no expiry date recorded","expiredDetail":"Stopped working {date}","revokedDetail":"Revoked {date}","unknownDate":"on an unrecorded date"},"remaining":{"daysOne":"1 day left","daysMany":"{value} days left","hoursOne":"1 hour left","hoursMany":"{value} hours left","minutesOne":"1 minute left","minutesMany":"{value} minutes left","imminent":"expiring now"},"actions":{"open":"Open","copy":"Copy public link","download":"Download zip","revoke":"Revoke","revoking":"Revoking","alreadyRevoked":"No link to revoke"},"paging":{"showing":"Showing {count} of {matched} shares.","showingAtLeast":"Showing {count} of at least {matched} shares. The server stopped counting before it reached the end.","loadMore":"Show more","capped":"This page lists at most {limit} shares. Use the extension_shares MCP tool to reach the rest."},"empty":{"title":"No shared builds yet","description":"When you publish a preview link for a build, it appears here with its public link and its expiry date."},"error":{"title":"Could not load your shared builds","description":"The shares list did not answer. Your existing links are unaffected.","retry":"Try again","signIn":{"title":"Sign in to see your shared builds","description":"Your session expired. Sign in again to list and revoke the links you published.","action":"Sign in"},"rateLimited":{"title":"Too many requests","description":"The shares list accepts 30 requests every 5 minutes. Try again in {seconds} seconds."}},"revokeDialog":{"title":"Revoke the share for {name}?","description":"The public link and the zip download stop working right away.","permanence":"Revoking cannot be undone and does not mint a replacement link. Anyone who already downloaded the build keeps their copy.","actions":{"cancel":"Cancel","confirm":"Revoke permanently"},"attribution":"{scope}. {credit}."},"notifications":{"revoked":{"title":"Share revoked","description":"{name} is no longer reachable through its public link."},"revokeFailed":{"title":"Could not revoke the share","description":"The link is still public. Try again."}},"metadata":{"title":"Shared builds","description":"Public links you published for built extensions.","table":{"title":"Shares","description":"Across every workspace you belong to."},"rows":{"live":{"label":"Live links"},"expired":{"label":"Expired"},"revoked":{"label":"Revoked"}}}}}}