{
  "brand": "Tools",

  "login.title": "Sign in · Tools",
  "login.tagline": "The tools you use to keep an eye on your sites in Google.",
  "login.failed": "We could not sign you in",
  "login.email": "Email",
  "login.password": "Password",
  "login.submit": "Sign in",
  "login.submitting": "Signing in…",

  "tools.title": "Tools",
  "tools.description": "Pick the one to work with. You can switch any time from the menu.",
  "tools.search-console.name": "Search Console",
  "tools.search-console.description": "Follow which pages of your site are indexed in Google, register its sitemaps, and find out when something stops being indexed.",
  "tools.seo.name": "SEO",
  "tools.seo.description": "See which searches your site shows up for, how its position changes over time, and which pages bring the traffic.",

  "common.cancel": "Cancel",
  "common.close": "Close",
  "common.closePanel": "Close the panel",
  "common.copy": "Copy",
  "common.copy.done": "Copied",
  "common.copy.failed": "Could not copy",
  "common.copy.announced": "Copied to the clipboard",
  "common.copy.failedDetail": "We could not copy it. Select the text and copy it by hand.",
  "common.irreversible": "This cannot be undone.",
  "common.notIdentified": "Not identified",
  "common.oneMoment": "One moment…",
  "common.save": "Save",
  "common.saving": "Saving…",
  "common.skipToContent": "Skip to content",
  "common.opensInNewTab": "(opens in another tab)",

  "time.justNow": "just now",
  "time.noDate": "No date",
  "time.timezone": "Timezone: {zone}.",

  "serviceAccount.heading": "Authorize the service account in Search Console",
  "serviceAccount.intro": "Google does not know yet that this service account can read your site. You have to add it yourself, once per property.",
  "serviceAccount.where": "It goes in *Settings → Users and permissions → Add user*, with *owner* permission. With anything lower — restricted or full user — URL inspection does not work and Google does not say why.",
  "serviceAccount.copy": "Copy the address",

  "batchProgress.label": "Batch progress",
  "batchProgress.count": "{processed} of {total} processed",
  "batchProgress.notStarted": "Not started yet",
  "batchProgress.valueIncomplete": "{count} · the batch finished without completing",
  "batchProgress.queued": "Not started yet · {total} to process",
  "batchProgress.failed.one": "{total} failed",
  "batchProgress.failed.other": "{total} failed",
  "batchProgress.pending.one": "{total} was left unprocessed.",
  "batchProgress.pending.other": "{total} were left unprocessed.",
  "batchProgress.incomplete": "It finished without completing.",
  "batchProgress.empty.queued": "Not started yet.",
  "batchProgress.empty.completed": "The batch had no items to process.",
  "batchProgress.empty.terminal": "It did not get to process a single item.",
  "batchProgress.empty.unknown": "We do not know yet how many items it will touch.",

  "urlList.unavailable": "The addresses are listed once the batch finishes.",
  "urlList.before": "Before",
  "urlList.after": "After",
  "urlList.addresses.one": "{total} address",
  "urlList.addresses.other": "{total} addresses",
  "urlList.truncated.one": "Another {total} is not listed here.",
  "urlList.truncated.other": "Another {total} are not listed here.",
  "quota.short": "Quota",
  "quota.batchShare": "this batch · {spent} of {limit} that day",
  "quota.pockets": "Pockets",
  "quota.exhausted.short": "Quota exhausted",
  "quota.exhausted.manualReserve": "Manual reserve exhausted",
  "quota.exhausted.automatic": "Automatic cycle exhausted",
  "quota.today": "Today's quota",
  "quota.batchDay": "Quota for the batch's day",
  "quota.limit.one": "{total} query for this property.",
  "quota.limit.other": "{total} queries for this property.",
  "quota.used": "{used} of {quota} used",
  "quota.remaining": "Left:",
  "quota.remained": "Were left:",
  "quota.automatic.title": "Automatic cycle",
  "quota.automatic.note": "It cannot touch the manual reserve.",
  "quota.manual.title": "Reserved for manual use",
  "quota.manual.noReserve": "There is no reserved quota: a manual inspection can only use what the automatic cycle did not spend.",
  "quota.manual.plusUnused.one": "It can also use the 1 the automatic cycle has not spent yet.",
  "quota.manual.plusUnused.other": "It can also use the {total} the automatic cycle has not spent yet.",
  "quota.manual.untouched": "The automatic cycle does not touch this quota.",
  "quota.exhausted.today": "Today's quota ran out. It renews tomorrow at 00:00 ({timezone}).",
  "quota.exhausted.thatDay": "That day the quota ran out completely.",
  "quota.automaticExhausted.today": "The automatic cycle already used its whole quota for today. The manual reserve is still available.",
  "quota.automaticExhausted.thatDay": "That day the automatic cycle ran out of quota before finishing.",
  "quota.footnote": "This is the daily quota Google gives this property, not a resource of ours. It measures how much we query it; it says nothing about the site's coverage.",

  "table.pageOf": "page {page} of {pages}",
  "table.pageOfCapitalized": "Page {page} of {pages}",
  "table.previous": "Previous",
  "table.next": "Next",
  "table.pagination": "Pagination",
  "table.sort.clear": "Clear the sort",
  "table.sort.asc": "Sort from lowest to highest",
  "table.sort.desc": "Sort from highest to lowest",
  "rowAction.detail": "See the details",
  "rowAction.open": "Open",
  "rowAction.list": "See the full list",
  "rowAction.copy": "Copy",
  "rowAction.download": "Download",
  "rowAction.rename": "Rename",
  "rowAction.retry": "Run it again",
  "rowAction.revoke": "Revoke",
  "rowAction.close": "Close",
  "rowAction.delete": "Delete",
  "table.rowActions": "Row actions",
  "table.expandRow": "Show details",
  "table.collapseRow": "Hide details",
  "table.first": "First page",
  "table.last": "Last page",
  "table.rowsPerPage": "Rows per page",
  "table.columns": "Columns",
  "table.columnsMenu": "Choose which columns to show",
  "table.selected.one": "{selected} of {count} row selected",
  "table.selected.other": "{selected} of {count} rows selected",
  "table.filters": "List filters",
  "table.clearFilters": "Clear all",
  "table.clearFiltersLabel": "Clear the filters",
  "table.all": "All",
  "table.noMatchingOption": "No option matches.",
  "table.filterSelected.one": "{count} selected",
  "table.filterSelected.other": "{count} selected",

  "nav.logout": "Log out",
  "nav.profile": "Profile",
  "nav.home": "Home",
  "nav.domains": "Domains",
  "nav.coverage": "Coverage",
  "nav.sitemaps": "Sitemaps",
  "nav.batches": "Batches",
  "nav.siteSettings": "Site settings",
  "nav.notifications": "Notifications",
  "nav.connection": "Connection",
  "nav.apiKeys": "API keys",
  "nav.users": "Users",
  "nav.keywords": "Keywords",
  "nav.pages": "Pages",
  "nav.cannibalization": "Cannibalization",
  "nav.group.searchConsole": "Search Console",
  "nav.group.seo": "SEO",
  "nav.group.system": "System",
  "nav.whereYouAre": "Where you are",
  "nav.unread.one": "1 unread notice",
  "nav.unread.other": "{count} unread notices",

  "permission.siteOwner": "Owner",
  "permission.siteFullUser": "Full user",
  "permission.siteRestrictedUser": "Restricted user",
  "permission.siteUnverifiedUser": "Unverified",
  "property.notOwner.one": "One of the properties does not have owner permission.",
  "property.notOwner.other": "{total} properties do not have owner permission.",
  "property.notOwner.consequence": "Sitemaps will still work, but URL inspection will not, and Google does not say why. You change it in Search Console, under Settings → Users and permissions.",

  "account.review": "Review",

  "serverError.unmapped": "We could not complete the action",
  "serverError.noDetail": "The server did not return a reason.",
  "serverError.reload": "Reload",
  "serverError.technical": "Technical detail",
  "serverError.code": "code",
  "serverError.UNAUTHENTICATED.title": "You have to sign in again",
  "serverError.UNAUTHENTICATED.explanation": "The session expired, or the key you arrived with stopped being valid.",
  "serverError.PERMISSION_DENIED.title": "Your account cannot do this",
  "serverError.PERMISSION_DENIED.explanation": "The resource exists, but your account cannot do this to it.",
  "serverError.NOT_FOUND.title": "That is gone",
  "serverError.NOT_FOUND.explanation": "The resource does not exist or does not belong to this account. It may have been deleted from another tab.",
  "serverError.VALIDATION_FAILED.title": "What was sent is not valid",
  "serverError.VALIDATION_FAILED.explanation": "Check the marked fields: the detail for each one shows up next to it.",
  "serverError.CONFLICT.title": "Things changed in the meantime",
  "serverError.CONFLICT.explanation": "The action cannot be applied to the current state of the resource. Reload to see how it ended up.",
  "serverError.QUOTA_EXHAUSTED.title": "Today's quota ran out",
  "serverError.QUOTA_EXHAUSTED.explanation": "There is no daily quota left for this property. It renews when the next day starts in your display time zone.",
  "serverError.RATE_LIMITED.title": "Too many requests in a row",
  "serverError.RATE_LIMITED.explanation": "We paused for a moment so we would not go over the limit. Wait a few seconds.",
  "serverError.CREDENTIAL_NOT_READY.title": "The Google connection still has to be verified",
  "serverError.CREDENTIAL_NOT_READY.explanation": "There is no verified credential on this account, so we cannot query Search Console.",
  "serverError.DOMAIN_NOT_OPERATIONAL.title": "This domain does not have confirmed access yet",
  "serverError.DOMAIN_NOT_OPERATIONAL.explanation": "We could not confirm that the service account owns this property in Search Console.",
  "serverError.PROVIDER_UNAVAILABLE.title": "We could not reach Google",
  "serverError.PROVIDER_UNAVAILABLE.explanation": "Google did not answer in time. It is not a problem with your credential or your setup.",
  "serverError.INTERNAL_ERROR.title": "Something broke on our side",
  "serverError.INTERNAL_ERROR.explanation": "It is not something you did wrong. Try again; if it keeps happening, tell us the exact time.",
  "serverError.domainAccess.PERMISSION_DENIED.title": "We found the property, but we cannot read it",
  "serverError.domainAccess.PERMISSION_DENIED.explanation": "Our service account does not have permission to read it. Check that it is listed as Owner and not as a reader.",
  "serverError.domainAccess.PROVIDER_UNAVAILABLE.title": "Google did not answer in time",
  "serverError.domainAccess.PROVIDER_UNAVAILABLE.explanation": "We did not change your domain's state.",
  "serverError.PROPERTY_NOT_FOUND.title": "There is no property with that shape",
  "serverError.PROPERTY_NOT_FOUND.explanation": "Search Console has no property with this shape. The same site may be registered with the other one: they are two different properties and they are not interchangeable.",

  "access.AWAITING_ACCESS.label": "Awaiting access",
  "access.AWAITING_ACCESS.help": "The service account still has to be authorized in Search Console.",
  "access.OPERATIONAL.label": "Operational",
  "access.OPERATIONAL.help": "We can read the property and monitor its URLs.",
  "access.ACCESS_LOST.label": "Access lost",
  "access.ACCESS_LOST.help": "We stopped being able to read this property. Monitoring is on hold; the history is kept.",
  "access.ACCESS_REVOKED.label": "Access revoked",
  "access.ACCESS_REVOKED.help": "Access was revoked from the admin. The history is kept.",
  "access.SUSPENDED.label": "Suspended",
  "access.SUSPENDED.help": "Monitoring is on hold.",
  "access.onHold": "On hold",
  "access.withoutCredential": "This is the last thing we could read: the account credential cannot ask Google anything right now.",

  "coverage.title": "Coverage for {hostname}",
  "coverage.description": "Which URLs have data from Google, what it is, and when we fetched it.",
  "coverage.caption": "URLs for {hostname}, unfiltered",
  "coverage.caption.filtered": "URLs for {hostname} — filter: {filters}",
  "coverage.column.fetched": "Data fetched",
  "coverage.column.reason": "Reason declared by Google",
  "coverage.column.canonical": "Google's canonical",
  "coverage.column.crawl": "Google's last crawl",
  "coverage.column.sitemap": "In the sitemap",
  "coverage.notReported": "Not reported",
  "coverage.yes": "Yes",
  "coverage.gone": "No longer there",
  "coverage.seeHistory": "See the history",
  "coverage.seeQuota": "See the domain's quota",
  "coverage.queryNow": "Query now",
  "coverage.querying": "Querying Google",
  "coverage.activity": "Query activity",
  "coverage.seeProgress": "See the progress of batch",
  "coverage.dataFrom": "The most recent data came from this batch",
  "coverage.noCloseDate": "no close date",
  "coverage.queried": "{processed} of {total} URLs queried",
  "coverage.group.with-data": "With data from Google",
  "coverage.group.not-indexed": "Not indexed",
  "coverage.group.without-data": "Not checked yet",
  "coverage.family.indexed": "Indexed",
  "coverage.family.not_indexed": "Not indexed",
  "coverage.family.without_data": "Not checked yet",
  "coverage.tab.urls": "URLs",
  "coverage.tab.summary": "Summary",
  "coverage.tab.activity": "Activity",
  "coverage.filter.slice": "Slice",
  "coverage.searchPlaceholder": "/product…",
  "coverage.row.actions": "Actions for {url}",
  "coverage.select.all": "Select every URL on this page",
  "coverage.select.row": "Select {url}",
  "coverage.truncated.title": "This list arrived trimmed",
  "coverage.truncated.description": "Showing the first {shown} URLs of {total}. Narrow the search or the filters to reach the rest.",
  "coverage.activity.description": "Where the data on this screen came from, and what is running right now. Look here when a figure does not add up: it says which batch left it, how much it read and when it closed. Most of the time there is nothing running, and that is the answer, not a gap.",
  "coverage.activity.empty": "Nothing has run yet on this site. As soon as you query Google, the batch that leaves the data shows up here.",
  "coverage.provenance.processed": "Processed",
  "coverage.provenance.finished": "Finished",
  "coverage.history.reported": "What Google reported",
  "coverage.history.timeline": "Every answer, newest first",
  "coverage.filter.group": "slice \"{label}\"",
  "coverage.filter.group.title": "Slice",
  "coverage.filter.state": "state \"{label}\"",
  "coverage.filter.state.title": "State reported by Google",
  "coverage.filter.inSitemap": "present in a sitemap",
  "coverage.filter.notInSitemap": "no longer in any sitemap",
  "coverage.filter.search": "with \"{term}\" in the address",
  "coverage.filter.all": "All",
  "coverage.filter.allWithCount": "All ({total})",
  "coverage.filter.withCount": "{label} ({count})",
  "coverage.filter.notIndexedCaveat": "\"Not indexed\" does not include the {total} not checked: we know nothing about those yet.",
  "coverage.frozen.title": "This data is frozen",
  "coverage.frozen.before": "Access to the Search Console property is \"{state}\", so we have not been querying this domain since",
  "coverage.frozen.lastCheck": "the last check",
  "coverage.frozen.after": ". What you see below is the last thing Google reported, with the date of each piece of data.",
  "coverage.empty.title": "We have not discovered any URL yet.",
  "coverage.empty.description": "URLs come from the domain's sitemaps: register one and sync so they start showing up here.",
  "coverage.empty.filtered.title": "No URL matches the filter",
  "coverage.empty.filtered.description": "Try another slice or clear the filters to see every URL of the domain.",
  "coverage.retired.one": "The table includes {retired} URL that is no longer in any sitemap and keeps its last data. That is why there are more than the {total} in the summary, which counts only what is monitored today.",
  "coverage.retired.other": "The table includes {retired} URLs that are no longer in any sitemap and keep their last data. That is why there are more than the {total} in the summary, which counts only what is monitored today.",
  "coverage.export.title": "Export to CSV",
  "coverage.export.amount.one": "{total} URL",
  "coverage.export.amount.other": "{total} URLs",
  "coverage.export.filtered": "It exports the {amount} matching the filter that is set, not the whole domain.",
  "coverage.export.all": "It exports the {amount} in the table.",
  "coverage.export.columns": "Each row includes the state, the reason Google reported, and the date we fetched it.",
  "coverage.export.large": "That is {amount}, more than the {threshold} that fit in a direct download: the file is prepared in the background and we tell you here when it is ready. You can keep using the platform in the meantime.",
  "coverage.export.immediate": "The file downloads right away.",
  "coverage.export.prepare": "Prepare the file with {amount}",
  "coverage.export.action": "Export {amount}",
  "coverage.export.requested": "We asked for the file with {amount}, with the same filter that is on screen. The download starts on its own; if it does not show up, check whether the browser blocked it and press the button again.",
  "coverage.export.scope.all": "unfiltered, the whole domain",
  "coverage.export.scope.filtered": "with the filter it was asked with",
  "coverage.export.status.preparing": "We are preparing the export you asked for on",
  "coverage.export.status.preparingAfter": "({scope}). We will tell you when it is ready.",
  "coverage.export.status.failed": "We could not build the file you asked for on",
  "coverage.export.status.askAgain": "You can ask for it again.",
  "coverage.export.status.expired": "The previous export's file expired",
  "coverage.export.status.expiredAfter": "and was deleted.",
  "coverage.export.status.readyBefore": "The export you asked for on",
  "coverage.export.status.readyAfter": "is ready: {rows} rows, {size}. It can be downloaded until",
  "coverage.history.title": "History of",
  "coverage.history.description": "Each line is an answer from Google with its date. We store a new record only when the state changes, so the gaps between lines are time without changes, not time without data.",
  "coverage.history.notFound": "That address is not among this domain's URLs. It may be left over from an old link, or belong to another property.",
  "coverage.history.current": "Current state",
  "coverage.history.lastConfirmed": "Last confirmed on",
  "coverage.history.notInSitemap": "No longer in any sitemap",
  "coverage.history.noData": "We have not asked Google about this URL yet, so there is nothing to show. It does not mean it is not indexed.",
  "coverage.history.singleEntry": "A single record, from",
  "coverage.history.singleEntryAfter": ". There have been no state changes since then.",
  "coverage.history.firstEntry": "first record",
  "coverage.history.googleSaid": "Google reported:",
  "coverage.history.canonical": "Canonical chosen by Google:",
  "coverage.history.batch": "Batch",
  "coverage.history.batchGone": "The batch that fetched it is no longer stored. The date of the data is still true.",

  "domainShow.searchConsolePath": "Settings › Users and permissions › Add user",
  "domainShow.quota.title": "Inspection quota",
  "domainShow.quota.description": "How much we can ask Google about this property today. It does not measure the site's coverage.",
  "domainShow.banner.paused.title": "Monitoring for this domain is paused",
  "domainShow.banner.paused.body": "The property is still authorized, but your account credential does not let us ask Google anything. What you see here is the last thing we could read. The notice above leads to where it is fixed.",
  "domainShow.banner.awaiting.title": "We still have to be authorized in Search Console",
  "domainShow.banner.awaiting.body": "We have not confirmed that we can read this property, so we are not querying anything. Below is the address to copy and the permission it needs.",
  "domainShow.banner.lost.title": "We stopped being able to read this property",
  "domainShow.banner.lost.detected": "We detected it on",
  "domainShow.banner.lost.body": ". Monitoring is on hold and the history is kept in full.",
  "domainShow.banner.lost.question": "Was the service account removed from the property in Search Console?",
  "domainShow.banner.stopped.body": "Monitoring for this domain is on hold. All the history we gathered is still there to look at, but we will not ask Google for anything new.",
  "domainShow.addOtherShape": "Add the other shape",
  "domainShow.access.title": "Access to the property",
  "domainShow.access.description": "What Search Console lets us read of {property}.",
  "domainShow.access.copyAddress": "Copy this address and add it in Search Console, under *{path}*, with *Owner* permission. With anything lower, URL inspection does not work.",
  "domainShow.access.noCredential": "There is no credential uploaded yet, so there is no address to authorize. It is uploaded on the settings screen.",
  "domainShow.access.stopped": "This domain's access is on hold from the admin. There is nothing to check until it is reactivated.",
  "domainShow.access.reviewConnection": "Review the Google connection",
  "domainShow.access.lastAttempt": "Last attempt:",
  "domainShow.inspect.title": "Inspect {count} URLs of {hostname}?",
  "domainShow.inspect.consequence": "You are going to inspect {count} URLs using the manual quota. You have {reserve} reserved for that today. We ask what Google knows about each one: we do not ask it to crawl them.",
  "domainShow.inspect.consequence.withSurplus": "You are going to inspect {count} URLs using the manual quota. You have {reserve} reserved for that today, plus {surplus} the automatic cycle has not spent. We ask what Google knows about each one: we do not ask it to crawl them.",
  "domainShow.inspect.confirm": "Inspect {count} URLs",
  "domainShow.inspect.busy": "Inspecting…",
  "domainShow.child.coverage": "Coverage",
  "domainShow.child.coverage.empty": "There are no monitored URLs yet.",
  "domainShow.child.coverage.note": "URLs with data from Google out of the monitored total. We do not know the state of the rest.",
  "domainShow.child.sitemaps": "Sitemaps",
  "domainShow.child.sitemaps.empty": "None registered yet. The monitored URLs come from them.",
  "domainShow.child.sitemaps.note": "Registered for this domain, including the ones an index declares.",
  "domainShow.child.batchRunning": "Batch in progress",
  "domainShow.child.lastBatch": "Last batch",
  "domainShow.child.batch.noFigures": "It has not started, so there are no figures to show.",
  "domainShow.child.batch.figures": "{processed} of {total} items processed.",
  "domainShow.child.batch.queued": "It is waiting its turn. This page updates on its own when it starts.",
  "domainShow.child.batch.running": "Still running: this page updates on its own.",
  "domainShow.child.batch.none": "No batch has run on this domain yet.",
  "domainShow.child.seeAll": "See all",
  "domainShow.child.seeBatches": "See the batches",
  "domainShow.notifications.on": "Done: you will get the notices for this domain.",
  "domainShow.notifications.off": "Done: we stopped sending you notices for this domain.",
  "domainShow.settings.title": "Settings",
  "domainShow.settings.description": "How much we query this property and whether we tell you when something changes.",
  "domainShow.settings.notifications.label": "Get notices for this domain",
  "domainShow.settings.notifications.help": "We tell you in the platform when a batch for this domain finishes and when URLs that were indexed stop being indexed. The number shows up next to \"Notifications\".",
  "domainShow.settings.budget.label": "Queries per day",
  "domainShow.settings.budget.help": "Google allows up to {limit} queries a day per property. Lowering it slows the cycle down; raising it above what Google allows makes the extra queries fail.",
  "domainShow.settings.reserve.help": "The automatic cycle does not touch this quota. It stays available for whatever you trigger from here or from the API.",
  "domainShow.settings.save": "Save the quotas",
  "domainShow.settings.saved": "We saved the settings. They apply from the next cycle.",
  "domainShow.preview.noUrls": "With {budget} a day and {reserve} reserved, the automatic cycle has *{automatic}* daily queries left, and there are no monitored URLs to go through yet.",
  "domainShow.preview.noAutomatic": "With {budget} a day and {reserve} reserved, the automatic cycle has *{automatic}* daily queries left, so it will not check any of the {urls} monitored URLs. Only the ones you trigger by hand will be inspected.",
  "domainShow.preview.cycle.one": "With {budget} a day and {reserve} reserved, the automatic cycle has *{automatic}* daily queries left and going through the {urls} monitored URLs takes about *{days}* day.",
  "domainShow.preview.cycle.other": "With {budget} a day and {reserve} reserved, the automatic cycle has *{automatic}* daily queries left and going through the {urls} monitored URLs takes about *{days}* days.",
  "domainShow.preview.overLimit": "Google allows up to {limit} queries a day per property. The ones we ask beyond that will fail, and the quota is your site's: exhausting it also breaks your own tools.",
  "errors.BUDGET_NOT_INTEGER": "Type a whole number of queries per day.",
  "errors.RESERVE_NOT_INTEGER": "Type a whole number of reserved queries.",
  "errors.BUDGET_TOO_LOW": "The daily budget has to be at least 1 query. At zero, the automatic cycle would never check anything.",
  "errors.RESERVE_NEGATIVE": "The manual reserve cannot be negative.",
  "errors.RESERVE_OVER_BUDGET": "The manual reserve ({reserve}) cannot be larger than the daily budget ({budget}). Raise the budget or lower the reserve.",

  "batchShow.title": "{kind} · batch {name}",
  "batchShow.seeAllBatches": "See every batch",
  "batchShow.breadcrumb.index": "Batches",
  "batchShow.breadcrumb.detail": "Batch {name}",
  "batchShow.howItEnded": "How it ended",
  "batchShow.howItEnded.description": "{kind} on {hostname}, {origin}.",
  "batchShow.figures": "Figures",
  "batchShow.figures.description": "What the batch touched and how much quota it used doing it.",
  "batchShow.figure.inBatch": "{unit} in the batch",
  "batchShow.figure.processed": "Processed",
  "batchShow.figure.failed": "Failed",
  "batchShow.figure.pending": "Unprocessed",
  "batchShow.figure.pending.note": "They stay in the queue and go into the next cycle.",
  "batchShow.figure.quota.note": "Queries from the daily quota of your Search Console property, not a resource of ours.",
  "batchShow.quota.description": "To place what this batch used inside what was available that day.",
  "batchShow.quota.missing": "We did not store that day's quota for this property, so there is nothing to compare what this batch used against. The current quota is on the domain's page.",
  "batchShow.recorded.title": "What this batch recorded",
  "batchShow.recorded.description": "We asked what Google knows about each URL. We did not ask it to crawl them or index them.",
  "batchShow.recorded.none": "This batch left no new state recorded.",
  "batchShow.recorded.pending": "There are no recorded states yet. They show up as the batch progresses.",
  "batchShow.recorded.fetchedOn": "States fetched on",
  "batchShow.recorded.noFetchDate": "—no fetch date—",
  "batchShow.recorded.onlyChanged": ", counting only the URLs that brought information different from before:",
  "batchShow.recorded.seeUrls": "see every URL of the domain in that state",
  "batchShow.recorded.unchanged.one": "Another {total} URL was checked and still had the same state as last time, so it did not create a new record.",
  "batchShow.recorded.unchanged.other": "Another {total} URLs were checked and still had the same state as last time, so they did not create new records.",
  "batchShow.recorded.stateTitle": "Recorded state",
  "batchShow.recorded.inThisBatch": "The addresses this batch left in that state, that day.",
  "batchShow.recorded.changes": "Changes detected",
  "batchShow.recorded.transition.one": "{total} URL went from {from} to",
  "batchShow.recorded.transition.other": "{total} URLs went from {from} to",
  "batchShow.lostIndexing.title.one": "{total} URL stopped being indexed on this pass",
  "batchShow.lostIndexing.title.other": "{total} URLs stopped being indexed on this pass",
  "batchShow.lostIndexing.notRecorded": "This batch ran before we started recording which addresses these were, so only the count is left.",
  "batchShow.lostIndexing.dialogTitle": "Stopped being indexed",
  "batchShow.lostIndexing.seeAll.one": "See the {total}",
  "batchShow.lostIndexing.seeAll.other": "See all {total}",
  "batchShow.lostIndexing.truncated.one": "Another {total} is not listed here.",
  "batchShow.lostIndexing.truncated.other": "Another {total} are not listed here.",
  "batchShow.sync.title": "What this batch did",
  "batchShow.sync.description": "Submitting a sitemap tells Google it exists. It does not guarantee that Google processes it, or when.",
  "batchShow.sync.summary": "{read} sitemaps were read. {submitted} were submitted. {skipped} were skipped because they had not changed since the last submission.",
  "batchShow.sync.failed.one": "{total} failed: the reason is below.",
  "batchShow.sync.failed.other": "{total} failed: the reason for each one is below.",
  "batchShow.sync.pending": "The summary is completed when the batch finishes.",
  "batchShow.sync.urlChanges": "{newUrls} new URLs showed up and {outside} stopped being declared in any sitemap. We have not checked any of them yet: that is what the inspection batch does.",
  "batchShow.export.title": "The file",
  "batchShow.export.description.all": "It carries every URL of the domain, with the state Google reported and the date we fetched it.",
  "batchShow.export.description.filtered": "It carries the same slice of the coverage table it was asked with, with the state Google reported and the date we fetched it.",
  "batchShow.export.writing": "We are still writing it. We will tell you when it is ready; you can close this screen in the meantime.",
  "batchShow.export.failed": "We could not build it.",
  "batchShow.export.askAgain": "You can ask for it again from the domain's coverage.",
  "batchShow.export.expired": "The file expired",
  "batchShow.export.expiredAfter": "and was deleted.",
  "batchShow.export.ready": "{rows} rows, {size}. It can be downloaded until",
  "batchShow.export.download": "Download the file",
  "batchShow.export.megabytes": "{value} MB",
  "batchShow.export.kilobytes": "{value} kB",
  "batchShow.failures.title.one": "The item that failed",
  "batchShow.failures.title.other": "The items that failed",
  "batchShow.failures.title.notes": "What stopped this batch",
  "batchShow.failures.description": "Each one with the reason the attempt returned. The rest of the batch ran its course.",
  "batchShow.failures.notesMixed.one": "One of these rows is not a failure: it is a note explaining how far the batch got.",
  "batchShow.failures.notesMixed.other": "{total} of these rows are not failures: they are notes explaining how far the batch got.",
  "batchShow.failures.cutBefore": "The batch stopped before attempting a single item. These are the notes explaining why.",
  "batchShow.failures.onlyNotes": "None of these is a failure: they are the notes explaining how far the batch got, and what was left stays in the next cycle.",
  "batchShow.failures.truncated": "Showing {shown} of {total}.",
  "batchShow.failures.caption": "Failed items of batch {name}, with their reason",
  "batchShow.failures.caption.notes": "Notes of batch {name}",
  "batchShow.failures.column.item": "Item",
  "batchShow.failures.column.reason": "Reason",
  "batchShow.failures.column.whatHappened": "What happened",
  "batchShow.failures.wholeBatch": "The whole batch",
  "batchShow.neighbours": "Neighbouring batches",
  "batchShow.previousBatch": "Previous batch",
  "batchShow.nextBatch": "Next batch",

  "sitemaps.title": "Sitemaps for {hostname}",
  "sitemaps.description": "Which sitemaps we know about, when we read them, and what we sent Google.",
  "sitemaps.new": "New sitemap",
  "sitemaps.tab.list": "Sitemaps",
  "sitemaps.tab.sync": "Sync status",
  "sitemaps.unit": "sitemaps",
  "sitemaps.unitSingular": "sitemap",
  "sitemaps.caption": "Sitemaps for {hostname}",
  "sitemaps.caption.filtered": "Sitemaps for {hostname} matching the filter",
  "sitemaps.column.location": "Location",
  "sitemaps.column.urls": "Declared URLs",
  "sitemaps.column.lastSubmit": "Last submission result",
  "sitemaps.notReadYet": "Not read yet",
  "sitemaps.notSubmitted": "Not submitted yet",
  "sitemaps.notRecorded": "not recorded",
  "sitemaps.submit.OK": "Submitted",
  "sitemaps.submit.OK.help": "We told Google about this sitemap and it accepted the submission.",
  "sitemaps.submit.SKIPPED_UNCHANGED": "Unchanged",
  "sitemaps.submit.SKIPPED_UNCHANGED.help": "Nothing changed since the last submission, so we did not send it again. Each submission uses quota from your property.",
  "sitemaps.submit.FAILED": "Submission failed",
  "sitemaps.submit.FAILED.help": "Google turned down the submission. The reason is below.",
  "sitemaps.error.UNREACHABLE": "We could not download it",
  "sitemaps.error.MALFORMED": "It is not a valid sitemap",
  "sitemaps.error.SUBMIT_FAILED": "We could not send it to Google",
  "sitemaps.notSyncing.title": "We are not syncing this domain",
  "sitemaps.notSyncing.body": "Its access to the Search Console property is \"{state}\". In the meantime we do not sync, because syncing ends up sending the changes to Google. What you register now is kept and read as soon as access is confirmed.",
  "sitemaps.empty.title": "You have not registered any sitemap yet.",
  "sitemaps.empty.description": "A sitemap is a file on the site that lists its URLs; it is usually at https://example.com/sitemap.xml or https://example.com/sitemap_index.xml. If you register an index, we discover the files it declares on our own.",
  "sitemaps.empty.action": "Register the first one",
  "sitemaps.empty.filtered.title": "No sitemap matches the filter",
  "sitemaps.empty.filtered.description": "Try another value or clear the filters to see the domain's sitemaps.",
  "sitemaps.footnote.submit": "Submitting a sitemap tells Google it exists and what changed. It does not decide whether Google crawls it, or when.",
  "sitemaps.footnote.quota": "Reading the sitemaps is traffic to your site, not to Google: it does not use quota. Only each submission does, and only what changed since last time gets submitted.",
  "sitemaps.syncNow": "Sync now",
  "sitemaps.syncing": "Syncing…",
  "sitemaps.sync.empty.title": "No sync has run yet",
  "sitemaps.sync.empty.description": "Run a sync to read the registered sitemaps, discover their URLs, and send Google what changed.",
  "sitemaps.lastSync": "Last sync",
  "sitemaps.latestRun": "Latest run",
  "sitemaps.run.origin": "Origin",
  "sitemaps.run.batch": "Batch",
  "sitemaps.processing": "Processing",
  "sitemaps.outcome": "Outcome",
  "sitemaps.outcome.success.one": "The registered sitemap in this run was processed successfully. Nothing was left pending.",
  "sitemaps.outcome.success.other": "All {total} registered sitemaps in this run were processed successfully. Nothing was left pending.",
  "sitemaps.outcome.nothing": "The sync finished successfully. There were no registered sitemaps to process.",
  "sitemaps.outcome.running": "The sync is still running. Progress and results update automatically.",
  "sitemaps.outcome.incomplete": "The sync finished with work left unresolved. Open the batch details for the complete diagnosis.",
  "sitemaps.stat.read": "Read",
  "sitemaps.stat.submitted": "Sent to Google",
  "sitemaps.stat.unchanged": "Unchanged",
  "sitemaps.stat.newUrls": "New URLs",
  "sitemaps.quota.none": "It used no quota for the day: there was nothing new to send Google.",
  "sitemaps.quota.used.one": "It used {total} submission of the day's quota. Reading the sitemaps does not count against the quota.",
  "sitemaps.quota.used.other": "It used {total} submissions of the day's quota. Reading the sitemaps does not count against the quota.",
  "sitemaps.unprocessed": "What was left unprocessed",
  "sitemaps.register.title": "Register a sitemap",
  "sitemaps.register.description": "If you register an index, we discover the files it declares on our own.",
  "sitemaps.register.label": "Sitemap address",
  "sitemaps.register.placeholder": "https://example.com/sitemap_index.xml",
  "sitemaps.register.submit": "Register the sitemap",
  "sitemaps.register.busy": "Registering…",
  "sitemaps.registered.before": "We registered",
  "sitemaps.registered.after": ". We will read it on the next sync.",

  "settings.title": "Google connection",
  "settings.description": "The credential we use to query {module} for you.",
  "settings.seeGuide": "See the guide",
  "settings.checkConnection": "Check the connection",
  "settings.checkFailed": "We could not check the connection",
  "settings.notCheckedYet": "we have not checked it yet",
  "settings.propertyCount.one": "{total} property",
  "settings.propertyCount.other": "{total} properties",
  "settings.state.EMPTY": "Not set up",
  "settings.state.UNCHECKED": "Not checked yet",
  "settings.state.NEEDS_AUTHORIZATION": "One step missing",
  "settings.state.VERIFIED": "Verified",
  "settings.state.ERROR": "With a problem",
  "settings.properties.title": "Properties it reaches",
  "settings.properties.description": "The permission on each one decides what we can read: with anything other than owner, URL inspection does not work.",
  "settings.dangerZone.title": "Actions that cannot be undone",
  "settings.site.title": "Your site",
  "settings.site.description": "The Search Console property this tool reads.",
  "settings.site.hostname": "Site",
  "settings.site.shape": "Property shape",
  "settings.site.access": "Access",
  "settings.site.connect.title": "Connect your site",
  "settings.site.connect.description": "The key works. What is left is telling us which site to read, and how it is registered in Search Console.",
  "settings.site.connect.action": "Connect the site",
  "settings.site.connect.busy": "Connecting…",
  "settings.site.disconnect.action": "Disconnect the site",
  "settings.site.disconnect.description": "It stops being queried. Connect another one afterwards, or reconnect this one to pick up where it left off.",
  "settings.site.disconnect.busy": "Disconnecting…",
  "settings.site.disconnect.confirm.title": "Disconnect {hostname}?",
  "settings.site.disconnect.confirm.consequence": "It stops being queried from now on: no coverage cycles, no sitemap syncs, no access alerts. Nothing is deleted — its coverage, its sitemaps and its batches stay, and connecting the same site again picks all of it up.",
  "settings.replace.title": "Replace the credential",
  "settings.replace.action": "Upload another key",
  "settings.replace.description": "The key in use is disabled and every query goes through the new one. Your site and its history stay untouched.",
  "settings.replace.formDescription": "Upload the service account's .json file and type the project id it contains.",
  "settings.replace.confirm.title": "Replace the credential {email}?",
  "settings.replace.confirm.consequence": "The key in use will be disabled and every query to Google will go through the new one. Your site, its sitemaps, and all its history stay untouched. If the service account address changes, you will have to authorize the new one in Search Console.",
  "settings.replace.busy": "Replacing…",
  "settings.notConnected.title": "You have not connected your Google account yet",
  "settings.notConnected.description": "You will need two things from Google: a project id and the .json file of a service account. You do not need to know anything about Google Cloud: the tour says, step by step, which screen each one is on and what to bring back.",
  "settings.notConnected.guideMe": "Guide me step by step",
  "settings.notConnected.steps": "It is {total} steps and you can leave any time: whatever you do stays saved.",
  "settings.haveFile": "I already have the .json file",
  "settings.hideForm": "Hide the form",
  "settings.loadCredential": "Upload the credential",
  "settings.checkingKey": "Checking the key…",
  "settings.loadAndCheck": "Upload and check",
  "settings.keyFile.label": "Key file (.json)",
  "settings.keyFile.help": "Inside it has to say \"type\": \"service_account\". A Google API key does not work: it does not give access to a property's private data.",
  "settings.projectId.label": "Project id",
  "settings.projectId.placeholder": "my-project-123456",
  "settings.projectId.example": "my-project-483920",
  "settings.projectId.looksLike": "It looks like this:",
  "settings.projectId.help": ". It is lowercase letters, digits, and hyphens. It is not the name you gave the project or the number next to it.",
  "settings.history.title": "Previous credentials",
  "settings.history.hide": "Hide",
  "settings.history.show": "See the {total}",
  "errors.PROJECT_ID_MALFORMED_LOCAL": "That id is not shaped the way Google's are: 6 to 30 characters, lowercase, with digits and hyphens. Check that you did not copy the project name instead of its id.",

  "notifications.title": "Notifications",
  "notifications.description": "What happened with your site while you were not looking.",
  "notifications.marking": "Marking…",
  "notifications.markRead": "Mark as read",
  "notifications.markAllRead": "Mark all as read",
  "notifications.readAt": "Read",
  "notifications.unreadPrefix": "Unread: ",
  "notifications.filter.read": "Read state",
  "notifications.filter.all": "All",
  "notifications.filter.unread": "Unread",
  "notifications.filter.level": "Importance",
  "notifications.nothingUnread": "Nothing left unread",
  "notifications.needAction.one": "1 needs action",
  "notifications.needAction.other": "{total} need action",
  "notifications.noneNeedAction": "Nothing needs action",
  "notifications.unreadOf": "{unread} unread of {total}",
  "notifications.onlyNeedingAction": "See only the ones that need something",
  "notifications.seeAll": "See every notice",
  "notifications.caption": "{parts}, newest first.",
  "notifications.caption.all": "Notices",
  "notifications.caption.unread": "Unread notices",
  "notifications.caption.ofKind": "of kind \"{label}\"",
  "notifications.caption.ofLevel": "at level \"{label}\"",
  "notifications.empty.title": "You have no notices yet",
  "notifications.empty.description": "Here we will tell you when a batch finishes, when we stop being able to read one of your properties, and when the Google connection stops working. While there is nothing to tell you, this screen stays empty.",
  "notifications.empty.filtered.title": "No notice matches that filter",
  "notifications.empty.filtered.description": "That may be good news: nothing recorded of that kind. Clear the filter to see the rest of the notices.",
  "notifications.empty.unread.title": "You have no unread notices",
  "notifications.empty.unread.description": "You read everything there was. The ones you marked are still stored: marking them as read does not delete them, and the number in the menu only goes down when you mark them.",
  "notifications.empty.none.title": "There are no notices to show",
  "notifications.empty.none.description": "Reload the screen to see whether one showed up.",

  "notification.BATCH_FAILED.title": "A batch for {hostname} failed",
  "notification.BATCH_FAILED.body": "No URL was processed. The reason for each attempt is on the batch's page.",
  "notification.BATCH_FAILED.action": "See the batch",
  "notification.BATCH_PARTIAL.title": "A batch for {hostname} finished with items pending",
  "notification.BATCH_PARTIAL.body": "{processed} of {total} were processed. {pending} were left unprocessed: they stay in the queue for the next cycle.",
  "notification.BATCH_PARTIAL.action": "See the batch",
  "notification.BATCH_COMPLETED.title": "A batch for {hostname} finished",
  "notification.BATCH_COMPLETED.body": "{processed} of {total} were processed.",
  "notification.BATCH_COMPLETED.action": "See the batch",
  "notification.ACCESS_LOST.title": "We lost access to {hostname}",
  "notification.ACCESS_LOST.body": "We cannot read its Search Console property, so monitoring is on hold. The history is kept.",
  "notification.ACCESS_LOST.action": "Review the domain",
  "notification.CREDENTIAL_INVALID.title": "The Google connection stopped working",
  "notification.CREDENTIAL_INVALID.body": "In the meantime we cannot ask Google anything. Your site and its history are not touched.",
  "notification.CREDENTIAL_INVALID.action": "Review the connection",
  "notification.FETCH_ERRORS.title": "Google could not fetch {count} URLs from {hostname}",
  "notification.FETCH_ERRORS.body": "On the last pass those addresses answered with an error. It is usually something on the site's server; the state Google reported is on each row.",
  "notification.FETCH_ERRORS.action": "See those URLs",
  "notification.CRAWL_BLOCKED.title": "{count} URLs from {hostname} became blocked by robots.txt",
  "notification.CRAWL_BLOCKED.body": "The site's robots.txt file stops Google from visiting them. If the block is deliberate, there is nothing to do.",
  "notification.CRAWL_BLOCKED.action": "See those URLs",
  "notification.EXPORT_READY.title": "The export for {hostname} is ready",
  "notification.EXPORT_READY.body": "It is {rows} rows. You can download it from the batch's page.",
  "notification.EXPORT_READY.action": "See the export",
  "notification.COVERAGE_DROP.title.one": "{count} URL from {hostname} stopped being indexed",
  "notification.COVERAGE_DROP.title.other": "{count} URLs from {hostname} stopped being indexed",
  "notification.COVERAGE_DROP.body.one": "Google reported another state for that address on the last pass. The batch lists which one it was.",
  "notification.COVERAGE_DROP.body.other": "Google reported another state for those addresses on the last pass. The batch lists which ones they were.",
  "notification.COVERAGE_DROP.action": "See which URLs",

  "time.today": "Today",
  "time.yesterday": "Yesterday",

  "batches.title": "Batches for {hostname}",
  "batches.description": "What work we ran on this property and, above all, what was left undone.",
  "batches.seeDomain": "See the domain",
  "batches.seeCoverage": "See the coverage",
  "batches.unit": "batches",
  "batches.unitSingular": "batch",
  "batches.batchWord": "batch",
  "batches.caption": "Batches for {hostname}, newest first",
  "batches.caption.filtered": "Batches for {hostname} matching the filter",
  "batches.column.kind": "Kind and origin",
  "batches.column.state": "State",
  "batches.column.progress": "Progress",
  "batches.column.failed": "Failed",
  "batches.column.quota": "Quota used",
  "batches.column.started": "Start",
  "batches.column.finished": "End",
  "batches.column.duration": "Duration",
  "batches.queuedSince": "Queued since",
  "batches.waitingForYou": "Waiting for you since",
  "batches.stillRunning": "Still running",
  "batches.empty.title": "No batch has run yet.",
  "batches.empty.description": "The automatic cycle runs once a day per domain: it syncs the sitemaps and checks the state of the URLs as far as the quota allows. You can also trigger an inspection now.",
  "batches.empty.filtered.title": "No batch matches the filter",
  "batches.empty.filtered.description": "Try another value or clear the filters to see the whole history.",
  "batches.clearFilters": "Clear the filters",
  "batches.filters": "Batch list filters",
  "batches.search.label": "Search by batch ID",
  "batches.search.placeholder": "Search by batch ID…",
  "batches.filter.any": "Any",
  "batches.filter.kind": "Kind",
  "batches.filter.origin": "Origin",
  "batches.registerSitemap": "Register a sitemap",
  "batches.inspectNow": "Inspect now",
  "batches.queueing": "Queueing…",
  "batches.announcement": "{kind} {name}: {state}. {reason}",
  "batches.footnote.inspect": "Inspecting a URL is asking Google what it knows about it. It does not ask Google to crawl it or index it, and it does not change anything on your site.",
  "batches.footnote.quota": "The quota used is the daily quota of your Search Console property, not a resource of ours. A batch that ran out of quota did not fail: what it left pending goes into the next cycle.",

  "apiKeys.title": "API keys",
  "apiKeys.description": "With a key, your deploy pipeline tells the platform the site changed, without coming in here.",
  "apiKeys.create": "Create a key",
  "apiKeys.column.name": "Name",
  "apiKeys.column.prefix": "Prefix",
  "apiKeys.column.created": "Created",
  "apiKeys.column.lastUse": "Last use",
  "apiKeys.column.revoked": "Revoked",
  "apiKeys.neverUsed": "Never used",
  "apiKeys.revoke": "Revoke",
  "apiKeys.revoked": "Revoked",
  "apiKeys.active.title": "Active keys",
  "apiKeys.active.unit": "active keys",
  "apiKeys.active.unitSingular": "active key",
  "apiKeys.active.caption": "Your account's active API keys",
  "apiKeys.revokedNotice.before": "We revoked",
  "apiKeys.revokedNotice.after": ". It stays listed below with its date.",
  "apiKeys.empty.title": "You have not created any key yet.",
  "apiKeys.empty.description": "Keys let your deploy pipeline tell the platform the site changed, without coming in here.",
  "apiKeys.empty.action": "Create the first key",
  "apiKeys.revoked.title": "Revoked keys",
  "apiKeys.revoked.description": "We keep them listed so you can review which key was active, until when, and when it was last used. A revoked key cannot be reactivated.",
  "apiKeys.revoked.unit": "revoked keys",
  "apiKeys.revoked.unitSingular": "revoked key",
  "apiKeys.revoked.caption": "Your account's revoked API keys",
  "apiKeys.reveal.title": "This is your key",
  "apiKeys.reveal.description": "Save it now: for safety we will not be able to show it to you again. If you lose it, create a new one and revoke this one.",
  "apiKeys.reveal.valueLabel": "the key",
  "apiKeys.reveal.footnote.before": "It stays listed as",
  "apiKeys.reveal.footnote.middle": ", with its prefix",
  "apiKeys.revokeConfirm.title": "Revoke \"{name}\"",
  "apiKeys.revokeConfirm.consequence": "Any pipeline using this key will start getting an authentication error.",
  "apiKeys.revokeConfirm.confirm": "Revoke the key",
  "apiKeys.revokeConfirm.busy": "Revoking…",
  "apiKeys.form.title": "Create a key",
  "apiKeys.form.description": "The full value is shown once, right when it is created. After that, only its prefix is left.",
  "apiKeys.form.submit": "Create the key",
  "apiKeys.form.pending": "Creating…",
  "apiKeys.form.retry": "Try again",
  "apiKeys.form.nameRequired": "Type a name so you can recognize the key later.",
  "apiKeys.form.placeholder": "deploy-production…",
  "apiKeys.form.help": "So you can recognize it later. For example:",
  "apiKeys.form.helpExample": "deploy-production",
  "apiKeys.usage.title": "How your pipeline uses it",
  "apiKeys.usage.header": "The key travels in the",
  "apiKeys.usage.format": "header, with the format",
  "apiKeys.usage.yourKey": "your-key",
  "apiKeys.usage.seeExample": "See the example",
  "apiKeys.usage.copyExample": "Copy the example",
  "apiKeys.usage.caveat": "Telling us the site changed makes us read your sitemaps and send Google the ones that changed. It does not decide whether Google crawls them, or when.",
  "apiKeys.usage.docs": "See the API documentation",
  "serverError.NETWORK_ERROR.title": "We could not reach the server",
  "serverError.NETWORK_ERROR.explanation": "Check the connection and try again.",

  "domains.title": "Domains",
  "domains.description": "Monitored sites and the state of our access to their Search Console property.",
  "domains.unit": "domains",
  "domains.unitSingular": "domain",
  "domains.caption.filtered": "Domains in the \"{state}\" state",
  "domains.column.domain": "Domain",
  "domains.column.access": "Access",
  "domains.column.checked": "Last check",
  "domains.column.coverage": "Coverage (with data / total)",
  "domains.column.notifications": "Notifications",
  "domains.notChecked": "Not checked",
  "domains.notifications.on": "On",
  "domains.notifications.off": "Off",
  "domains.reviewConnection": "Review the connection",
  "domains.needsConnection.title": "Before adding a domain you need the connection verified",
  "domains.needsConnection.body": "Without a verified credential we cannot ask Google anything, so \"Add domain\" goes to settings first. The domains you already have stay listed with the last thing we could read.",
  "domains.empty.title": "You have not added any domain yet.",
  "domains.empty.description": "When you add one, you will have to authorize our service account on its Search Console property so we can query it.",
  "domains.empty.filtered.title": "No domain is in that state",
  "domains.empty.filtered.description": "That may be good news: nothing pending in that state. Clear the filter to see every domain on the account.",
  "domains.empty.filtered.action": "See every domain",
  "domains.goToSettings": "Go to settings",
  "domains.add": "Add domain",
  "domains.added.title": "We added",
  "domains.added.body": "Our service account still has to be authorized on its Search Console property. Until then we do not ask Google anything about it.",
  "domains.added.action": "See how to authorize it",
  "domains.filter.label": "Access state",
  "domains.checkAccess": "Check access",
  "domains.ofDomain": " for {hostname}",
  "domains.coverageFootnote": "Coverage counts only the URLs Google already told us something about. The ones we have not checked stay out of the split: not knowing whether they are indexed is not the same as knowing they are not.",
  "domains.coverage.noUrls": "We have not discovered any URLs yet.",
  "domains.coverage.seeSitemaps": "See its sitemaps",
  "domains.coverage.noData": "No data yet",
  "domains.coverage.discovered": "{unit} discovered",
  "domains.coverage.lastCycle": "last cycle",
  "domains.coverage.withData": "{known} of {total} {unit} with data",
  "domains.coverage.indexed": "indexed",
  "domains.coverage.notIndexed": "not indexed",

  "domainCreate.title": "Add a domain",
  "domainCreate.description": "The site has to be registered as a property in Search Console. Here you choose which shape you registered it with over there.",
  "domainCreate.domain.title": "The domain",
  "domainCreate.domain.label": "Domain",
  "domainCreate.domain.placeholder": "example.com",
  "domainCreate.willSaveAs": "We will save it as",
  "domainCreate.seeExisting": "See the one you already have",
  "domainCreate.shape.title": "The shape of the property",
  "domainCreate.shape.description": "They are not interchangeable. If you pick the wrong one, Google will answer that the property does not exist.",
  "domainCreate.shape.legend": "Shape of the property",
  "domainCreate.willQuery": "We are going to query this property:",
  "domainCreate.next.title": "After this, one step is left in Search Console",
  "domainCreate.next.body": "The domain is born without confirmed access. So we can read it, add this address as *owner* of the property in Search Console.",
  "domainCreate.submit": "Add the domain",
  "domainCreate.submitting": "Adding…",
  "propertyShape.DOMAIN.title": "Domain property",
  "propertyShape.DOMAIN.when": "If you added it in Search Console without \"https://\" in front. It covers every subdomain and both schemes.",
  "propertyShape.URL_PREFIX.title": "URL prefix",
  "propertyShape.URL_PREFIX.when": "If you added it with \"https://\" in front. It distinguishes the scheme, the subdomain, and the trailing slash.",

  "credentialError.fixProjectId": "Fix the id",
  "credentialError.recheck": "Check again",
  "credentialError.checking": "Checking…",
  "credentialError.INVALID_KEY.title": "The key no longer works",
  "credentialError.INVALID_KEY.explanation": "Google rejected this key: it may have been deleted or revoked from Google Cloud.",
  "credentialError.INVALID_KEY.link": "See the service account's keys",
  "credentialError.INVALID_KEY.uploadKey": "Upload a new key",
  "credentialError.INVALID_KEY.note": "Your site and its history are not touched.",
  "credentialError.API_NOT_ENABLED.title": "The Search Console API has to be enabled",
  "credentialError.API_NOT_ENABLED.explanation": "The key works, but the Search Console API is off in your project.",
  "credentialError.API_NOT_ENABLED.explanation.named": "The key works, but the Search Console API is off in project {projectId}.",
  "credentialError.API_NOT_ENABLED.link": "Open the screen to enable it",
  "credentialError.API_NOT_ENABLED.note": "After enabling it, it can take a few minutes to become active.",
  "credentialError.PROJECT_MISMATCH.title": "The project and the key do not match",
  "credentialError.PROJECT_MISMATCH.explanation": "The project you declared and the one in the key file are not the same.",
  "credentialError.PROJECT_MISMATCH.explanation.named": "You declared project {projectId}, but the key file belongs to another one.",
  "credentialError.PROJECT_MISMATCH.uploadKey": "Upload the key of the right project",
  "credentialError.NO_PROPERTIES.title": "The service account has to be authorized",
  "credentialError.NO_PROPERTIES.explanation": "The key works. It is not listed as owner of any Search Console property yet, so there is nothing we can read.",
  "credentialError.NO_PROPERTIES.link": "Open Search Console",
  "credentialError.NO_PROPERTIES.note": "Add it under Settings → Users and permissions, with owner permission. With anything lower, URL inspection does not work and Google does not say why.",
  "credentialError.PROVIDER_UNAVAILABLE.title": "We could not reach Google",
  "credentialError.PROVIDER_UNAVAILABLE.explanation": "Google did not answer in time. It is not a problem with your credential or your setup.",
  "credentialError.PROVIDER_UNAVAILABLE.note": "Your credential keeps the state it had. Check again in a few minutes.",
  "credentialError.UNMAPPED.title": "We could not check the connection",

  "secret.copy": "Copy {what}",
  "secret.leaving": "Close without copying? You will not be able to see it again.",
  "secret.back": "Go back",
  "secret.closeAnyway": "Close anyway",
  "secret.saved": "I saved it",
  "secret.notCopiedYet": "You have not copied it yet",

  "keyFile.bytes": "{value} bytes",
  "keyFile.kilobytes": "{value} KB",
  "keyFile.drop": "Or drag the file here.",
  "keyFile.chosen": "Chosen:",
  "keyFile.example": "This is what the file looks like inside. The highlighted fields are the ones you have to recognize to know you downloaded the right one.",
  "keyFile.secret": "The contents of *private_key* are the only secret in the file. We store it encrypted and it is not shown on any screen, neither whole nor in parts.",

  "step.PASSED": "Done",
  "step.MISSING": "Pending",
  "step.BLOCKED": "An earlier step is missing",
  "step.UNCONFIRMED": "Unconfirmed",

  "connection.title": "Connection",
  "connection.description.verified": "What lets you recognize this key without being able to see it. It is for identifying it, not for deciding anything.",
  "connection.description.broken": "The fingerprint and the address are what you compare against what you see in Google while the connection is not working.",
  "connection.field.clientEmail": "Service account address",
  "connection.field.project": "Project",
  "connection.field.fingerprint": "Fingerprint",
  "connection.field.fingerprint.spelled": "Fingerprint {value}",
  "connection.field.fingerprint.hint": "It lets you recognize the key without seeing it.",
  "connection.field.keyId": "Key id",
  "connection.field.uploaded": "Uploaded",
  "connection.field.usedIn": "Used in",
  "connection.neverShown": "The contents of the key are not shown on any screen, neither whole nor in parts.",

  "coverageSummary.label": "Coverage summary",
  "coverageSummary.noUrls": "We have not discovered a single URL yet.",
  "coverageSummary.noUrls.note": "URLs are discovered by reading the domain's sitemaps.",
  "coverageSummary.urls.one": "URL",
  "coverageSummary.urls.other": "URLs",
  "coverageSummary.headline.none.one": "We discovered {total} URL. We have not checked it yet.",
  "coverageSummary.headline.none.other": "We discovered {total} URLs. We have not checked a single one yet.",
  "coverageSummary.headline.all.one": "The single URL has data from Google.",
  "coverageSummary.headline.all.other": "All {total} URLs have data from Google.",
  "coverageSummary.headline.partial": "{withData} of {total} URLs have data from Google. The other {notQueried} have not been checked yet.",
  "coverageSummary.missingDate": "No fetch date. There are stored states without the date Google reported them.",
  "coverageSummary.window.from": "The data runs from",
  "coverageSummary.window.to": "to",
  "coverageSummary.window.last": "Last data fetched:",
  "coverageSummary.estimate.one": "At the current quota, going through the single URL takes about a day.",
  "coverageSummary.estimate.other": "At the current quota, going through the {total} URLs takes about {days} days.",
  "coverageSummary.estimate.withQuota.one": "At the current quota of {quota} queries a day, going through the single URL takes about a day.",
  "coverageSummary.estimate.withQuota.other": "At the current quota of {quota} queries a day, going through the {total} URLs takes about {days} days.",
  "coverageSummary.estimate.caveat": "That is how often we can check each URL again, not when Google is going to crawl them.",
  "coverageSummary.withData.title": "With data from Google",
  "coverageSummary.withData.none": "No URL has data from Google yet, so there is no indexing share to report.",
  "coverageSummary.withoutData.none": "Every known URL has data from Google.",
  "coverageSummary.indexedShare": "*{percentage} %* of the {total} URLs with data are indexed.",
  "coverageSummary.legend.indexed": "Indexed {total}",
  "coverageSummary.legend.notIndexed": "Not indexed {total}",
  "coverageSummary.table.caption": "Split by state of the {withData} URLs with data from Google. It does not include the {notQueried} not checked.",
  "coverageSummary.table.state": "State",
  "coverageSummary.table.urls": "URLs",
  "coverageSummary.table.share": "% of {total}",

  "activity.title": "Queries to Google and state changes, by day",
  "activity.howToRead": "A query is a question to Google about a URL. It going up does not mean indexing is going up. A state change is a URL that answered something different from what we already knew: both series count what happened, they are not estimates.",
  "activity.summary": "Over the last {days} days: {queries} queries to Google and {changes} state changes recorded.",
  "activity.series.queries": "URLs queried",
  "activity.series.changes": "State changes",
  "activity.rangeLabel": "Day range of the chart",
  "activity.range.short": "{days} days",
  "activity.range.long": "Last {days} days",
  "activity.empty": "No activity recorded in this period. We did not query a single URL and no state change was recorded over the last {days} days.",
  "activity.seeTable": "See the day-by-day data",
  "activity.caption": "Queries to Google and state changes recorded, by day, over the last {days} days.",
  "activity.column.day": "Day",

  "dashboard.title": "Home",
  "dashboard.description": "How much we know about your site today.",
  "dashboard.description.empty": "What needs your attention and how much we know about your site today.",
  "dashboard.empty.title": "No site connected yet.",
  "dashboard.empty.description": "Your site is a property you own in Search Console. Its sitemaps, its URLs and everything this dashboard can count come from there.",
  "dashboard.empty.addFirst": "Add your first domain",
  "dashboard.empty.resumeTour": "Resume the guided tour",
  "dashboard.noUrls.title": "We have not discovered any URLs yet",
  "dashboard.noUrls.description": "URLs are discovered by reading each domain's sitemaps. Register one and everything this dashboard counts comes from there.",
  "dashboard.noUrls.registerSitemap": "Register the sitemap",
  "dashboard.noUrls.pickDomain": "Pick a domain",
  "dashboard.attention.lastCheck": "Last check:",
  "dashboard.attention.on": "on",
  "dashboard.attention.batchFailed": "Nothing was processed; the reason for each attempt is on the batch's page.",
  "dashboard.attention.failedAt": "Failed",
  "dashboard.attention.seeBatch": "See the batch",
  "dashboard.attention.domains.one": "1 domain",
  "dashboard.attention.domains.other": "{total} domains",
  "dashboard.attention.batches.one": "1 batch that failed",
  "dashboard.attention.batches.other": "{total} batches that failed",
  "dashboard.attention.and": " and ",
  "dashboard.attention.allGood": "All good",
  "dashboard.attention.headline.one": "{items} needs your attention",
  "dashboard.attention.headline.other": "{items} need your attention",
  "dashboard.attention.awaiting": "We still have to be authorized in Search Console, so we are not querying anything about this domain yet.",
  "dashboard.attention.lost": "We stopped being able to read the property: monitoring is on hold and the history is kept.",
  "dashboard.attention.state": "Access state: {label}.",
  "dashboard.panel.attention": "What needs your attention",
  "dashboard.panel.coverage": "Account coverage",
  "dashboard.panel.quota": "Today's quota",
  "dashboard.panel.activity": "Account activity",
  "dashboard.panel.sitemaps": "Account sitemaps",
  "dashboard.panel.byState": "By state",
  "dashboard.panel.byDomain": "By domain",
  "dashboard.panel.coverage.description": "The state Google reported for the {withData} URLs we checked.",
  "dashboard.panel.coverage.description.partial": "The state Google reported for the {withData} URLs we checked. The {withoutData} not checked stay out of the split: Google said nothing about those.",
  "dashboard.panel.coverage.noneQueried": "We have not checked a single URL yet, so there is no split by state to report.",
  "dashboard.panel.coverage.notQueried.one": "{total} URL not checked yet. It does not count in any share: it does not mean it is not indexed.",
  "dashboard.panel.coverage.notQueried.other": "{total} URLs not checked yet. They do not count in any share: it does not mean they are not indexed.",
  "dashboard.panel.coverage.domain": "{indexed} indexed of {total} · {withData} checked",
  "dashboard.panel.coverage.lastQuery": "Last query:",
  "dashboard.panel.coverage.frozen.one": "{total} domain is not operational: its URLs are still counted here with the last thing we knew, and that part does not update.",
  "dashboard.panel.coverage.frozen.other": "{total} domains are not operational: their URLs are still counted here with the last thing we knew, and that part does not update.",
  "dashboard.panel.quota.description": "The quota belongs to each Search Console property, not to a shared balance. The automatic cycle cannot touch the manual reserve.",
  "dashboard.panel.quota.empty.title": "No quota has opened for today yet",
  "dashboard.panel.quota.empty.description": "A domain's quota opens when its first batch of the day runs. Until then nothing is spent and nothing is reserved.",
  "dashboard.panel.activity.description": "What was done each day and what ran last. Both series in the chart count what happened, they are not estimates.",
  "dashboard.panel.activity.lastBatches": "The account's latest batches",
  "dashboard.panel.activity.noBatches": "No batch has run yet. Batches are the rounds of work against Google: syncing a domain's sitemaps and checking the state of its URLs.",
  "dashboard.panel.activity.finished": "finished",
  "dashboard.panel.activity.started": "started",
  "dashboard.panel.activity.queuedSince": "queued since",
  "dashboard.panel.activity.rowActions": "Actions for batch {name} on {hostname}",
  "dashboard.panel.activity.seeAllBatches": "See every batch for {hostname}",
  "dashboard.panel.sitemaps.description.one": "{total} registered sitemap, with the date we last read it.",
  "dashboard.panel.sitemaps.description.other": "{total} registered sitemaps, with the date we last read each one.",
  "dashboard.panel.sitemaps.count.one": "1 sitemap",
  "dashboard.panel.sitemaps.count.other": "{total} sitemaps",
  "dashboard.panel.sitemaps.none": "No sitemap",
  "dashboard.panel.sitemaps.noneDescription": "Without a registered sitemap we do not discover any URL for this domain.",
  "dashboard.panel.sitemaps.lastRead": "Last read:",
  "time.never": "never",

  "dashboard.group.sites": "Your site",
  "dashboard.group.known": "What we know",
  "dashboard.group.today": "Today",
  "dashboard.onHold.help": "The account credential cannot ask Google anything right now.",
  "dashboard.site.label": "Site status",
  "dashboard.site.notConnected": "Not connected yet. Connect it and this dashboard starts having something to count.",
  "dashboard.domains.needAction.one": "1 needs action",
  "dashboard.domains.needAction.other": "{total} need action",
  "dashboard.domains.allWithAccess": "All with access",
  "dashboard.domains.action": "See the site",
  "dashboard.domains.connect": "Connect your site",
  "dashboard.sitemaps.label": "Registered sitemaps",
  "dashboard.sitemaps.without.one": "1 domain without a sitemap",
  "dashboard.sitemaps.without.other": "{total} domains without a sitemap",
  "dashboard.sitemaps.allWith": "All with a sitemap",
  "dashboard.sitemaps.note": "The URLs this dashboard counts come from the sitemaps.",
  "dashboard.sitemaps.action": "See the sitemaps",
  "dashboard.coverage.label": "Indexed URLs",
  "dashboard.coverage.value": "{indexed} of {total}",
  "dashboard.coverage.unknown": "{total} not checked",
  "dashboard.coverage.unknownHelp": "We have not asked Google about these URLs. It does not mean they are not indexed.",
  "dashboard.coverage.action": "See the coverage split",
  "dashboard.coverage.note.none": "We have not checked a single one yet, so we do not know how many are indexed.",
  "dashboard.coverage.note.allIndexed.one": "The only one Google reported came back indexed.",
  "dashboard.coverage.note.allIndexed.other": "The {total} Google reported came back indexed.",
  "dashboard.coverage.note.notIndexed.one": "1 has a report from Google and did not come back indexed.",
  "dashboard.coverage.note.notIndexed.other": "{total} have a report from Google and did not come back indexed.",
  "dashboard.quota.label": "Queries to Google today",
  "dashboard.quota.value": "{used} of {limit}",
  "dashboard.quota.remaining": "{total} left",
  "dashboard.quota.action": "See both pockets",
  "dashboard.quota.note": "{automatic} from the automatic cycle · {manual} by hand. Quota for {day}.",
  "dashboard.quota.note.pending": "The quota for {day} opens when the day's first batch runs.",
  "dashboard.batches.label": "Batches today",
  "dashboard.batches.action": "See the activity",
  "dashboard.cycle.none": "No inspection cycle has run yet.",
  "dashboard.cycle.note": "Last cycle: {processed} of {total} URLs on {hostname}.",

  "work.since": "since",
  "work.several": "{count} jobs running",

  "batch.kind.SITEMAP_SYNC": "Sitemap sync",
  "batch.kind.URL_INSPECTION": "URL inspection",
  "batch.kind.COVERAGE_EXPORT": "Coverage export",
  "batch.origin.SCHEDULED": "Scheduled",
  "batch.origin.MANUAL": "Manual",
  "batch.origin.API": "From the API",
  "batch.unit.SITEMAP_SYNC": "sitemaps",
  "batch.unit.URL_INSPECTION": "URLs",
  "batch.unit.COVERAGE_EXPORT": "rows",

  "batch.reason.queued": "It has not started yet.",
  "batch.reason.running": "{processed} of {total} {unit} processed so far.",
  "batch.reason.nothingToDo": "There was nothing to process.",
  "batch.reason.completed.SITEMAP_SYNC.one": "The batch's single sitemap was processed.",
  "batch.reason.completed.SITEMAP_SYNC.other": "The batch's {total} sitemaps were processed.",
  "batch.reason.completed.URL_INSPECTION.one": "The batch's single URL was processed.",
  "batch.reason.completed.URL_INSPECTION.other": "The batch's {total} URLs were processed.",
  "batch.reason.completed.COVERAGE_EXPORT.one": "The batch's single row was processed.",
  "batch.reason.completed.COVERAGE_EXPORT.other": "The batch's {total} rows were processed.",
  "batch.reason.pending.SITEMAP_SYNC.one": "{pending} sitemap was left unprocessed; it stays in the queue for the next cycle.",
  "batch.reason.pending.SITEMAP_SYNC.other": "{pending} sitemaps were left unprocessed; they stay in the queue for the next cycle.",
  "batch.reason.pending.URL_INSPECTION.one": "{pending} URL was left uninspected; it stays in the queue for the next cycle.",
  "batch.reason.pending.URL_INSPECTION.other": "{pending} URLs were left uninspected; they stay in the queue for the next cycle.",
  "batch.reason.pending.COVERAGE_EXPORT.one": "{pending} row was left unwritten; it stays in the queue for the next cycle.",
  "batch.reason.pending.COVERAGE_EXPORT.other": "{pending} rows were left unwritten; they stay in the queue for the next cycle.",
  "batch.reason.nothing.SITEMAP_SYNC": "Not a single sitemap was processed.",
  "batch.reason.nothing.URL_INSPECTION": "Not a single URL was processed.",
  "batch.reason.nothing.COVERAGE_EXPORT": "Not a single row was written.",
  "batch.reason.partial.quota": "This domain's daily quota ran out.",
  "batch.reason.partial.providerLimit": "Google answered that its query limit was reached.",
  "batch.reason.partial.providerDenied": "Google stopped giving us access to the property and we stopped there.",
  "batch.reason.partial.itemErrors": "{failed} of {total} {unit} failed.",
  "batch.reason.partial.generic": "It was interrupted before finishing.",
  "batch.reason.failed.quota": "There was no daily quota left for this domain; the whole batch stays in the queue for the next cycle.",
  "batch.reason.failed.providerLimit": "Google answered that its query limit was reached.",
  "batch.reason.failed.providerDenied": "Google did not give us access to the property.",
  "batch.reason.failed.allAttempts": "Every attempt failed; the reason for each one is in the batch's page.",
  "batch.reason.failed.beforeStarting": "It stopped before starting; the reason is in the batch's page.",
  "batch.action.checkAccess": "Check the access",
  "batch.action.seeFailed": "See the items that failed",
  "batch.action.seeDetail": "See the batch's detail",
  "batch.duration.seconds": "{value} s",
  "batch.duration.minutes": "{value} min",
  "batch.duration.minutesSeconds": "{value} min {rest} s",
  "batch.duration.hours": "{value} h",
  "batch.duration.hoursMinutes": "{value} h {rest} min",

  "batch.QUEUED.label": "Queued",
  "batch.QUEUED.help": "It has not started yet.",
  "batch.RUNNING.label": "Running",
  "batch.RUNNING.help": "It is running right now.",
  "batch.COMPLETED.label": "Completed",
  "batch.COMPLETED.help": "Every item in the batch was processed.",
  "batch.PARTIAL.label": "Partial",
  "batch.PARTIAL.help": "It was interrupted before finishing. What was left unprocessed stays in the queue for the next cycle.",
  "batch.FAILED.label": "Failed",
  "batch.FAILED.help": "No URL was processed.",

  "coverage.UNKNOWN.label": "Not checked yet",
  "coverage.UNKNOWN.help": "We have not asked Google about this URL yet.",
  "coverage.INDEXED.label": "Indexed",
  "coverage.INDEXED.help": "Google reported that it is in its index.",
  "coverage.CRAWLED_NOT_INDEXED.label": "Crawled, not indexed",
  "coverage.CRAWLED_NOT_INDEXED.help": "Google visited it and decided not to include it.",
  "coverage.DISCOVERED_NOT_INDEXED.label": "Discovered, not crawled",
  "coverage.DISCOVERED_NOT_INDEXED.help": "Google knows it exists but has not visited it yet.",
  "coverage.DUPLICATE_CANONICAL.label": "Duplicate with another canonical",
  "coverage.DUPLICATE_CANONICAL.help": "Google chose another URL as the main version.",
  "coverage.EXCLUDED_NOINDEX.label": "Excluded by noindex",
  "coverage.EXCLUDED_NOINDEX.help": "The page explicitly asks not to be indexed.",
  "coverage.BLOCKED_ROBOTS.label": "Blocked by robots.txt",
  "coverage.BLOCKED_ROBOTS.help": "The robots.txt file stops Google from visiting it.",
  "coverage.FETCH_ERROR.label": "Could not be fetched",
  "coverage.FETCH_ERROR.help": "Google could not get the page.",
  "coverage.REDIRECT.label": "Redirects to another URL",
  "coverage.REDIRECT.help": "Google followed a redirect from this address.",
  "coverage.OTHER_NOT_INDEXED.label": "Not indexed, another reason",
  "coverage.OTHER_NOT_INDEXED.help": "Google reported a reason we do not recognize. The original text is in the reason column.",
  "coverage.missingFetchedAt": "No fetch date",

  "notices.CREDENTIAL_MISSING.title": "Google is not connected yet",
  "notices.CREDENTIAL_MISSING.message": "There is no Search Console credential yet. Without one we cannot check the coverage of any domain.",
  "notices.CREDENTIAL_MISSING.action": "Connect Google",
  "notices.CREDENTIAL_UNVERIFIED.title": "The credential has not been checked",
  "notices.CREDENTIAL_UNVERIFIED.message": "You uploaded the credential but we have not checked it against Google yet. Until we do, no domain can count as operational.",
  "notices.CREDENTIAL_UNVERIFIED.action": "Check it again",
  "notices.CREDENTIAL_REVOKED.title": "The key was revoked",
  "notices.CREDENTIAL_REVOKED.message": "Your service account key was revoked from Google Cloud. Upload a new one to resume monitoring; the history is kept.",
  "notices.CREDENTIAL_REVOKED.action": "Upload a new key",
  "notices.CREDENTIAL_INVALID.title": "The key stopped working",
  "notices.CREDENTIAL_INVALID.message": "Your service account key stopped working. In the meantime we cannot check your site; the history is kept.",
  "notices.CREDENTIAL_INVALID.action": "Review the connection",
  "notices.CREDENTIAL_INVALID_DETAIL.title": "The key stopped working",
  "notices.CREDENTIAL_INVALID_DETAIL.message": "{detail}",
  "notices.CREDENTIAL_INVALID_DETAIL.action": "Review the connection",
  "notices.DOMAINS_ACCESS_LOST.title.one": "1 property without access",
  "notices.DOMAINS_ACCESS_LOST.title.other": "{count} properties without access",
  "notices.DOMAINS_ACCESS_LOST.message.one": "We stopped being able to read one of your properties. Monitoring for that domain is on hold; the history is kept.",
  "notices.DOMAINS_ACCESS_LOST.message.other": "We stopped being able to read {count} of your properties. Monitoring for those domains is on hold; the history is kept.",
  "notices.DOMAINS_ACCESS_LOST.action.one": "See the domain",
  "notices.DOMAINS_ACCESS_LOST.action.other": "See the domains",
  "notices.DOMAINS_AWAITING_ACCESS.title.one": "1 domain not authorized yet",
  "notices.DOMAINS_AWAITING_ACCESS.title.other": "{count} domains not authorized yet",
  "notices.DOMAINS_AWAITING_ACCESS.message.one": "We still cannot read that property in Search Console. Until the service account has access we will not bring any data from it.",
  "notices.DOMAINS_AWAITING_ACCESS.message.other": "We still cannot read those properties in Search Console. Until the service account has access we will not bring any data from them.",
  "notices.DOMAINS_AWAITING_ACCESS.action.one": "See that domain",
  "notices.DOMAINS_AWAITING_ACCESS.action.other": "See those domains",
  "notices.BATCHES_FAILED.title.one": "A batch failed since yesterday",
  "notices.BATCHES_FAILED.title.other": "{count} batches failed since yesterday",
  "notices.BATCHES_FAILED.message.one": "It finished without completing the work. What was left unprocessed is not lost: it goes into the next cycle.",
  "notices.BATCHES_FAILED.message.other": "They finished without completing the work. What was left unprocessed is not lost: it goes into the next cycle.",
  "notices.BATCHES_FAILED.action.one": "See the batches",
  "notices.BATCHES_FAILED.action.other": "See your domains",

  "errors.UNKNOWN": "Something went wrong and we could not explain it any better. Try again, and if it keeps happening, get in touch.",

  "errors.EMAIL_REQUIRED": "Type your email address.",
  "errors.EMAIL_INVALID": "That does not look like an email address.",
  "errors.EMAIL_TAKEN": "Another account already uses that address.",
  "errors.PASSWORD_REQUIRED": "Type your password.",
  "errors.PASSWORD_WRONG": "That is not your current password.",
  "errors.PASSWORD_MISMATCH": "The two passwords do not match.",
  "errors.PASSWORD_INVALID": "That password cannot be used.",
  "errors.PASSWORD_TOO_SHORT": "The password is too short: it needs at least {min_length} characters.",
  "errors.PASSWORD_TOO_SIMILAR": "The password is too similar to your {verbose_name}.",
  "errors.PASSWORD_TOO_COMMON": "That password is among the most used ones, so it is one of the first anybody tries.",
  "errors.PASSWORD_ENTIRELY_NUMERIC": "The password cannot be only numbers.",
  "errors.CREDENTIALS_INVALID": "The email or the password do not match.",
  "errors.ACCOUNT_DISABLED": "This account is disabled.",
  "errors.PREFERENCES_INVALID": "Those preferences do not exist. Reload the page and pick again.",

  "errors.UNAUTHENTICATED": "The API key is missing, invalid, or was revoked.",
  "errors.PERMISSION_DENIED": "This account cannot do that.",
  "errors.NOT_FOUND": "That does not exist, or it does not belong to this account.",
  "errors.VALIDATION_FAILED": "What was sent is not valid.",
  "errors.CONFLICT": "That cannot be done right now, given how things stand.",
  "errors.QUOTA_EXHAUSTED": "The daily quota for this property ran out.",
  "errors.CREDENTIAL_NOT_READY": "There is no verified Search Console credential on this account.",
  "errors.DOMAIN_NOT_OPERATIONAL": "The domain does not have confirmed access to its property.",
  "errors.PROVIDER_UNAVAILABLE": "Google did not answer. Try again in a few minutes.",
  "errors.RATE_LIMITED": "Too many requests in a row. Wait a moment and try again.",
  "errors.INTERNAL_ERROR": "Something broke on our side. It was logged and we are looking at it.",

  "errors.KEY_FILE_REQUIRED": "Choose the .json file you downloaded from Google.",
  "errors.KEY_FILE_TOO_BIG": "That file weighs {size} KB and a service account key weighs about 2 KB. You may have uploaded something else.",
  "errors.CREDENTIAL_NOT_FOUND": "That credential does not exist on this account.",
  "errors.VERIFY_FAILED": "We could not check the credential against Google.",

  "errors.PROJECT_ID_MISSING": "The Google Cloud project id is missing. It is in the Google Cloud console, top left, under the name.",
  "errors.PROJECT_ID_UPPERCASE": "\"{value}\" has uppercase letters, and project ids do not. You may have copied the project name instead of its id. The id is all lowercase, with hyphens and no spaces.",
  "errors.PROJECT_ID_MALFORMED": "\"{value}\" is not shaped like a Google Cloud project id. It is 6 to 30 characters: it starts with a lowercase letter and continues with letters, digits, or hyphens.",
  "errors.PROJECT_ID_MISMATCH": "The key belongs to project \"{found}\" and you declared \"{declared}\". They are two different projects. Use the id inside the file, or download the key for the project you meant to declare.",
  "errors.FILE_NOT_TEXT": "The file cannot be read as text. Are you sure you uploaded the .json you downloaded from Google and not another file? The right one weighs a few kilobytes and opens in any editor.",
  "errors.FILE_IS_API_KEY": "That is a Google API key, not a service account key. An API key cannot reach Search Console. You need the .json you get when creating a service account key. You should also delete that API key: it was exposed when you pasted it here.",
  "errors.FILE_NOT_JSON": "The file is not valid JSON: {reason} (line {line}). It may have been cut off while copying. Download it again from Google Cloud and upload it without opening or editing it.",
  "errors.FILE_NOT_OBJECT": "The file is valid JSON but not an object: found {type}. A service account file is an object with fields like \"client_email\".",
  "errors.FILE_IS_OAUTH_CLIENT_DESKTOP": "That is a desktop application credential (OAuth client), not a service account key. In Google Cloud, go to \"Credentials\" and create a Service account; then, under its \"Keys\" tab, add a new JSON key.",
  "errors.FILE_IS_OAUTH_CLIENT_WEB": "That is a web application credential (OAuth client), not a service account key. In Google Cloud, go to \"Credentials\" and create a Service account; then, under its \"Keys\" tab, add a new JSON key.",
  "errors.FILE_IS_USER_CREDENTIAL": "That is your own Google user credential (the one gcloud leaves when you sign in), not a service account key. You need the .json of a service account, with \"type\": \"service_account\".",
  "errors.FILE_LOOKS_LIKE_API_KEY": "The file looks like it holds an API key, not a service account key. Download the .json from the \"Keys\" tab of the service account.",
  "errors.FIELD_MISSING": "The file is missing the \"{field}\" field. Download the key again from Google Cloud, without editing it.",
  "errors.FIELDS_MISSING": "The file is missing several fields: {fields}. It is incomplete or it is of another kind. Download the key again from Google Cloud, without editing it.",
  "errors.TYPE_MISMATCH": "The \"type\" field says \"{type}\" and it has to say \"{expected}\". That file is another kind of Google credential.",
  "errors.PRIVATE_KEY_INVALID": "The \"private_key\" field does not hold a private key. Download the key again from Google Cloud, without editing it.",

  "errors.SITEMAP_LOCATION_REQUIRED": "Type the address of the sitemap.",
  "errors.SITEMAP_LOCATION_RELATIVE": "Type the full address of the sitemap, starting with https://. For example: https://example.com/sitemap.xml",
  "errors.DUPLICATE_ID": "It is already on the list.",
  "errors.SITE_ALREADY_CONNECTED": "This account is already connected to {hostname}. Disconnect it before connecting a different site.",

  "profile.title": "Profile",
  "profile.description": "Your account, how you read it and where it is open.",
  "profile.role.superAdmin": "Super Admin",
  "profile.role.admin": "Admin",
  "profile.role.viewer": "Viewer",
  "profile.tab.general": "General",
  "profile.tab.sessions": "Sessions",

  "profile.preferences.title": "Preferences",
  "profile.preferences.description": "How the interface looks and which language it speaks. Both apply everywhere, right away.",
  "profile.preferences.language.label": "Language",
  "profile.preferences.language.description": "The language of every screen, including this one.",
  "profile.preferences.language.en": "English",
  "profile.preferences.language.es-ar": "Spanish (Argentina)",
  "profile.preferences.theme.label": "Theme",
  "profile.preferences.theme.description": "Following the system means the interface changes when your device does.",
  "profile.preferences.theme.light": "Light",
  "profile.preferences.theme.dark": "Dark",
  "profile.preferences.theme.system": "System",
  "profile.preferences.saved": "Preferences saved.",

  "profile.account.title": "Account",
  "profile.account.description": "The address you sign in with. It also receives anything we need to tell you.",
  "profile.account.email.label": "Email address",
  "profile.account.email.save": "Save the address",
  "profile.account.saved": "Email address updated.",

  "profile.password.title": "Password",
  "profile.password.description": "Changing it does not close your other sessions. You can close them from the Sessions tab.",
  "profile.password.current.label": "Current password",
  "profile.password.new.label": "New password",
  "profile.password.confirm.label": "Repeat the new password",
  "profile.password.submit": "Change the password",
  "profile.password.submitting": "Changing…",
  "profile.password.saved": "Password changed.",

  "sessions.title": "Open sessions",
  "sessions.description": "Where your account is signed in right now. Closing a session deletes nothing: that device will have to sign in again.",
  "sessions.caption": "Open sessions on your account",
  "sessions.onlyCurrent": "This is your only open session. No other device is signed in to your account right now.",
  "sessions.unit": "open sessions",
  "sessions.unitSingular": "open session",
  "sessions.thisSession": "This session",
  "sessions.currentHint": "This is the one you are using now",
  "sessions.empty.title": "No sessions on record",
  "sessions.empty.description": "This session may have started before we began recording them. It will show up here the next time you sign in.",
  "sessions.closed.none": "There were no other open sessions.",
  "sessions.closed.one": "We closed 1 session.",
  "sessions.closed.other": "We closed {count} sessions.",

  "sessions.search.label": "Search the open sessions",
  "sessions.search.placeholder": "Search by device or address…",
  "sessions.select.all": "Select every session on this page",
  "sessions.select.row": "Select the session on {device} started on {date}",
  "sessions.closeSelected.action.one": "Close the selected session",
  "sessions.closeSelected.action.other": "Close the {count} selected sessions",
  "sessions.closeSelected.title.one": "Close the selected session?",
  "sessions.closeSelected.title.other": "Close the {count} selected sessions?",
  "sessions.closeSelected.consequence": "Those devices will have to sign in again. The one you are using now stays open.",
  "sessions.column.device": "Device",
  "sessions.column.address": "Source address",
  "sessions.column.activity": "Last activity",
  "sessions.column.created": "Started",
  "sessions.column.actions": "Actions",
  "sessions.noAddress": "No address on record",
  "sessions.device.known": "{browser} on {system}",
  "sessions.device.browserOnly": "{browser}",
  "sessions.device.systemOnly": "Unidentified browser on {system}",
  "sessions.device.unknown": "Unidentified browser",

  "sessions.row.actions": "Actions for the session on {device} started on {date}",

  "sessions.close.action": "Close the session",
  "sessions.close.busy": "Closing…",
  "sessions.close.title": "Close the session on {device}?",
  "sessions.close.consequence": "It started on {date}. That device will have to sign in again.",
  "sessions.close.consequenceWithAddress": "It started on {date} from {address}. That device will have to sign in again.",

  "sessions.closeOthers.zone": "Close the rest of the sessions",
  "sessions.closeOthers.action.one": "Close the other session",
  "sessions.closeOthers.action.other": "Close every other session",
  "sessions.closeOthers.description": "You will stay signed in here; every other device will have to sign in again.",
  "sessions.closeOthers.title.one": "Close the other session?",
  "sessions.closeOthers.title.other": "Close the other {count} sessions?",
  "sessions.closeOthers.confirm.one": "Close the other session",
  "sessions.closeOthers.confirm.other": "Close the other {count}",

  "sessions.detail.browser": "Declared browser",
  "sessions.detail.system": "Declared system",
  "sessions.detail.address": "Source address",
  "sessions.detail.activity": "Last activity",
  "sessions.detail.created": "Started",
  "sessions.detail.userAgent": "Declared agent",
  "sessions.detail.copyAgent": "Copy the agent",

  "tour.title": "Leave your account connected to Google",
  "tour.description.finished": "Everything is connected. You can check any step again from here.",
  "tour.description.firstTime": "We walk you through leaving everything connected. It is {steps} steps and you can leave whenever you want: whatever you do is saved. Most of it happens on Google's screens and usually takes less than half an hour.",
  "tour.description.resumed": "We pick up where you left off. {done}",
  "tour.done.none": "No step is done yet.",
  "tour.done.single": "Step {step} was already done.",
  "tour.done.range": "Steps {first} to {last} were already done.",
  "tour.done.list": "Steps {steps} were already done.",
  "tour.progress.allDone": "All {total} steps are done",
  "tour.progress.position": "Step {position} of {total}",
  "tour.progress.done": "{done} done",
  "tour.steps": "The seven steps",
  "tour.where": "Where:",
  "tour.bringBack": "What to bring back:",
  "tour.looksLike": "It looks like this:",
  "tour.check": "Check this step",
  "tour.recheck": "Check again",
  "tour.checking": "Checking…",
  "tour.continue": "Continue",
  "tour.goToBlocking": "Go to the missing step",
  "tour.passed.title": "Step done",
  "tour.passed.checkedAt": "Checked",
  "tour.preferFullForm": "I would rather do it from the full form",
  "tour.skip.leaving": "Leaving…",
  "tour.skip.firstTime": "I would rather do it on my own",
  "tour.skip.later": "Skip the tour",
  "tour.skip.note": "You will be able to do everything from the full forms. The tour stays available for whenever you want to pick it up.",
  "tour.keyFile.notAnApiKey": "A Google *API key* is no good for this: it does not give access to a property's private data. The file you are looking for is a .json and inside it says \"type\": \"service_account\".",
  "tour.keyFile.show": "See what the file looks like inside",
  "tour.keyFile.hide": "Hide the example",
  "tour.serviceAccount.heading": "Copy this address and add it in Search Console",
  "tour.created.project": "Declared project:",
  "tour.created.clientEmail": "Service account already uploaded:",
  "tour.created.hostname": "Domain already registered:",
  "tour.created.propertyUri": "Property we query:",
  "tour.created.sitemap": "Sitemap already registered:",
  "tour.created.batch": "Batch queued:",

  "stepState.PASSED": "Done",
  "stepState.MISSING": "Pending",
  "stepState.BLOCKED": "Blocked",
  "stepState.UNCONFIRMED": "Unconfirmed",

  "stepField.project_id.label": "Project id",
  "stepField.project_id.placeholder": "my-project-123456",
  "stepField.project_id.help": "If you do not send it, we use the one you declared in the first step.",
  "stepField.key_file.label": "The key's .json file",
  "stepField.key_file.placeholder": "my-project-123456-a1b2c3d4e5f6.json",
  "stepField.hostname.label": "Your domain",
  "stepField.hostname.placeholder": "example.com",
  "stepField.property_type.label": "Property shape",
  "stepField.location.label": "Sitemap address",
  "stepField.location.placeholder": "https://example.com/sitemap.xml",

  "step.GOOGLE_PROJECT.title": "Create a project in Google Cloud",
  "step.GOOGLE_PROJECT.goal": "A project is the folder where Google groups what an application uses. You need one before you can create the credential.",
  "step.GOOGLE_PROJECT.path": "console.cloud.google.com → project picker (top) → New project",
  "step.GOOGLE_PROJECT.bringBack": "The project's *id*",
  "step.GOOGLE_PROJECT.example": "my-project-123456",
  "step.GOOGLE_PROJECT.note": "Careful: it is not the name you gave it, and not the \"project number\". The id is all lowercase and usually ends in a few digits that Google adds on its own.",
  "step.GOOGLE_PROJECT.open": "Open Google Cloud",

  "step.ENABLE_API.title": "Enable the Search Console API",
  "step.ENABLE_API.goal": "A new project has no API turned on. Without this one, the credential is still created but Google then rejects every query.",
  "step.ENABLE_API.path": "In the same project → APIs and services → Library → search for \"Search Console API\" → Enable",
  "step.ENABLE_API.bringBack": "Nothing: just leave it enabled",
  "step.ENABLE_API.example": "",
  "step.ENABLE_API.note": "If the button says \"Manage\" instead of \"Enable\", it was already on and there is nothing to do.",
  "step.ENABLE_API.open": "Open the screen to enable it",

  "step.SERVICE_ACCOUNT_KEY.title": "Create the service account and upload its key",
  "step.SERVICE_ACCOUNT_KEY.goal": "A service account is a user that is not a person. It is the one that will query Search Console on your behalf, without you having to sign in.",
  "step.SERVICE_ACCOUNT_KEY.path": "APIs and services → Credentials → Create credentials → Service account. Then open it and go to the Keys tab → Add key → Create new key → JSON",
  "step.SERVICE_ACCOUNT_KEY.bringBack": "The .json file that downloads on its own when the key is created",
  "step.SERVICE_ACCOUNT_KEY.example": "my-project-123456-a1b2c3d4e5f6.json",
  "step.SERVICE_ACCOUNT_KEY.note": "It downloads once and Google never shows it again. If you lose it, create another key and that is it: nothing breaks.",
  "step.SERVICE_ACCOUNT_KEY.open": "Open the service accounts",

  "step.AUTHORIZE_PROPERTY.title": "Authorize the service account in Search Console",
  "step.AUTHORIZE_PROPERTY.goal": "Up to here the credential exists but has access to no site. This step is the one that grants it.",
  "step.AUTHORIZE_PROPERTY.path": "search.google.com/search-console → pick your property → Settings → Users and permissions → Add user",
  "step.AUTHORIZE_PROPERTY.bringBack": "Nothing: adding the address we show you is enough",
  "step.AUTHORIZE_PROPERTY.example": "tools-patiospools@my-project-123456.iam.gserviceaccount.com",
  "step.AUTHORIZE_PROPERTY.note": "The permission has to be *Owner*. With \"Full\" or \"Restricted\" sitemaps work but URL inspection returns an error, and that is exactly the data we came for.",
  "step.AUTHORIZE_PROPERTY.open": "Open Search Console",

  "step.ADD_DOMAIN.title": "Connect your site",
  "step.ADD_DOMAIN.goal": "Tell the platform which Search Console property it has to look at.",
  "step.ADD_DOMAIN.path": "Connection → Connect your site",
  "step.ADD_DOMAIN.bringBack": "Your site's domain",
  "step.ADD_DOMAIN.example": "example.com",
  "step.ADD_DOMAIN.note": "If you registered it in Search Console as a \"domain property\", pick that option; if you verified it with a full URL, pick URL prefix.",
  "step.ADD_DOMAIN.open": "",

  "step.ADD_SITEMAP.title": "Register your sitemap",
  "step.ADD_SITEMAP.goal": "The sitemap is the site's list of URLs. Everything that gets monitored later comes from there.",
  "step.ADD_SITEMAP.path": "Sitemaps → Add sitemap",
  "step.ADD_SITEMAP.bringBack": "The sitemap's full address",
  "step.ADD_SITEMAP.example": "https://example.com/sitemap.xml",
  "step.ADD_SITEMAP.note": "If it is an index pointing at other sitemaps, registering the index is enough: the children are discovered on their own.",
  "step.ADD_SITEMAP.open": "",

  "step.FIRST_BATCH.title": "Run the first sync",
  "step.FIRST_BATCH.goal": "Confirm end to end that everything above turned out right, with real data from your site.",
  "step.FIRST_BATCH.path": "Site settings → Sync now",
  "step.FIRST_BATCH.bringBack": "Nothing: this is the moment to see whether it worked",
  "step.FIRST_BATCH.example": "",
  "step.FIRST_BATCH.note": "The first run only reads the sitemaps and registers the URLs. Coverage states arrive later, in batches, because Google limits how many can be queried per day.",
  "step.FIRST_BATCH.open": "",

  "stepReason.UNKNOWN.missing": "This step is not done yet.",

  "stepReason.PROJECT_NOT_DECLARED.missing": "You have not written down your Google Cloud project id yet.",
  "stepReason.PROJECT_NOT_DECLARED.hint": "It is in the console, in the project picker at the top. It is all lowercase and usually ends in a few digits, like \"my-project-123456\": it is not the name you gave it and not the project number.",

  "stepReason.API_NEEDS_KEY.missing": "The only way to know whether the API is enabled is to ask Google, and asking needs a key.",
  "stepReason.API_NEEDS_KEY.hint": "Go on to the key step: the same answer from Google says whether the API is on.",
  "stepReason.API_NOT_CHECKED.missing": "We have not asked Google about this project yet.",
  "stepReason.API_NOT_CHECKED.hint": "Press \"Check this step\": the key you already uploaded is enough.",
  "stepReason.API_NOT_ENABLED.missing": "Google says the Search Console API is not enabled in your project.",
  "stepReason.API_NOT_ENABLED.hint": "Go to APIs and services → Library, search for \"Search Console API\" and press Enable. It can take a couple of minutes to take effect; then check again.",
  "stepReason.API_NOT_ENABLED_NAMED.missing": "Google says the Search Console API is not enabled in project {project_id}.",
  "stepReason.API_NOT_ENABLED_NAMED.hint": "Go to APIs and services → Library, search for \"Search Console API\" and press Enable. It can take a couple of minutes to take effect; then check again.",

  "stepReason.KEY_NOT_UPLOADED.missing": "You have not uploaded the service account's .json file yet.",
  "stepReason.KEY_NOT_UPLOADED.hint": "It is the one that downloads on its own when the key is created, under Credentials → your service account → Keys → Add key → JSON. It downloads once; if you lost it, create another and nothing breaks.",
  "stepReason.KEY_REVOKED.missing": "The key you had uploaded was revoked.",
  "stepReason.KEY_REVOKED.hint": "Create a new key in Google Cloud and upload it here; the history is kept.",
  "stepReason.KEY_NOT_CHECKED.missing": "The key is uploaded but we have not checked it against Google yet.",
  "stepReason.KEY_NOT_CHECKED.hint": "Press \"Check this step\" so Google says whether it accepts it.",
  "stepReason.KEY_REJECTED.missing": "Google rejected the key.",
  "stepReason.KEY_REJECTED.hint": "It may have expired, been deleted from the console, or belong to another project. Create a new key and upload it.",
  "stepReason.KEY_REJECTED_DETAIL.missing": "Google rejected the key: {detail}",
  "stepReason.KEY_REJECTED_DETAIL.hint": "It may have expired, been deleted from the console, or belong to another project. Create a new key and upload it.",

  "stepReason.AUTH_NEEDS_KEY.missing": "With no key uploaded there is no service account to authorize.",
  "stepReason.AUTH_NEEDS_KEY.hint": "Go back to the key step and upload the .json file.",
  "stepReason.AUTH_NOT_CHECKED.missing": "We have not asked Google which properties this account can read yet.",
  "stepReason.AUTH_NOT_CHECKED.hint": "Press \"Check this step\".",
  "stepReason.AUTH_API_OFF.missing": "With the API off Google rejects the query, so we cannot know which properties this account has authorized.",
  "stepReason.AUTH_API_OFF.hint": "Enable the API in the previous step and come back.",
  "stepReason.AUTH_NOT_GRANTED.missing": "We do not see any property among the ones {client_email} can read yet.",
  "stepReason.AUTH_NOT_GRANTED.hint": "In Search Console go to your property → Settings → Users and permissions → Add user, paste that address and pick the *Owner* permission. With \"Full\" sitemaps work but URL inspection returns an error, and that is the data we came for. Then check again.",
  "stepReason.AUTH_NOT_GRANTED_NAMED.missing": "We do not see property {property_uri} among the ones {client_email} can read yet.",
  "stepReason.AUTH_NOT_GRANTED_NAMED.hint": "In Search Console go to your property → Settings → Users and permissions → Add user, paste that address and pick the *Owner* permission. With \"Full\" sitemaps work but URL inspection returns an error, and that is the data we came for. Then check again.",

  "stepReason.DOMAIN_NEEDS_CONNECTION.missing": "Until the connection to Google is verified a site cannot be registered: it would sit there unable to query anything.",
  "stepReason.DOMAIN_NEEDS_CONNECTION.hint": "Resolve the key and authorization steps, and come back.",
  "stepReason.DOMAIN_NOT_ADDED.missing": "You have not registered your site here yet.",
  "stepReason.DOMAIN_NOT_ADDED.hint": "Write the domain without \"https://\" and without a trailing slash, like \"example.com\", and pick the same property shape you verified it with in Search Console.",
  "stepReason.DOMAIN_NOT_OPERATIONAL.missing": "{hostname} is registered but its access shows as \"{access_state}\".",
  "stepReason.DOMAIN_NOT_OPERATIONAL.hint": "Check that {property_uri} is exactly the property you have in Search Console and that the service account is listed there as owner. Then check again.",
  "stepReason.DOMAIN_NOT_OPERATIONAL_DETAIL.missing": "{hostname} is registered but its access shows as \"{access_state}\". Google answered: {detail}",
  "stepReason.DOMAIN_NOT_OPERATIONAL_DETAIL.hint": "Check that {property_uri} is exactly the property you have in Search Console and that the service account is listed there as owner. Then check again.",

  "stepReason.SITEMAP_NEEDS_DOMAIN.missing": "A sitemap belongs to a site, and there is no site registered yet.",
  "stepReason.SITEMAP_NEEDS_DOMAIN.hint": "Go back to the previous step and add your domain.",
  "stepReason.SITEMAP_NOT_REGISTERED.missing": "You have not registered any sitemap for this site yet.",
  "stepReason.SITEMAP_NOT_REGISTERED.hint": "Write the full address, like \"https://{hostname}/sitemap.xml\". If it is an index pointing at others, registering the index is enough: the children are discovered on their own.",
  "stepReason.SITEMAP_UNREADABLE.missing": "We could not download {location}: {detail}",
  "stepReason.SITEMAP_UNREADABLE.hint": "Check the address, or try \"https://{hostname}/sitemap_index.xml\".",

  "stepReason.BATCH_NEEDS_DOMAIN.missing": "A site whose access is not confirmed yet cannot be synced.",
  "stepReason.BATCH_NEEDS_DOMAIN.hint": "Resolve the domain step and come back.",
  "stepReason.BATCH_NOT_RUN.missing": "You have not run the first sync yet.",
  "stepReason.BATCH_NOT_RUN.hint": "Press \"Check this step\" and it starts: the sitemaps get read and the URLs get registered. Coverage states arrive later, in batches.",
  "stepReason.BATCH_FAILED.missing": "The first sync failed.",
  "stepReason.BATCH_FAILED.hint": "Fix what the reason says and check again: it relaunches on its own.",
  "stepReason.BATCH_FAILED_DETAIL.missing": "The first sync failed: {detail}",
  "stepReason.BATCH_FAILED_DETAIL.hint": "Fix what the reason says and check again: it relaunches on its own.",

  "stepReason.NO_RESPONSE.missing": "Google did not answer, so this step cannot be confirmed yet.",
  "stepReason.NO_RESPONSE.hint": "It is not something you did wrong. Try again in a few minutes.",

  "completion.title.queued": "Your first batch is queued",
  "completion.title.ran": "Your first batch already ran",
  "completion.badge": "Tour finished",
  "completion.body.queued": "When it finishes you will see the state Google reported for each URL, with its date. A full cycle over {urls} URLs takes about 3 days, because Google limits how many can be queried per day.",
  "completion.body.ran": "You can now see the state Google reported for each URL, with its date. A full cycle over {urls} URLs takes about 3 days, because Google limits how many can be queried per day.",
  "completion.finishedAt": "You finished the tour",
  "completion.coverage": "See the coverage for {hostname}",
  "completion.yourDomain": "your domain",
  "completion.batch": "See the progress of batch #{batch}",
  "completion.sitemaps": "See the sitemaps",

  "sitemapKind.INDEX": "Sitemap index",
  "sitemapKind.URLSET": "URL list",
  "sitemapSource.DECLARED": "Registered by hand",
  "sitemapSource.DISCOVERED": "Found in an index",

  "credentialStatus.UNVERIFIED": "Unverified",
  "credentialStatus.VERIFIED": "Verified",
  "credentialStatus.INVALID": "Invalid",
  "credentialStatus.REVOKED": "Revoked",

  "batchShow.seeCoverage": "See the coverage",
  "coverage.searchLabel": "Search in the address",
  "coverage.history.loading": "Loading the history…",
  "coverage.history.sameCanonical": "The same one",
  "sitemaps.declaredUnit": "declared sitemaps",
  "sitemaps.filtersLabel": "List filters",
  "sitemaps.searchLabel": "Search by sitemap address",
  "sitemaps.clearFilters": "Clear the filters",
  "sitemaps.backToIndexOrder": "Back to index order",
  "sitemaps.changedAfterSubmit": "The file changed after that submission. It gets submitted on the next sync.",
  "sitemaps.lastGoodSubmit": "Last successful submission:",
  "sitemaps.searchPlaceholder": "/product…",
  "sitemaps.search": "Search",
  "sitemaps.filter.kind": "Kind",
  "sitemaps.filter.source": "Source",
  "sitemaps.filter.result": "Last submission",
  "sitemaps.filter.allKinds": "All",
  "sitemaps.filter.allSources": "All",
  "sitemaps.filter.anyResult": "Any",
  "sitemaps.neverSubmitted": "It was never submitted successfully.",
  "time.noDate": "no date",

  "apiKeys.revoked.empty.title": "No key has been revoked.",
  "apiKeys.revoked.empty.description": "When you revoke one, it stays here with its date so you can review it later.",
  "settings.keyFile.label": "Key file (.json)",
  "settings.keyFile.help": "Inside it has to say \"type\": \"service_account\". A Google API key is no good: it does not give access to a property's private data.",

  "coverage.whatQueryingMeans": "Querying a URL is asking Google what it knows about it. It does not make it crawl or index it, and it does not change when Google decides to visit it.",
  "domainShow.inspect.nothingPending": "There are no URLs waiting to be queried. URLs come from the sitemaps: register one and sync to have something to inspect.",
  "domainShow.inspect.noManualQuota": "Today's quota ran out and there is nothing left to trigger by hand. The breakdown of both pockets is above; it renews when the next day starts.",
  "notifications.markAllRead.note": "Coming in here does not clear the number in the menu: marking a notice as read is something you do.",
  "notifications.loading": "Loading…",
  "notifications.loadMore": "Load more",
  "notifications.unreadCount": " ({total} unread)",
  "sitemaps.foreignUrls.before": "The sitemap declares {total} URLs that do not belong to",
  "sitemaps.foreignUrls.after": ". We ignore them. Check that it is this domain's sitemap.",

  "notFound.title": "Page not found",
  "notFound.heading": "This page does not exist",
  "notFound.description": "The address may be incorrect, or the page may have moved.",
  "notFound.home": "Go home",
  "notFound.debug.open": "Open debug details",
  "notFound.debug.title": "Debug details",
  "notFound.debug.description": "The original diagnostic generated by Django for this request.",
  "notFound.debug.frameTitle": "Django 404 diagnostic",

  "users.title": "Users",
  "users.description": "Manage account access and administrative roles. The super admin is never included in this list.",
  "users.unit": "users",
  "users.unitSingular": "user",
  "users.caption": "Platform users",
  "users.column.email": "Email",
  "users.column.role": "Role",
  "users.column.status": "Status",
  "users.column.created": "Created",
  "users.column.actions": "Actions",
  "users.role.admin": "Admin",
  "users.role.viewer": "Viewer",
  "users.role.changeFor": "Change the role for {email}",
  "users.status.active": "Active",
  "users.status.inactive": "Inactive",
  "users.status.invited": "Invited",
  "users.invite.action": "Invite user",
  "users.invite.title": "Invite a user",
  "users.invite.description": "Choose the email and initial role. The account stays inaccessible until the invitation is accepted.",
  "users.invite.confirm": "Create invitation",
  "users.invite.pending": "Creating invitation…",
  "users.invite.expires": "The invitation is emailed immediately, expires in 3 days and can be used once.",
  "users.invite.link": "invitation link",
  "users.invite.created.title": "Invitation created",
  "users.invite.created.description": "The account for {email} is ready. Copy this link and send it through your preferred channel.",
  "users.invite.created.footnote": "Email sent. Expires {expires} Eastern Time. This backup link is shown only now.",
  "users.invite.error.EMAIL_FAILED": "The invitation email could not be sent. No account was created. Check the email configuration and try again.",
  "users.invite.error.EMAIL_INVALID": "Enter a valid email address.",
  "users.invite.error.EMAIL_TAKEN": "An account already exists with that email.",
  "users.invite.error.ROLE_INVALID": "Choose a valid role.",
  "users.invite.error.NETWORK": "The invitation could not be created. Check the connection and try again.",
  "users.invite.error.UNKNOWN": "The invitation could not be created. Try again.",
  "invitation.title": "Set up your account",
  "invitation.description": "Choose a password to accept the invitation and enter the platform.",
  "invitation.expiresAt": "Expires {expires} Eastern Time.",
  "invitation.password": "Password",
  "invitation.password.help": "Use at least 8 characters.",
  "invitation.password.confirm": "Repeat the password",
  "invitation.submit": "Accept invitation",
  "invitation.submitting": "Activating account…",
  "invitation.invalid.title": "This invitation is no longer available",
  "invitation.invalid.description": "It may have expired or already been used. Ask an administrator for a new invitation.",
  "invitation.error.PASSWORD_TOO_SHORT": "Use at least 8 characters.",
  "invitation.error.PASSWORD_INVALID": "Choose a stronger password that is not common, numeric-only, or too similar to your email.",
  "invitation.error.PASSWORDS_DIFFER": "The passwords do not match.",
  "invitation.error.INVITATION_INVALID": "This invitation is no longer available.",
  "invitation.error.NETWORK": "The account could not be activated. Check the connection and try again.",
  "invitation.error.UNKNOWN": "The account could not be activated. Try again.",
  "users.filter.role": "Role",
  "users.filter.status": "Status",
  "users.search.label": "Search users",
  "users.search.placeholder": "Search by email…",
  "users.search.action": "Search",
  "users.empty.title": "No users to show",
  "users.empty.description": "There are no users other than the super admin.",
  "users.empty.filtered": "No user matches the selected filters.",
  "users.deactivate.action": "Deactivate",
  "users.deactivate.title": "Deactivate {email}?",
  "users.deactivate.consequence": "All of this user's sessions will close immediately. Their data will remain, but signing in will behave as if the account did not exist.",
  "users.deactivate.confirm": "Deactivate user",
  "users.deactivate.busy": "Deactivating…",
  "serverErrorPage.title": "Something went wrong",
  "serverErrorPage.heading": "We couldn't load this page",
  "serverErrorPage.description": "The service hit an unexpected problem. Try again in a moment.",
  "serverErrorPage.retry": "Try again",
  "serverErrorPage.home": "Go home",

  "table.noMatches.title": "Nothing matches",
  "table.noMatches.search": "No row matches what you typed. The rows are still there: it is the search box that is hiding them.",
  "table.noMatches.search.action": "Clear the search",
  "table.noMatches.filters": "No row is left by the filters you picked. Two filters combine as \"and\", so asking for both at once can leave nothing.",
  "table.noMatches.filters.action": "Clear the filters",
  "table.noMatches.both": "No row survives the search and the filters together. Either one alone may well bring rows back.",
  "table.noMatches.both.action": "Clear the search and the filters",

  "settings.indexing.title": "Indexing",
  "settings.indexing.description": "Whether we can ask Google to look at a page. It is a second API, off by default, and you only need it if you are going to request indexing.",
  "settings.indexing.checkedAt": "Last answer from Google",
  "settings.indexing.lastRequest": "For this address",
  "settings.indexing.enableApi": "Enable the Indexing API",
  "settings.indexing.authorize": "Open Search Console",
  "settings.indexing.seeEvidence": "See what travelled",
  "settings.indexing.noCheck": "There is no button to check this one. The Indexing API has no way to ask whether it would work: the only thing it accepts is publishing a real address, and that spends one of the 200 daily requests your whole Google Cloud project shares. So what you read here is the answer Google gave to the last request that actually went out.",
  "settings.indexing.NEVER_ASKED.label": "Not confirmed",
  "settings.indexing.NEVER_ASKED.body": "No indexing request has ever left, so Google has told us nothing about this. Enable the API and make the service account an Owner of the property; the first request you send will confirm both at once.",
  "settings.indexing.WORKING.label": "Working",
  "settings.indexing.WORKING.body": "Google accepted the last request. That does not mean the page was indexed — Google decides that — but the request did leave and this is the proof.",
  "settings.indexing.API_NOT_ENABLED.label": "API not enabled",
  "settings.indexing.API_NOT_ENABLED.body": "Google answered that the Indexing API is off in your Google Cloud project. In the library it is listed as \"Web Search Indexing API\". It can take a couple of minutes to take effect after you enable it.",
  "settings.indexing.NOT_AUTHORIZED.label": "Missing permission",
  "settings.indexing.NOT_AUTHORIZED.body": "Google turned the service account down. For indexing it has to be an Owner of the property: \"Full\" and \"Restricted\" let sitemaps through and turn these requests down.",
  "settings.indexing.INCONCLUSIVE.label": "Not confirmed",
  "settings.indexing.INCONCLUSIVE.body": "The last answer from Google was about one address, not about the connection, so it says nothing either way. The next request that goes out will.",

  "step.ENABLE_INDEXING_API.title": "Enable the Indexing API",
  "step.ENABLE_INDEXING_API.goal": "This is the API that lets you ask Google to look at a page. It is a different one from Search Console and it is off by default, so without this step every request comes back rejected. You only need it if you are going to request indexing; watching coverage works without it.",
  "step.ENABLE_INDEXING_API.path": "In the same project → APIs and services → Library → search for \"Indexing API\" → Enable. Then, in Search Console, the service account has to be an Owner of the property.",
  "step.ENABLE_INDEXING_API.bringBack": "Nothing: just leave it enabled",
  "step.ENABLE_INDEXING_API.example": "tools-patiospools@my-project-123456.iam.gserviceaccount.com",
  "step.ENABLE_INDEXING_API.note": "We do not check this one against Google, and that is on purpose: the only way to check it is to publish an address, and publishing spends one of the day's requests. The step confirms itself with the answer to the first real request you send.",
  "step.ENABLE_INDEXING_API.open": "Open the screen to enable it",

  "stepReason.INDEXING_NEEDS_KEY.missing": "The Indexing API answers to the same service account key, and there is none uploaded yet.",
  "stepReason.INDEXING_NEEDS_KEY.hint": "Go on to the key step. Once the key is there, the first indexing request answers this one.",
  "stepReason.INDEXING_NOT_TRIED.missing": "No indexing request has left yet, so there is nothing Google has told us about this.",
  "stepReason.INDEXING_NOT_TRIED.hint": "Enable the API and authorize the service account as Owner. The first request you send will say whether it worked.",
  "stepReason.INDEXING_API_NOT_ENABLED.missing": "Google answered that the Indexing API is not enabled in your project.",
  "stepReason.INDEXING_API_NOT_ENABLED.hint": "Go to APIs and services → Library, search for \"Indexing API\" and press Enable. It can take a couple of minutes to take effect.",
  "stepReason.INDEXING_NOT_AUTHORIZED.missing": "Google turned down the service account when we asked it to index an address.",
  "stepReason.INDEXING_NOT_AUTHORIZED.hint": "In Search Console, the service account has to be an Owner of the property. Any lower permission lets sitemaps through and turns indexing requests down.",

  "batch.kind.URL_INDEXING": "Indexing requests",
  "batch.unit.URL_INDEXING": "requests",
  "batch.reason.completed.URL_INDEXING.one": "The batch's single request was sent.",
  "batch.reason.completed.URL_INDEXING.other": "The batch's {total} requests were sent.",
  "batch.reason.pending.URL_INDEXING.one": "{pending} request was left unsent; you can resume the batch from where it stopped.",
  "batch.reason.pending.URL_INDEXING.other": "{pending} requests were left unsent; you can resume the batch from where it stopped.",
  "batch.reason.nothing.URL_INDEXING": "Not a single request was sent.",
  "batch.DRAFT.label": "Draft",
  "batch.DRAFT.help": "It exists and it is waiting for you. Nothing goes out to Google until you send it.",

  "notification.INDEXING_BATCH_READY.title": "An indexing batch for {hostname} is waiting for you",
  "notification.INDEXING_BATCH_READY.body": "{total} addresses were put together for you to review. Nothing was sent to Google: it goes out when you send it.",
  "notification.INDEXING_BATCH_READY.action": "Review the batch",

  "batchShow.indexing.title": "What was asked of Google",
  "batchShow.indexing.description": "Every address in this batch, with what came back. The full request and answer are one step away.",
  "batchShow.indexing.open": "Open the batch",
  "batchShow.indexing.truncated": "Showing {shown} of {total}. The whole batch is in the downloaded file.",

  "coverage.tab.indexing": "Indexing",
  "coverage.column.indexing": "What we asked",
  "coverage.notRequested": "Nothing asked",
  "coverage.requestIndexing.selected.one": "Send 1 address to Google",
  "coverage.requestIndexing.selected.other": "Send {total} addresses to Google",
  "coverage.requestIndexing.confirm.title.one": "Send 1 address to Google?",
  "coverage.requestIndexing.confirm.title.other": "Send {total} addresses to Google?",
  "coverage.requestIndexing.confirm.description": "These are the ones that go out, in this order. Sending asks Google to look at them; whether it indexes them is Google's call, and this screen never claims otherwise.",
  "coverage.requestIndexing.confirm.action": "Send them",
  "coverage.requestIndexing.confirm.busy": "Sending…",
  "coverage.requestIndexing.discouraged.title.one": "1 of these is not worth asking for",
  "coverage.requestIndexing.discouraged.title.other": "{total} of these are not worth asking for",
  "coverage.requestIndexing.discouraged.description": "Google already gave a reason a request will not change: a noindex tag, a robots.txt block, another canonical, a redirect, or we never asked about it. They go out anyway if you send them.",
  "coverage.indexing.queued": "The batch is on its way to Google",
  "coverage.url.home": "Home",
  "coverage.inspect.selected.one": "Check {total} URL",
  "coverage.inspect.selected.other": "Check {total} URLs",
  "coverage.inspect.queued": "We are asking Google about those URLs",
  "coverage.indexing.resumed": "Picking up where it stopped",
  "coverage.indexing.empty.title": "Nothing has been asked of Google yet",
  "coverage.indexing.empty.description": "Pick addresses in the URLs tab and send them. What happens next shows up right here.",
  "coverage.indexing.current": "The current batch",
  "coverage.indexing.current.description": "The one running, or the last one that finished. Every batch ever sent is in the batches table.",
  "coverage.indexing.resume": "Pick up where it stopped",
  "coverage.indexing.draft.title": "This batch has not been sent",
  "coverage.indexing.draft.description": "It was put together on its own — by a deploy or by a scan — and it is waiting for you. Open it to review its addresses and send it.",
  "coverage.indexing.addresses": "Addresses",
  "coverage.indexing.addresses.running": "They go out in this order, and the list updates on its own.",
  "coverage.indexing.addresses.done": "How each one ended up.",
  "coverage.indexing.truncated": "Showing {shown} of {total}. The whole batch is on its page.",
  "coverage.indexing.log": "What Google answered",
  "coverage.indexing.log.description": "The raw request and the raw answer for every address, whether it went through or was turned down.",
  "coverage.indexing.log.body": "Each address keeps the body that was sent and the body that came back, exactly as they travelled, and they are never deleted. An answer that went through is what proves the request left; one that was turned down is what says whether the problem is a permission, an address, or the daily quota.",
  "coverage.indexing.log.open": "Open the log",
  "coverage.indexing.open": "Open the batch",

  "indexing.title": "Indexing requests for {hostname}",
  "indexing.description": "What was asked of Google, and what Google answered.",
  "indexing.disclaimer.title": "This does not promise indexing",
  "indexing.disclaimer.body": "Google decides whether to act on a request, and a page can be turned down after a request that went through fine. What this screen can prove is that the request left, when it left, and what came back.",
  "indexing.batch.heading": "This batch",
  "indexing.batch.description": "Where it stands and where it came from.",
  "indexing.batch.origin": "Created by",
  "indexing.batch.created": "Created",
  "indexing.batch.provenance": "Created by {origin} ·",
  "indexing.tab.batch": "This batch",
  "indexing.tab.addresses": "Addresses",
  "indexing.progress.pending": "Not sent yet",
  "indexing.progress.sent": "Requests sent",
  "indexing.progress.errors": "Turned down by Google",
  "indexing.progress.removed": "Taken out",
  "indexing.urls.title": "Addresses in this batch",
  "indexing.urls.description": "They are sent in this order. Sending stops at the first answer that rules out the rest.",
  "indexing.urls.caption": "Addresses in the indexing batch for {hostname}, in the order they are sent.",
  "indexing.unit.one": "address",
  "indexing.unit.other": "addresses",
  "indexing.column.url": "Address",
  "indexing.column.state": "Request",
  "indexing.column.coverage": "What Google says",
  "indexing.column.response": "Answer",
  "indexing.column.sent": "Sent",
  "indexing.searchLabel": "Search an address",
  "indexing.searchPlaceholder": "Part of the address",
  "indexing.empty.title": "No address matches that search",
  "indexing.empty.description": "Clear the search box to see every address in the batch.",
  "indexing.run": "Send to Google",
  "indexing.run.busy": "Sending…",
  "indexing.resume": "Resume where it stopped",
  "indexing.resume.busy": "Resuming…",
  "indexing.delete": "Discard this draft",
  "indexing.delete.busy": "Discarding…",
  "indexing.delete.confirm.title": "Discard this draft?",
  "indexing.delete.confirm.consequence": "The batch and its list of addresses go away. Nothing was sent to Google, so there is no evidence to lose.",
  "indexing.delete.confirm.action": "Discard the draft",
  "indexing.evidence.download": "Download the evidence",
  "indexing.evidence.title": "What travelled",
  "indexing.evidence.description": "The request and the answer, exactly as they were stored. Nothing is summarised or translated.",
  "indexing.evidence.request": "Sent to Google",
  "indexing.evidence.response": "Received from Google",
  "indexing.evidence.status": "HTTP status",
  "indexing.evidence.sentAt": "Sent",
  "indexing.evidence.none": "Nothing travelled for this address yet.",
  "indexing.row.actions": "Actions for {url}",
  "indexing.row.evidence": "See what travelled",
  "indexing.row.remove": "Take out of the batch",
  "indexing.row.remove.confirm.title": "Take {url} out of the batch?",
  "indexing.row.remove.confirm.consequence": "It stays in the list marked as taken out, and no request is sent for it. You can put it back while the batch is a draft.",
  "indexing.row.remove.confirm.action": "Take it out",
  "indexing.row.restore": "Put back in the batch",
  "indexing.row.clear": "Clear the error and try again",
  "indexing.state.PENDING.label": "Not sent",
  "indexing.state.PENDING.help": "No request has left for this address yet.",
  "indexing.state.SENT.label": "Request sent",
  "indexing.state.SENT.help": "The request left and Google accepted it. That is not the same as the page being indexed.",
  "indexing.state.ERROR.label": "Turned down",
  "indexing.state.ERROR.help": "Google answered with an error. The answer is stored as it arrived.",
  "indexing.state.REMOVED.label": "Taken out",
  "indexing.state.REMOVED.help": "Someone took this address out of the batch before it ran. No request was sent.",
  "indexing.stopped.QUOTA_EXCEEDED": "Google answered that the daily quota ran out, so the rest would have failed too. Resume tomorrow.",
  "indexing.stopped.PERMISSION_DENIED": "Google turned down the service account. Resuming tomorrow will not help: the permission has to be fixed first.",
  "indexing.stopped.API_NOT_ENABLED": "The Indexing API is not enabled in the Google Cloud project.",
  "indexing.stopped.INVALID_KEY": "Google rejected the key, so nothing else could be sent.",
  "indexing.stopped.generic": "Google answered with an error and sending stopped there.",
  "indexing.discouraged.title.one": "1 address here is not worth asking for",
  "indexing.discouraged.title.other": "{total} addresses here are not worth asking for",
  "indexing.discouraged.body": "Google already gave a reason that a request will not change: a noindex tag, a robots.txt block, another canonical, or a redirect. You can send them anyway, but the answer is unlikely to be different.",

  "seo.title": "SEO",
  "seo.description": "How your site performs in Google Search: which queries it shows up for, where it ranks, and which pages bring the traffic.",
  "seo.noSite.title": "No site connected yet",
  "seo.noSite.description": "This tool reads the performance of a site you already have in Search Console. Connect one from Search Console and come back.",
  "seo.upTo": "Data through {date}",

  "seo.overview.title": "Where this module stands",
  "seo.overview.description": "Google publishes performance two to three days late, so the most recent day here is never today.",
  "seo.overview.upTo": "Data through",
  "seo.overview.upToHelp": "The most recent day Google has closed.",
  "seo.overview.since": "History starts",
  "seo.overview.lastSync": "Last sync",
  "seo.overview.keywords": "Keywords",
  "seo.overview.rows": "Stored rows",
  "seo.overview.none": "Not yet",

  "seo.empty.title": "No history imported yet",
  "seo.empty.description": "Import the performance Google already has for this site and the screens fill up.",
  "seo.empty.action": "Go to connection",
  "seo.top.title": "Top keywords",
  "seo.top.description": "The 10 with the most impressions over the last {days} days, day by day.",
  "seo.top.metric": "Metric to plot",
  "seo.top.caption": "The 10 keywords with the most impressions over the last {days} days.",
  "seo.top.legendHint": "Point at one to follow its line.",

  "seo.home.details": "Details",
  "seo.home.group.performance": "How it is going",
  "seo.home.group.review": "Worth a look",
  "seo.home.impressions": "Impressions",
  "seo.home.clicksLabel": "Clicks",
  "seo.home.averagePosition": "Average position",
  "seo.home.against": "Against {previous} the period before.",
  "seo.home.range": "Range: {days} days",
  "seo.home.rangeCompared": "Range: {days} days, current vs previous",
  "seo.home.rangeWhy": "{days} days is the window Search Console's Performance report uses by default, so both numbers can be compared side by side.",
  "seo.home.rangeWhyLabel": "Why this range",
  "seo.home.rangeCurrent": "Current: {range}.",
  "seo.home.rangePrevious": "Previous: {range}.",
  "seo.home.noPrevious": "No earlier period yet.",
  "seo.home.cannibalization": "Cannibalization",
  "seo.home.cannibalizationNote": "Keywords with {threshold}+ of your pages competing the same day.",
  "seo.home.nearFirstPage": "Close to page one",
  "seo.home.nearFirstPageNote": "Sitting on page two. A small push moves them up.",
  "seo.home.reachWithoutClicks": "Reach without clicks",
  "seo.home.reachWithoutClicksNote": "You show up and nobody comes in.",


  "seo.cannibalization.title": "Cannibalization",
  "seo.cannibalization.description": "Keywords where {threshold} or more of your pages competed on the same day, over the last {days} days.",
  "seo.cannibalization.list": "Affected keywords",
  "seo.cannibalization.listHelp": "Open a row to see which URLs compete. What counts is pages on the same day: two pages that ranked in different weeks did not compete, they replaced each other.",
  "seo.column.impressionsClicks": "Impressions / Clicks",
  "seo.cannibalization.notes": "What the filters mean",
  "seo.cannibalization.searchLabel": "Search keywords",
  "seo.cannibalization.searchPlaceholder": "Filter by text…",
  "seo.cannibalization.pages.failed": "Could not load the competing URLs. Close the row and open it again to retry.",
  "seo.cannibalization.empty.title": "Nothing competing",
  "seo.cannibalization.empty.description": "No keyword had {threshold} or more of your pages showing up on the same day.",

  "seo.status.READY": "Ready",
  "seo.status.SYNCING": "Importing",
  "seo.status.ACTION_REQUIRED": "Needs attention",
  "seo.status.NO_DATA": "No data",
  "seo.status.ERROR": "Error",

  "seo.error.PERMISSION_DENIED": "The service account is not allowed to read this property. Add it as an owner in Search Console.",
  "seo.error.PROPERTY_NOT_FOUND": "That property does not exist in this service account's Search Console.",
  "seo.error.API_NOT_ENABLED": "The Search Console API is not enabled in the Google Cloud project.",
  "seo.error.INVALID_KEY": "The key is missing, expired, or cannot be read.",
  "seo.error.QUOTA_EXCEEDED": "Google is refusing calls for now because the quota ran out. It clears on its own.",
  "seo.error.RATE_LIMITED": "Too many calls in a short time. It clears on its own in a few seconds.",
  "seo.error.PROVIDER_UNAVAILABLE": "Google did not answer. It is usually temporary.",
  "seo.error.UNEXPECTED": "Google answered something we do not know how to read.",

  "seo.delta.insufficient": "Not enough data: fewer than {minimum} impressions across the {days}-day window, so the average position describes who searched rather than where the site ranks.",
  "seo.delta.insufficient.short": "Not enough data",
  "seo.delta.explained": "From {previous} to {current}, comparing the last {days} days against the {days} before.",

  "seo.column.keyword": "Keyword",
  "seo.column.position": "Position",
  "seo.column.delta": "Δ {days}d",
  "seo.column.impressions": "Impressions",
  "seo.column.clicks": "Clicks",
  "seo.column.ctr": "CTR",
  "seo.column.page": "Page",
  "seo.column.queries": "Keywords",
  "seo.column.competing": "Competing same day",
  "seo.column.pagesInPeriod": "Pages in the period",
  "seo.column.severity": "Severity",
  "seo.column.rotation": "Rotation",

  "seo.severity.moderate": "Moderate",
  "seo.severity.high": "High",
  "seo.severity.severe": "Severe",
  "seo.severity.help": "How many of your pages show up on the same day for the same search. Moderate is {threshold}, high is 4 or 5, severe is 6 or more. At {threshold} it is often harmless — a category page and a detail page — so look before you change anything; at 6 it is a whole section competing against itself.",

  "seo.rotation.stable": "Always the same pages",
  "seo.rotation.rotating": "The winning page changes",
  "seo.rotation.help": "Whether the same pages compete every day or the set keeps changing. They are two different problems: with a stable set, pick one page and redirect the rest. With rotation, which page wins is also moving, and that shifts the keyword's average position on its own, without anyone touching the site.",
  "seo.column.share": "Share",
  "seo.column.band": "Position band",
  "seo.column.reach": "Reach",
  "seo.column.tracked": "Tracking",

  "seo.band.top3": "Top 3",
  "seo.band.firstPage": "First page",
  "seo.band.nearFirstPage": "Close to page one",
  "seo.band.beyond": "Page three and beyond",

  "seo.reach.withClicks": "With clicks",
  "seo.reach.noClicks": "Reach without clicks",
  "seo.reach.lowReach": "Too few impressions",

  "seo.tracked.yes": "Tracked",
  "seo.tracked.no": "Not tracked",

  "seo.keywords.title": "Keywords",
  "seo.keywords.description": "Which searches this site shows up for, over the last {days} days.",
  "seo.keywords.unit": "keywords",
  "seo.keywords.unitSingular": "keyword",
  "seo.keywords.caption": "Search queries this site appeared for, with their position change.",
  "seo.keywords.searchLabel": "Search keywords",
  "seo.keywords.searchPlaceholder": "Filter by text…",
  "seo.keywords.empty.title": "No keywords yet",
  "seo.keywords.empty.description": "Either the history has not been imported or Google reported nothing for this period.",

  "seo.connection.title": "Connection",
  "seo.connection.description": "Whether this module can read from Google, and what it has imported so far.",
  "seo.connection.state.title": "Module state",
  "seo.connection.state.description": "Reading works with the same Google credential as Search Console.",

  "seo.import.action": "Import history",
  "seo.import.again": "Reimport from scratch",
  "seo.import.description": "Pick how far back to go. It runs in the background and you can keep using the rest of the platform.",
  "seo.import.destructiveWarning": "This deletes everything this module stored for this site and imports it again. Nothing else is touched: coverage, sitemaps, and batches stay as they are.",
  "seo.import.confirm": "Import",
  "seo.import.confirmAgain": "Delete and import again",
  "seo.import.pending": "Starting…",
  "seo.import.months.one": "Last month",
  "seo.import.months.other": "Last {count} months",
  "seo.import.firstHelp": "Twelve months covers the whole comparison range with room to spare.",
  "seo.import.replaceHelp": "Everything stored for this site is replaced by what Google returns now.",

  "seo.runs.title": "Sync history",
  "seo.runs.description": "Every import and every daily run, with what each one brought.",
  "seo.runs.truncated": "Showing the latest {shown} of {total} runs.",
  "seo.runs.empty.title": "Nothing has run yet",
  "seo.runs.empty.description": "The first import will show up here.",

  "seo.run.state.QUEUED": "Queued",
  "seo.run.state.RUNNING": "Running",
  "seo.run.state.COMPLETED": "Completed",
  "seo.run.state.FAILED": "Failed",
  "seo.run.kind.BACKFILL": "History import",
  "seo.run.kind.DAILY_SYNC": "Daily sync",
  "seo.run.range": "{start} to {end}",
  "seo.run.rows": "{rows} rows",
  "seo.run.notStarted": "Not started",

  "seo.keyword.description": "How this search has performed over the last {days} days.",
  "seo.keyword.track": "Track",
  "seo.keyword.untrack": "Stop tracking",
  "seo.keyword.noData.title": "Google has no data for this keyword",
  "seo.keyword.noData.description": "It is tracked as a target, and future syncs will fill it in if the site starts showing up for it. No data does not mean the site never appeared: Google hides queries with very few impressions.",
  "seo.keyword.summary": "Summary",
  "seo.keyword.summaryHelp": "Totals for the last {days} days. Position is weighted by impressions.",
  "seo.keyword.evolution": "Evolution",
  "seo.keyword.evolutionHelp": "The position axis is inverted, because in Google a lower number is a better spot. Days Google did not report leave a gap instead of a line.",
  "seo.keyword.pages": "Pages ranking for it",
  "seo.keyword.pagesHelp": "Share is measured across these pages, not against the keyword total: a single search where two pages appeared leaves two rows here and one impression in reality.",
  "seo.keyword.pages.empty.title": "No pages recorded",
  "seo.keyword.pages.empty.description": "Google reported this keyword without telling us which page appeared.",
  "seo.share": "{share}% of the total",

  "seo.pages.title": "Pages",
  "seo.pages.description": "Which pages of this site bring traffic, over the last {days} days.",
  "seo.pages.unit": "pages",
  "seo.pages.unitSingular": "page",
  "seo.pages.caption": "Pages of this site that appeared in Google Search.",
  "seo.pages.searchLabel": "Search pages",
  "seo.pages.searchPlaceholder": "Filter by address…",
  "seo.pages.empty.title": "No pages yet",
  "seo.pages.empty.description": "Either the history has not been imported or Google reported nothing for this period.",

  "seo.page.title": "Page",
  "seo.page.description": "Which searches this page shows up for, over the last {days} days.",
  "seo.page.open": "Open page",
  "seo.page.address": "Address",
  "seo.page.keywords": "Keywords it appears for",
  "seo.page.keywordsHelp": "Read the other way around: the same data, from the page's side instead of the search's."
}
