// English UI strings (the source catalog). Placeholders: {name}. Plural: a "_one" entry for a count of 1. export const en = { 'a11y.skip': 'Skip to content', 'a11y.breadcrumbs': 'You are here', 'nav.sections': 'Sections', 'nav.portfolio': 'Portfolio', 'nav.appsLabel': 'Apps', 'nav.workspace': 'Workspace', 'nav.apps': 'App folders', 'nav.accounts': 'Studios & accounts', 'nav.dependencies': 'Dependencies', 'nav.settings': 'Settings', 'nav.noApps': 'No apps yet', 'nav.problems': '{count} problems', 'nav.problems_one': '1 problem', 'tab.releases': 'Releases', 'tab.catalog': 'Catalog', 'tab.listings': 'Listings', 'tab.health': 'Health', 'tab.reviews': 'Reviews', 'tab.testflight': 'TestFlight', 'tab.checks': 'Checks', 'profile.app': 'App', 'profile.game': 'Game', 'profile.subscription-app': 'Subscription app', 'foot.cli': 'CLI {version} running', 'foot.cliDown': 'CLI not running', 'foot.cliStarting': 'Starting the CLI', 'foot.lastRead': 'Stores read {when}', 'foot.neverRead': 'Stores not read yet', 'top.storesRead': 'Stores read {when}', 'top.storesNotRead': 'Stores not read', 'dev.fixtures': 'DEV FIXTURES', 'dev.fixturesHint': 'Development build on fixture data: nothing here comes from a store. Release builds have no fixture mode.', 'action.readStores': 'Read the stores', 'action.reading': 'Reading', 'action.readStoresHint': 'Read-only: App Store Connect and Google Play status of every app, with each app\'s own accounts', 'action.checkConfigs': 'Check configs', 'action.addFolder': 'Add app folder', 'action.addAccount': 'Add a store account', 'action.toggleTheme': 'Switch light / dark', 'action.welcome': 'Open the welcome guide', 'action.refresh': 'Refresh', 'palette.title': 'Command palette', 'palette.button': 'Search or jump to', 'palette.placeholder': 'Jump to an app, a tab or a screen, or run an action', 'palette.results': 'Results', 'palette.none': 'Nothing matches "{q}"', 'palette.move': 'move', 'palette.open': 'open', 'palette.toggle': 'open / close', 'palette.gApps': 'Apps', 'palette.gGo': 'Go to', 'palette.gTabs': 'App tabs', 'palette.gActions': 'Actions', 'palette.openApp': 'Open', 'common.loading': 'Loading', 'common.unknown': 'Unknown', 'common.cancel': 'Cancel', 'common.close': 'Close', 'common.exit': 'Exit code {code}', 'common.cachedFrom': 'Last read {when} (saved copy)', 'common.readWhen': 'Read {when}', 'common.readFailedKeep': 'The last read failed, so this shows the previous one: {error}', 'time.justNow': 'just now', 'time.never': 'never', 'toast.readingStores': 'Reading the stores', 'toast.readingStoresDetail': 'App Store Connect and Google Play, read-only', 'toast.readDone': 'Stores read', 'toast.readDoneDetail': '{count} apps up to date', 'toast.readDoneDetail_one': '1 app up to date', 'toast.readDonePartial': 'Stores read, with gaps', 'toast.readDonePartialDetail': '{count} apps could not be read on a store; they show as unknown', 'toast.readDonePartialDetail_one': '1 app could not be read on a store; it shows as unknown', 'toast.readFailed': 'Reading the stores failed', 'toast.cancelled': 'Cancelled', 'toast.reading': 'Reading', 'toast.readingDetail': 'Read-only', 'toast.readOk': '{what} read', 'toast.readFailedWhat': 'Reading {what} failed', 'write.dryFailed': 'The dry run failed, nothing was written', 'write.failed': 'Not applied', 'phase.none': 'Not on this store', 'phase.live': 'Live', 'phase.rollout': 'Rollout', 'phase.phased': 'Phased', 'phase.halted': 'Halted', 'phase.paused': 'Paused', 'phase.approved': 'Approved', 'phase.review': 'In review', 'phase.rejected': 'Rejected', 'phase.testing': 'Testing', 'phase.draft': 'Draft', 'phase.other': 'Other', 'stage.build': 'Build', 'stage.testing': 'Testing', 'stage.review': 'Review', 'stage.live': 'Live', 'stage.rollout': 'Rollout', 'check.notChecked': 'Not checked', 'check.notLoaded': 'Config not loaded', 'check.problems': '{count} problems', 'check.problems_one': '1 problem', 'check.warnings': '{count} warnings', 'check.warnings_one': '1 warning', 'check.ok': 'Config OK', 'app.notSetUp': 'not set up', 'app.notOnStore': 'Not on this store', 'app.sections': '{name} sections', 'app.consoleHint': 'Submit, release and publish happen in the store console', 'portfolio.lead': 'Every app in this workspace on the App Store and Google Play.', 'portfolio.sub': '{count} apps · {stores} store listings', 'portfolio.sub_one': '1 app · {stores} store listings', 'portfolio.emptyTitle': 'Add your first app', 'portfolio.emptyText': 'storebound works on app folders: one storebound.config.ts per app, for iOS and Android. Add a folder that has one, or start a new one from the templates.', 'portfolio.notReadNotice': 'Releases, rollouts and catalog parity need one read of the stores. It is read-only and uses each app\'s own accounts.', 'portfolio.apps': 'Apps', 'portfolio.appsSub': 'Release state from the stores, read {when}', 'portfolio.appsSubOffline': 'Config only: read the stores for releases', 'portfolio.unreadable': 'Unreadable', 'portfolio.noVersion': 'No version yet', 'portfolio.noNext': 'Nothing in flight', 'portfolio.thenNext': 'next {version} · {phase}', 'portfolio.products': '{count} products', 'portfolio.products_one': '1 product', 'portfolio.subs': '{count} subs', 'portfolio.subs_one': '1 sub', 'portfolio.inParity': 'In parity', 'portfolio.differs': '{count} differ', 'portfolio.differs_one': '1 differs', 'portfolio.configOnly': 'Not compared yet', 'portfolio.attention': 'Needs attention', 'portfolio.attentionSub': 'Problems first, then warnings', 'portfolio.allClear': 'Nothing needs attention', 'portfolio.allClearText': 'Configs check out and no store reported a problem in the last read.', 'portfolio.workspace': 'Workspace', 'portfolio.healthNotRead': 'Not read', 'portfolio.healthNoPlay': 'iOS only', 'portfolio.healthTitle': 'Last 14 days, user-perceived, read {when}', 'portfolio.accounts': '{play} Google Play · {apple} App Store Connect', 'portfolio.storesRead': 'Stores read', 'portfolio.tools': 'Local tools', 'portfolio.toolsFound': '{found} of {total} found', 'kpi.apps': 'Apps', 'kpi.appsSub': '{ios} on iOS · {android} on Android', 'kpi.live': 'Live versions', 'kpi.liveSub': 'across {count} store listings', 'kpi.rolling': 'Rolling out', 'kpi.review': 'In review', 'kpi.attention': 'Needs attention', 'kpi.blockers': '{count} blockers', 'kpi.blockers_one': '1 blocker', 'kpi.noBlockers': 'No blockers', 'kpi.none': 'None', 'kpi.notRead': 'Read the stores to see this', 'legend.done': 'done', 'legend.stages': 'Build · Testing · Review · Live · Rollout', 'col.app': 'App', 'col.next': 'Next version', 'col.catalog': 'Catalog', 'col.crash': 'Crash rate', 'col.config': 'Config', 'col.version': 'Version', 'col.build': 'Build', 'col.versionCode': 'Version code', 'col.track': 'Track', 'col.item': 'Item', 'col.type': 'Type', 'col.priceGap': 'Price gap', 'col.region': 'Region', 'col.diff': 'Difference', 'col.language': 'Language', 'col.issue': 'Issue', 'col.reports': 'Reports', 'col.users': 'Users', 'col.metric': 'Metric', 'col.value': 'Value', 'col.goal': 'Goal', 'col.name': 'Name', 'col.store': 'Store', 'col.usedBy': 'Used by', 'col.added': 'Added', 'col.actions': 'Actions', 'att.storeError': '{store} could not be read: {error}', 'att.rejected': '{store} {version} was rejected', 'att.halted': '{store} {version}: rollout halted', 'att.catalog': '{count} catalog items differ between the stores', 'att.catalog_one': '1 catalog item differs between the stores', 'att.crash': 'Crash rate near or over the Google Play threshold', 'att.anr': 'ANR rate near or over the Google Play threshold', 'tl.next': 'Next', 'tl.live': 'Live', 'tl.store': 'Store', 'tl.created': 'Created {date}', 'tl.notOnStore': 'Not on this store', 'tl.noVersion': '{version} is not on {store} yet', 'tl.everyone': 'Everyone', 'tl.day': 'day {day} of 7', 'tl.rolloutAria': 'Share of users with this version', 'releases.notReadTitle': 'Release state is not read yet', 'releases.notReadText': 'The timeline shows each version on both stores: build, TestFlight or internal testing, review, live and the rollout share. Read the stores once to fill it.', 'releases.noAccounts': 'Tip: map store accounts to this app in App folders first.', 'releases.storeUnreadable': '{store} could not be read, so its lane shows as unknown: {error}', 'releases.noVersions': 'No versions on the stores yet', 'releases.noVersionsText': 'When the first build is uploaded it shows here.', 'releases.history': 'Versions on the stores', 'releases.historySub': 'Read {when}', 'releases.consoleNote': 'storebound never submits for review and never releases an approved version: do those in the store console. Rollout and phased release changes are your decision, each confirmed in a system dialog.', 'cat.products': 'One-time products', 'cat.productsSub': 'In the config', 'cat.subscriptions': 'Subscriptions', 'cat.subsSub': 'All groups', 'cat.parity': 'In parity', 'cat.parityRead': 'Compared {when}', 'cat.gaps': 'Price gaps', 'cat.gapsSub': 'Same currency, over 10 %', 'cat.matrix': 'Parity matrix', 'cat.configOnly': 'From the config only: compare with both stores to fill the store columns', 'cat.compare': 'Compare with the stores', 'cat.ok': 'Matches', 'cat.warn': 'Differs', 'cat.error': 'Missing or wrong', 'cat.na': 'Not sold here', 'cat.unknown': 'Not compared', 'cat.extra': 'Store only', 'cat.sub': 'Subscription', 'cat.product': 'Product', 'cat.notInConfig': 'Not in the config', 'cat.noGap': 'None', 'cat.gapsTitle': 'Price gaps between the stores', 'cat.gapsTitleSub': 'Stores round to their own price tiers, so small gaps are normal', 'cat.emptyTitle': 'No in-app products or subscriptions', 'cat.emptyText': 'Products and subscriptions are defined once in storebound.config.ts and created on both stores. This app has none in its config.', 'lst.languages': 'Languages', 'lst.completeKpi': 'Complete', 'lst.completeSub': 'Required fields, both stores', 'lst.toFix': 'To fix', 'lst.toFixSub': 'Missing or over the limit', 'lst.screenshots': 'Screenshots', 'lst.screenshotsSub': 'Rendered, all languages', 'lst.noRenders': 'No renders folder yet', 'lst.playSub': 'store/listing.md', 'lst.appleSub': 'store/appstore.md', 'lst.complete': 'Complete', 'lst.completeAria': '{pct} % complete', 'lst.missing': 'Missing', 'lst.optional': 'Optional', 'lst.over': '{n} over', 'lst.title': 'Title', 'lst.short': 'Short', 'lst.full': 'Full', 'lst.whatsNew': 'What\'s new', 'lst.name': 'Name', 'lst.subtitle': 'Subtitle', 'lst.promo': 'Promo text', 'lst.keywords': 'Keywords', 'lst.description': 'Description', 'lst.noFilesTitle': 'No listing files yet', 'lst.noFilesText': 'Listing text lives in store/listing.md (Google Play) and store/appstore.md (App Store) in the app folder, one section per language.', 'lst.noFilesHint': 'writes both templates into the app folder', 'lst.foot': 'From the app folder\'s files, read {when}. Nothing is uploaded from here.', 'health.read': 'Read health', 'health.emptyTitle': 'Health is not read yet', 'health.emptyText': 'Crash and ANR rates against the Google Play thresholds, worst devices and top issues, plus App Store diagnostics. Read-only.', 'health.crash': 'User-perceived crash rate', 'health.anr': 'User-perceived ANR rate', 'health.window': '{from} to {to}', 'health.over': 'Over threshold', 'health.near': 'Near threshold', 'health.under': 'Under threshold', 'health.current28': '28-day average, as Google Play counts it', 'health.daily': 'Daily', 'health.threshold': 'Bad behavior threshold {value}', 'health.chartAria': '{metric}: {value}', 'health.devices': 'Worst devices', 'health.devicesSub': 'Per-device threshold {value}', 'health.noDevices': 'No device has enough users to compare.', 'health.issues': 'Top issues', 'health.issuesSub': 'Most reports first', 'health.noIssues': 'No issues reported', 'health.crashShort': 'Crash', 'health.appleMetrics': 'Performance metrics', 'health.appleMetricsSub': 'Latest values per metric', 'health.noMetrics': 'No metrics yet', 'health.signatures': 'Diagnostic signatures', 'health.signaturesSub': 'Heaviest first, latest builds', 'health.noSignatures': 'No diagnostic signatures', 'health.betaCrashes': 'TestFlight crashes', 'health.noBetaCrashes': 'No TestFlight crash reports in the window.', 'health.build': 'build {build}', 'health.noPlay': 'This app is not on Google Play.', 'health.noApple': 'This app is not on the App Store.', 'health.unreadable': '{store} could not be read, shown as unknown: {error}', 'reviews.read': 'Read reviews', 'reviews.emptyTitle': 'Reviews are not read yet', 'reviews.emptyText': 'The last 30 days on the App Store, the last 7 on Google Play (its API keeps no more), with your local reply drafts. Read-only.', 'reviews.ratings': 'Ratings', 'reviews.count': '{count} reviews', 'reviews.count_one': '1 review', 'reviews.unansweredN': '{count} without a reply', 'reviews.unansweredN_one': '1 without a reply', 'reviews.filter': 'Filter', 'reviews.store': 'Store', 'reviews.all': 'All', 'reviews.onlyUnanswered': 'Only without a reply', 'reviews.search': 'Search reviews', 'reviews.inbox': 'Inbox', 'reviews.shown': '{count} shown', 'reviews.noMatch': 'No review matches the filter', 'reviews.pick': 'Pick a review', 'reviews.answered': 'Answered', 'reviews.drafted': 'Draft', 'reviews.approved': 'Approved', 'reviews.notApproved': 'Not approved', 'reviews.noTitle': 'No title', 'reviews.noText': 'No text', 'reviews.version': 'version {v}', 'reviews.currentReply': 'Reply on the store', 'reviews.draft': 'Your reply draft', 'reviews.noDraft': 'No draft for this review. "Make drafts" writes one file per unanswered review into .storebound/replies.', 'reviews.emptyDraft': 'The draft {file} has no reply yet: write it under "## Reply".', 'reviews.chars': '{n} of {limit} characters', 'reviews.approve': 'Approve', 'reviews.unapprove': 'Remove approval', 'reviews.approveHint': 'Marks the draft approved (local file, confirmed in a dialog). Nothing is sent.', 'reviews.fixFirst': 'Fix the errors first', 'reviews.sentOn': 'Sent {date}', 'reviews.sendNote': 'Replies are public, so they go out from a terminal:', 'reviews.makeDrafts': 'Make drafts', 'reviews.makeDraftsHint': 'One local draft per unanswered review (dry run first, then a confirmation)', 'reviews.draftsMade': 'Reply drafts written', 'reviews.approvedToast': 'Draft approved', 'reviews.unapproved': 'Approval removed', 'reviews.starsAria': '{count} of 5 stars', 'reviews.starsAria_one': '1 of 5 stars', 'tf.read': 'Read TestFlight', 'tf.emptyTitle': 'TestFlight is not read yet', 'tf.emptyText': 'Beta groups, testers and recent builds with their processing and beta review states. Read-only.', 'tf.noIos': 'This app is not on iOS', 'tf.noIosText': 'TestFlight is for apps with an App Store record. Add the apple section to the config to use it.', 'tf.internal': 'Internal', 'tf.external': 'External', 'tf.testers': 'testers', 'tf.builds': 'builds', 'tf.all': 'All', 'tf.publicOn': 'Public link on', 'tf.publicOff': 'Invite only', 'tf.noGroups': 'No beta groups', 'tf.buildsTitle': 'Recent builds', 'tf.buildsSub': 'Newest first', 'tf.processing': 'Processing', 'tf.internalTesting': 'Internal testing', 'tf.externalTesting': 'External testing', 'tf.uploaded': 'Uploaded', 'tf.noBuilds': 'No builds uploaded yet', 'tf.missingGroups': 'In the config but not on App Store Connect: {groups}', 'checks.offline': 'Config check', 'checks.offlineSub': 'Offline: config, listing files, copy, declarations, products', 'checks.again': 'Check again', 'checks.clean': 'The config checks out', 'checks.cleanText': 'No problems or warnings in the app folder.', 'checks.problem': 'Problem', 'checks.warning': 'Warning', 'checks.validate': 'Store readiness', 'checks.validateSub': 'Read-only report from both stores, blockers in order', 'checks.run': 'Run the report', 'checks.validateEmpty': 'Readiness not checked yet', 'checks.validateEmptyText': 'What is still missing on the App Store and Google Play before a submission, in the order to fix it.', 'checks.ready': 'No blockers', 'checks.readyText': 'Both stores have what a submission needs.', 'folders.lead': 'One folder per app with its storebound.config.ts (iOS and Android in one config). Pick the store accounts each app uses; the keys stay in the keychain.', 'folders.list': 'App folders', 'folders.listSub': '{count} folders', 'folders.listSub_one': '1 folder', 'folders.emptyTitle': 'No app folders yet', 'folders.emptyText': 'Add a folder that has a storebound.config.ts, or start a new one below.', 'folders.added': '{name} added', 'folders.started': '{name} started', 'folders.startedDetail': 'Templates written. Edit storebound.config.ts and the store files next.', 'folders.playFor': 'Google Play account for {name}', 'folders.appleFor': 'App Store Connect account for {name}', 'folders.noPlay': 'No Google Play account', 'folders.noApple': 'No App Store account', 'folders.check': 'Check', 'folders.gallery': 'Gallery', 'folders.galleryHint': 'Writes the local screenshot review page (dry run first, then a confirmation)', 'folders.remove': 'Remove {name} from the list (the folder stays)', 'folders.checkTitle': 'Config check', 'folders.galleryTitle': 'Screenshot review page', 'folders.newTitle': 'Start a new app folder', 'folders.newSub': 'storebound init: config, listing, screenshot copy, declarations and privacy policy templates', 'folders.profile': 'Profile', 'folders.profileHint.app': 'Utility or productivity app: optional account and analytics, no ads.', 'folders.profileHint.game': 'Free-to-play game with ads and in-app purchases.', 'folders.profileHint.subscription-app': 'App with accounts and auto-renewable subscriptions.', 'folders.chooseAndStart': 'Choose a folder and start', 'run.failed': 'Failed', 'run.running': 'Running', 'run.applied': 'Applied after your confirmation', 'run.cancelled': 'Cancelled in the dialog: nothing was written', 'run.dryFailed': 'The dry run failed: nothing was written', 'run.done': 'Done', 'accounts.lead': 'Store API keys live in the system keychain (Keychain on macOS, Credential Manager on Windows, Secret Service on Linux). They are never shown again, never written to your app folders, and reach storebound in memory for one call.', 'accounts.list': 'Store accounts', 'accounts.listSub': 'Labels only: the keys are in the keychain', 'accounts.emptyTitle': 'No store accounts yet', 'accounts.emptyText': 'Add a Google Play service account or an App Store Connect API key below. Store reads need them; app folders work without.', 'accounts.unused': 'Not used', 'accounts.remove': 'Remove', 'accounts.removeAria': 'Remove {label} and delete its key from the keychain', 'accounts.saved': '"{label}" saved', 'accounts.savedDetail': 'The key is in the system keychain.', 'accounts.playSub': 'Service account JSON key', 'accounts.appleSub': 'Team API key (.p8) from Users and Access, Integrations', 'accounts.label': 'Name', 'accounts.playPlaceholder': 'Studio Play account', 'accounts.applePlaceholder': 'Studio App Store key', 'accounts.playHow': 'A service account with access to your apps in Play Console (Users and permissions).', 'accounts.keyId': 'Key ID', 'accounts.issuerId': 'Issuer ID', 'accounts.choosePlay': 'Choose the JSON key', 'accounts.chooseApple': 'Choose the .p8 key', 'accounts.safety': 'Keys are picked in the system file dialog and go straight to the keychain. The window never sees them.', 'deps.lead': 'Local tools for screenshots, app previews, icons and simulator or emulator captures. Store work (listings, products, releases, reviews) needs none of them.', 'deps.checkAgain': 'Check again', 'deps.tools': 'Tools on this computer', 'deps.found': '{found} of {total} found', 'deps.missing': 'Missing', 'deps.appCopy': 'App copy', 'deps.installed': 'Installed', 'deps.download': 'Download', 'deps.remove': 'Remove', 'deps.getIt': 'Get it', 'deps.unavailable': 'Not for this platform', 'deps.downloading': 'Downloading {tool}', 'deps.installedToast': '{tool} installed', 'deps.failed': 'Download failed', 'deps.cancelledDetail': 'The partial download was deleted.', 'deps.removed': 'Removed from the app data folder', 'deps.inAppData': 'In the app data folder ({folder})', 'deps.notDownloaded': 'Not downloaded', 'deps.source': 'Source', 'deps.license': 'License', 'deps.verify': 'Verified by', 'deps.verifyFfmpeg': 'SHA-256 of the exact archive, pinned in this app version', 'deps.verifyChrome': 'Google\'s code signature (macOS, Windows) or the version banner (Linux)', 'deps.licenseLink': 'License and source', 'deps.terminal': 'From a terminal', 'deps.terminalSub': 'The same check, and the usual install commands', 'deps.copy': 'Copy "{cmd}"', 'deps.copied': 'Copied', 'dl.resolve': 'Finding the download', 'dl.download': 'Downloading', 'dl.verify': 'Verifying', 'dl.unpack': 'Unpacking', 'dl.install': 'Installing', 'dl.done': 'Done', 'dl.error': 'Failed', 'dl.cancelled': 'Cancelled', 'settings.lead': 'Appearance, language, shortcuts and what this app runs on.', 'settings.appearance': 'Appearance', 'settings.theme': 'Theme', 'settings.system': 'System', 'settings.light': 'Light', 'settings.dark': 'Dark', 'settings.motion': 'Motion', 'settings.followSystem': 'Follow the system', 'settings.reduce': 'Reduce', 'settings.language': 'Language', 'settings.shortcuts': 'Keyboard shortcuts', 'settings.scPalette': 'Command palette', 'settings.scWorkspace': 'App folders, Accounts, Dependencies, Settings', 'settings.scTabs': 'Previous / next app tab', 'settings.scTabArrows': 'Move between tabs (tab list focused)', 'settings.scClose': 'Close a dialog', 'settings.data': 'Saved reads', 'settings.dataText': 'The last store reads are kept in the app data folder so screens open with them offline, always marked with their time. No keys are kept there.', 'settings.clearCache': 'Clear saved reads', 'settings.cacheCleared': 'Saved reads cleared', 'settings.about': 'About', 'settings.app': 'App', 'settings.debug': 'debug build', 'settings.methods': '{count} methods', 'settings.tools': 'Local tools', 'settings.telemetry': 'Telemetry', 'settings.telemetryNone': 'None. The app only talks to the store APIs through storebound, with your keys.', 'wz.s1': 'Welcome', 'wz.s2': 'Your apps', 'wz.s3': 'Store keys', 'wz.s4': 'Local tools', 'wz.s5': 'First read', 'wz.footer': 'You can open this guide again from Settings or the command palette.', 'wz.footerSafe': 'Nothing is submitted or released from here.', 'wz.welcomeTitle': 'Every app, both stores, one window', 'wz.welcomeLead': 'storebound desktop shows where each of your apps stands on the App Store and Google Play, and runs the storebound CLI for you. Five short steps get you there.', 'wz.p1t': 'One portfolio', 'wz.p1s': 'Releases, rollouts, catalog parity, health and reviews of every app.', 'wz.p2t': 'Safe by design', 'wz.p2s': 'Reads are read-only. Every change shows a dry run and a native confirmation first.', 'wz.p3t': 'Your keys stay yours', 'wz.p3s': 'Store keys live in the system keychain. No account, no telemetry.', 'wz.appsTitle': 'Add your apps', 'wz.appsLead': 'Each app is a folder with a storebound.config.ts that describes it on both stores.', 'wz.addTitle': 'Add an existing folder', 'wz.addText': 'The folder already has a storebound.config.ts (from storebound init or the CLI).', 'wz.initTitle': 'Start a new app folder', 'wz.initText': 'Writes the templates for a profile into a folder you choose. Existing files are kept.', 'wz.added': 'Added', 'wz.ready': 'Ready', 'wz.keysTitle': 'Add your store keys', 'wz.keysLead': 'Store reads need an API key per store. You can skip this and add them later in Accounts.', 'wz.mapHint': 'Which accounts this app uses', 'wz.toolsTitle': 'Check the local tools', 'wz.toolsLead': 'Screenshots, previews and icons use ffmpeg and Chrome. The app can download its own copies; store work needs none of them.', 'wz.toolsNote': 'The same check in a terminal:', 'wz.readTitle': 'Read the stores', 'wz.readLead': 'One read-only pass over App Store Connect and Google Play fills the portfolio: versions, review state, rollouts and catalog parity.', 'wz.readNow': 'Read the stores now', 'wz.readDone': '{count} apps read {when}', 'wz.needApp': 'Add an app folder first (step 2).', 'wz.skip': 'Skip for now', 'wz.back': 'Back', 'wz.next': 'Next', 'wz.finish': 'Finish', 'nav.ignored': 'Ignored', 'nav.studios': 'Studios', 'nav.studiosLabel': 'Studios', 'palette.studio': 'Studio', 'action.importApps': 'Import apps', 'action.importAppsHint': 'Read-only: every app each store account can see, from App Store Connect and Google Play', 'apps.storeOnly': 'Store only', 'apps.storeOnlyHint': 'On a store account, no app folder yet: store data only (read-only)', 'common.save': 'Save', 'studio.studio': 'Studio', 'studio.none': 'No studio', 'studio.noneSub': 'Accounts not in a studio yet', 'studio.new': 'New studio', 'studio.newSub': 'A studio groups store accounts, and with them their apps', 'studio.name': 'Name', 'studio.namePlaceholder': 'Example Games', 'studio.color': 'Colour', 'studio.add': 'Add a studio', 'studio.added': 'Studio {name} added', 'studio.edit': 'Edit', 'studio.logo': 'Logo', 'studio.logoClear': 'Remove logo', 'studio.remove': 'Remove', 'studio.removeHint': 'Removes the studio only: its accounts and apps stay, without a studio', 'studio.counts': '{count} accounts · {apps} apps · {store} store only', 'studio.noAccounts': 'No store account in this studio yet: add one below and pick this studio.', 'studio.allAssigned': 'Every account is in a studio.', 'color.indigo': 'Indigo', 'color.violet': 'Violet', 'color.rose': 'Rose', 'color.amber': 'Amber', 'color.emerald': 'Emerald', 'color.teal': 'Teal', 'color.sky': 'Sky', 'color.slate': 'Slate', 'accounts.leadStudios': 'Studios group your store accounts: Google Play service accounts and App Store Connect team keys. Keys stay in the system keychain; apps come in with Import apps.', 'accounts.emptyTextStudios': 'Add a studio, then its Google Play service account and App Store Connect keys. Import apps then lists every app those keys can see.', 'accounts.playSubMany': 'Service account JSON key. One service account can be invited to several Play developer accounts: it sees all their apps.', 'accounts.appleSubMany': 'One API key per team (company or individual): key id, issuer id and the .p8 file.', 'accounts.safetyStudios': 'Keys are read once from the file you pick, stored in the system keychain and never shown again. storebound gets one account\'s key in memory for one call. Studio names, labels and app lists stay on this computer.', 'acct.ok': 'Works', 'acct.noApps': 'No apps', 'acct.permission': 'Permission missing', 'acct.revoked': 'Key revoked', 'acct.apiDisabled': 'API off', 'acct.error': 'Not reachable', 'acct.notTested': 'Not tested', 'acct.kindPlay': 'Google Play service account', 'acct.kindApple': 'App Store Connect team key', 'acct.appsRead': '{count} apps, read {when}', 'acct.appsRead_one': '1 app, read {when}', 'acct.notImported': 'apps not imported yet', 'acct.folders': 'used by {count} folders', 'acct.folders_one': 'used by 1 folder', 'acct.test': 'Test', 'acct.testAll': 'Test all accounts', 'acct.import': 'Import apps', 'acct.edit': 'Rename or move to a studio', 'acct.editAria': 'Edit {label}', 'acct.ignore': 'Ignore this account', 'acct.ignoreHint': 'Ignore: leave this account\'s apps out of the portfolio and store reads', 'acct.unignore': 'Show this account again', 'acct.ignored': 'Ignored', 'acct.openFix': 'Open', 'ignored.lead': 'Apps and accounts left out of the portfolio, the sidebar and store reads. Nothing on the stores changes.', 'ignored.restoreAll': 'Restore all', 'ignored.restore': 'Restore', 'ignored.emptyTitle': 'Nothing is ignored', 'ignored.emptyText': 'Ignore an app from its page (or a whole account in Studios & accounts) to keep test apps and old titles out of the way.', 'ignored.apps': 'Apps', 'ignored.appsSub': '{count} ignored', 'ignored.accounts': 'Accounts', 'ignored.accountsSub': 'Every app of these accounts is left out', 'ignored.accountApps': '{count} apps', 'ignored.accountApps_one': '1 app', 'ignored.noApps': 'No ignored app.', 'ignored.noAccounts': 'No ignored account.', 'ignored.howTo': 'Pairing and single-store apps:', 'ignored.toPairing': 'Settings > App pairing', 'pair.folder': 'From its app folder', 'pair.manual': 'Paired by hand', 'pair.id': 'Paired: same bundle id and package name', 'pair.close': 'Paired: close ids', 'pair.name': 'Paired: same name', 'pair.single': 'One store only', 'app.moveStudio': 'Move to a studio', 'app.pairWith': 'Pair with', 'app.pairWithName': 'Pair {name} with', 'app.pick': 'Pick an app', 'app.unpair': 'Unpair', 'app.ignore': 'Ignore', 'app.ignoreHint': 'Leave this app out of the portfolio and store reads (Ignored lists it to restore)', 'app.studioHint': 'Open the studio', 'app.storeOnlyTitle': 'Store only.', 'app.storeOnlyText': 'This app is on your store accounts but has no app folder: releases, reviews, health and TestFlight are shown read-only. Link its folder, or start one, to manage listings, products and checks.', 'app.linkFolder': 'Link a folder', 'app.initHere': 'Start an app folder here', 'app.linked': '{name} is linked', 'app.linkFailed': 'Could not link the folder', 'portfolio.subStudios': '{count} apps · {stores} store listings · {studios} studios', 'portfolio.emptyAccounts': 'Add a studio and its accounts', 'portfolio.notImported': 'Apps of {count} accounts are not imported yet: Import apps lists everything those keys can see.', 'portfolio.notImported_one': 'Apps of 1 account are not imported yet: Import apps lists everything its key can see.', 'portfolio.toolbar': 'Filter and sort the apps', 'portfolio.search': 'Search apps, bundle ids, packages', 'portfolio.studioFilter': 'Studio', 'portfolio.allStudios': 'All studios', 'portfolio.sort': 'Sort', 'portfolio.sortAttention': 'Needs attention', 'portfolio.sortRecent': 'Recently updated', 'portfolio.sortName': 'Name', 'portfolio.group': 'Group by studio', 'portfolio.groupCount': '{count} apps', 'portfolio.noConfig': 'No config', 'portfolio.storeOnlyCheck': 'Store only', 'portfolio.noMatch': 'No app matches', 'portfolio.noMatchText': 'Clear the search or pick another studio.', 'portfolio.studiosN': '{count} studios', 'portfolio.studiosN_one': '1 studio', 'portfolio.folders': 'App folders', 'portfolio.foldersN': '{count} folders · {store} store only', 'portfolio.ignoredN': '{count} apps', 'portfolio.ignoredN_one': '1 app', 'kpi.appsSubStore': 'iOS {ios} · Android {android} · {store} store only', 'toast.importing': 'Importing apps', 'toast.importingDetail': 'Every app each account can see (read-only)', 'toast.importDone': '{count} apps on your accounts', 'toast.importDone_one': '1 app on your accounts', 'toast.importDoneDetail': 'from {count} accounts', 'toast.importDoneDetail_one': 'from 1 account', 'toast.importPartial': '{count} accounts could not be read', 'toast.importPartial_one': '1 account could not be read', 'toast.saveFailed': 'Not saved', 'notify.releaseTitle': '{name}: store state changed', 'notify.releaseBody': '{store} {version}: {phase}', 'notify.lowTitle': '{name}: {count} new low ratings', 'notify.lowTitle_one': '{name}: a new low rating', 'notify.crashTitle': '{name}: over the Play threshold', 'set.lead': 'Studios, accounts, store reads, the offline cache, language, theme, notifications and more. Everything stays on this computer.', 'set.sections': 'Settings sections', 'set.studios': 'Studios & accounts', 'set.studiosSub': 'Which accounts belong to which studio', 'set.studioLine': 'Play {play} · App Store {apple} · {apps} apps', 'set.noStudios': 'No studio yet. Studios group accounts and their apps in the portfolio and the sidebar.', 'set.manage': 'Manage', 'set.pairing': 'App pairing & ignore list', 'set.pairingSub': 'An iOS and an Android app become one card when their ids or names match; pair or split them by hand here', 'set.pairedHow': 'Pairing', 'set.noCandidates': 'Nothing to pair with', 'set.noStoreOnly': 'Every app has its folder: pairing comes from the configs.', 'set.ignoredLine': 'Ignored: {count} apps, {accounts} accounts.', 'set.openIgnored': 'Open the list', 'set.refresh': 'Store reads', 'set.refreshSub': 'Reads use each account\'s API quota: they run when you ask, or on the schedule here', 'set.autoRefresh': 'Read the stores automatically', 'set.autoHint': 'While the app is open. Off by default.', 'set.off': 'Off', 'set.min': '{n} min', 'set.hour': '{n} h', 'set.onLaunch': 'Read when the app starts', 'set.onLaunchHint': 'Imports the apps of every account, then reads every app\'s store status', 'set.icons': 'Store icons on import', 'set.iconsHint': 'One extra request per app; folders use their own icon', 'set.parallel': 'Apps read at the same time', 'set.parallelHint': 'Fewer is gentler on rate limits', 'set.cache': 'Offline cache', 'set.cacheSub': 'The last store reads, shown with their time when you are offline', 'set.cacheSize': 'On disk', 'set.cacheRows': '{count} saved reads', 'set.cacheRows_one': '1 saved read', 'set.cacheOldest': 'Oldest', 'set.keep': 'Keep saved reads', 'set.days': '{n} days', 'set.year': '1 year', 'set.always': 'Always', 'set.notifications': 'Notifications', 'set.notificationsSub': 'After a read, when something changed since the previous one', 'set.nReview': 'Review and release state changes', 'set.nReviewHint': 'In review, approved, rejected, live, halted', 'set.nLow': 'New 1 or 2 star reviews', 'set.nLowHint': 'When the Reviews tab reads new ones', 'set.nCrash': 'Crash or ANR rate over the threshold', 'set.nCrashHint': 'Google Play bad behavior thresholds', 'set.testNotify': 'Send a test notification', 'set.testTitle': 'storebound', 'set.testBody': 'Notifications work.', 'set.appCopy': 'app copy', 'set.depsText': 'Store work needs no local tool. Screenshots, previews and icons use ffmpeg and Chrome: one click on the Dependencies screen.', 'set.cli': 'CLI sidecar', 'set.protocol': 'Protocol', 'set.state': 'State', 'set.running': 'Running', 'set.writes': 'Writes', 'set.writesText': 'Dry run first, then your Apply in a system dialog. Submit, release and publish stay in the consoles.', 'set.privacy': 'Privacy', 'set.p1': 'No telemetry, no analytics, no crash reports: the app talks only to the stores, with your keys, when you ask.', 'set.p2': 'Store keys live in the system keychain; the app data folder holds names, settings and saved reads, never keys.', 'set.p3': 'Nothing is written into your app folders unless you confirm it in a system dialog.', 'set.p4': 'Tester emails stay masked; review drafts stay in each app folder\'s .storebound/ (gitignored).', 'set.reveal': 'Show the data folder', 'set.scQuit': 'Quit', 'set.updates': 'Updates', 'set.channel': 'Channel', 'set.stable': 'Stable', 'set.beta': 'Beta', 'set.updatesText': 'Signed updates from storebound.dev arrive with the first public desktop release; the channel is kept for then.', 'set.reset': 'Reset', 'set.resetText': 'Forgets {accounts} accounts (their keys are removed from the keychain), {studios} studios, {folders} app folders (the folders stay on disk), pairing, the ignore list, settings and saved reads. A system dialog asks first.', 'set.resetButton': 'Reset the app', 'set.resetDone': 'storebound desktop was reset', 'set.footer': '{n} apps known to this computer', 'studio.counts_one': '1 account · {apps} apps · {store} store only', 'portfolio.groupCount_one': '1 app', 'portfolio.groupAccounts': '{count} accounts', 'portfolio.groupAccounts_one': '1 account', 'write.dryRunning': 'Dry run first: nothing changes yet', 'write.notApplied': 'Not applied', 'write.notAppliedDetail': 'You chose Cancel in the dialog: nothing changed.', 'act.storeTitle': 'Push to the stores', 'act.storeSub': 'Listing text, screenshots and previews from this folder, and the local renders', 'act.playListing': 'Listing text', 'act.playListingDone': 'Play listing updated', 'act.playImages': 'Graphics and screenshots', 'act.version': 'Version', 'act.appleListing': 'Version {version} and its text', 'act.appleListingDone': 'App Store version and text updated', 'act.appleShots': 'Screenshots', 'act.applePreviews': 'App previews', 'act.uploaded': 'Uploaded', 'act.slowHint': 'Can take minutes: progress shows in the toast, Cancel stops it', 'act.render': 'Render (local)', 'act.renderLang': 'Language to render', 'act.allLangs': 'All languages', 'act.renderShots': 'Render screenshots', 'act.renderVideo': 'Cut app previews', 'act.icons': 'Generate icons', 'act.gallery': 'Review gallery', 'act.galleryDone': 'Gallery written next to the renders', 'act.rendered': 'Done', 'act.localHint': 'Local files only; needs ffmpeg and Chrome (Dependencies)', 'act.note': 'Each action runs a dry run and shows it in a system dialog before anything changes. Nothing here submits for review or publishes: that stays in the consoles.', 'act.catalogTitle': 'Sync the catalog', 'act.catalogSub': 'Create and update products and subscriptions with their regional prices from the config', 'act.playProducts': 'One-time products', 'act.playSubs': 'Subscriptions', 'act.appleIap': 'In-app purchases', 'act.appleSubs': 'Subscriptions', 'act.synced': 'Catalog updated', 'act.prices': 'Prices', 'act.pricesExport': 'Export prices (CSV)', 'act.pricesExported': 'Prices exported into the folder', 'act.pricesImport': 'Changing live prices from a sheet stays a terminal step:', 'act.catalogNote': 'Never submits: new items wait in the consoles until you send them with a version.', 'roll.playNow': 'Rollout {pct} %', 'roll.share': 'New user share', 'roll.toShare': 'Raise to {pct} %', 'roll.halt': 'Halt', 'roll.haltHint': 'Stops new installs of the update; not a rollback', 'roll.halted': 'Rollout halted', 'roll.resume': 'Resume', 'roll.complete': 'Everyone (100 %)', 'roll.completeHint': 'Completes the staged rollout: every user gets the update', 'roll.done': 'Rollout updated', 'roll.iosNow': 'Phased release, day {day} of 7', 'roll.pause': 'Pause', 'roll.pauseHint': 'Holds the automatic updates (up to 30 days); not a rollback', 'roll.paused': 'Phased release paused', 'roll.everyone': 'Release to everyone', 'roll.everyoneHint': 'Ends the phased release: every user with automatic updates gets it now', 'roll.phasedOn': 'Turn on phased release', 'roll.phasedOnHint': 'When this version goes live, it reaches users with automatic updates over 7 days', 'roll.phasedOnDone': 'Phased release is on', 'tf.what': 'What to Test', 'tf.groupsBtn': 'Internal groups', 'tf.whatToTest': 'What to Test for build {build}', 'tf.whatPlaceholder': 'What changed and what to look at (every App Store locale gets this text)', 'tf.whatSave': 'Set this text', 'tf.whatFromFile': 'From the listing file', 'tf.whatFromFileHint': 'Each locale\'s whatToTest (or What\'s New) from the App Store listing file', 'tf.whatSaved': 'What to Test updated', 'tf.toInternal': 'Give build {build} to internal groups', 'tf.noInternal': 'No internal group: create one in App Store Connect or with apple.testflight.groups.', 'tf.distribute': 'Give to these groups', 'tf.distributed': 'Build added to the groups', 'tf.externalNote': 'External groups and Beta App Review stay in App Store Connect.', 'tf.testersTitle': 'Testers', 'tf.testersSub': 'From the testers CSV in this folder (.storebound/testers.csv, never committed)', 'tf.testersGroup': 'Group', 'tf.testersAll': 'Every group in the CSV', 'tf.testersAdd': 'Add new testers', 'tf.testersHint': 'Apple emails each new tester an invitation once the group has a build', 'tf.testersDone': 'Testers added', 'tf.testersNote': 'Emails stay masked in every line and dialog. Removing testers stays a terminal step.', 'reviews.replyEditor': 'Reply', 'reviews.replyPlaceholder': 'Plain text, in the reviewer\'s language. No incentives, no personal data.', 'reviews.unsaved': 'Not saved', 'reviews.save': 'Save draft', 'reviews.saved': 'Draft saved (approve it again)', 'reviews.send': 'Send reply', 'reviews.sendHint': 'Public: the reviewer is notified. A system dialog shows the reply first.', 'reviews.sent': 'Reply sent', 'reviews.incentive': 'Offers something for a rating or asks for stars: not allowed', 'reviews.tooLong': 'Longer than the store allows ({limit} characters)', 'reviews.sendNoteD3': 'Replies are public. Save, approve, then Send: each step shows a system dialog first.', } as const;