'Site health', 'subheading' => 'What is wrong with the public site and cannot be seen from here.', 'all_clear' => 'All clear. Nothing to fix.', 'problem_summary' => '{1}1 thing to look at|[2,*]:count things to look at', 'problem_hint' => 'The site lives elsewhere, so these faults do not show up while editing — they show up while visiting.', 'passing' => '{1}1 check passing|[2,*]:count checks passing', 'and_more' => 'and :count more', 'refreshed' => 'Checks refreshed', 'severity' => [ 'ok' => 'Fine', 'warning' => 'Warning', 'error' => 'Fault', ], 'actions' => [ 'refresh' => 'Check again', 'go_fix' => 'Go and fix it', ], 'bits' => [ 'description' => 'no meta description', 'cover' => 'no cover', 'gallery_image' => 'Gallery image with no description', 'itself' => 'itself', ], 'checks' => [ 'missing-slugs' => [ 'title' => 'Missing slugs', 'ok' => 'Everything translated has its slug.', 'problem' => '{1}1 record is translated into a language but has no slug in it, so its URL in that language either does not exist or 404s.|[2,*]:count records are translated into a language without a slug in it, so those URLs either do not exist or 404.', ], 'duplicate-slugs' => [ 'title' => 'Duplicate slugs', 'ok' => 'Every URL resolves to a single record.', 'problem' => '{1}1 slug is repeated within the same language: the API resolves that URL to whichever record it reaches first.|[2,*]:count slugs are repeated within the same language: the API resolves those URLs to whichever record it reaches first.', ], 'broken-images' => [ 'title' => 'Broken images', 'ok' => 'Every image file is where it should be.', 'problem' => '{1}1 image the site is publishing no longer exists on disk, or could not be read.|[2,*]:count images the site is publishing no longer exist on disk, or could not be read.', ], 'missing-translations' => [ 'title' => 'Untranslated content', 'ok' => 'Everything published exists in all three languages.', 'problem' => '{1}1 published record is missing a translation, so that language of the site goes without it.|[2,*]:count published records are missing a translation, so those languages of the site go without them.', ], 'images-without-alt' => [ 'title' => 'Images with no description', 'ok' => 'Every published image has alt text.', 'problem' => '{1}1 published image has no alt text: anyone who cannot see it does not know it is there.|[2,*]:count published images have no alt text: anyone who cannot see them does not know they are there.', ], 'incomplete-seo' => [ 'title' => 'Incomplete entries', 'ok' => 'Everything published has a description and a cover.', 'problem' => '{1}1 published record has nothing to show in a search result or when the link is pasted into a chat.|[2,*]:count published records have nothing to show in a search result or when the link is pasted into a chat.', ], 'expired-calls' => [ 'title' => 'Expired calls', 'ok' => 'No open call is past its closing date.', 'problem' => '{1}1 call is still marked open with its closing date past. It has already dropped off the site, but it pads the panel\'s counter.|[2,*]:count calls are still marked open with their closing date past. They have already dropped off the site, but they pad the panel\'s counter.', ], 'unanswered-submissions' => [ 'title' => 'People waiting for an answer', 'ok' => 'Nobody has been waiting more than a week.', 'problem' => '{1}1 person wrote in over a week ago and still has no answer.|[2,*]:count people wrote in over a week ago and still have no answer.', ], 'stalled-media' => [ 'title' => 'Unprocessed images', 'ok' => 'No image is waiting to be processed.', 'problem' => '{1}1 image has been waiting over an hour: most likely neither a queue worker nor the scheduler is running.|[2,*]:count images have been waiting over an hour: most likely neither a queue worker nor the scheduler is running.', ], 'services-without-work' => [ 'title' => 'Services with nothing behind them', 'ok' => 'Every published service shows real work.', 'problem' => '{1}1 published service links no published project: that is a promise, not an offer.|[2,*]:count published services link no published project: those are promises, not offers.', ], 'clients-without-logo' => [ 'title' => 'Clients with no logo', 'ok' => 'Every client on the wall has a logo.', 'problem' => '{1}1 client appears on the wall of logos without one: a hole that looks like a mistake.|[2,*]:count clients appear on the wall of logos without one: holes that look like mistakes.', ], 'testimonials-missing-original' => [ 'title' => 'Quotes without the original', 'ok' => 'Every quote carries the words that were actually said.', 'problem' => '{1}1 testimonial has no quote in the language it was given in: the site is publishing a translation of something nobody can check.|[2,*]:count testimonials have no quote in the language they were given in: the site is publishing translations of things nobody can check.', ], 'talks-without-speaker' => [ 'title' => 'Talks with no speaker', 'ok' => 'Every talk credits somebody.', 'problem' => '{1}1 talk does not say who gave it, so it appears on nobody\'s profile.|[2,*]:count talks do not say who gave them, so they appear on nobody\'s profile.', ], 'broken-redirects' => [ 'title' => 'Broken redirects', 'ok' => 'No redirect loops or chains into another.', 'problem' => '{1}1 redirect points at itself or at another redirect: the browser loops, or pays an extra hop.|[2,*]:count redirects point at themselves or at another redirect: the browser loops, or pays extra hops.', ], 'redirects-to-nowhere' => [ 'title' => 'Redirects to nowhere', 'ok' => 'Every redirect lands on a page that exists.', 'problem' => '{1}1 redirect lands on an address that no longer answers: worse than the 404 it was meant to prevent.|[2,*]:count redirects land on addresses that no longer answer: worse than the 404s they were meant to prevent.', ], 'missing-urls' => [ 'title' => 'Addresses nobody can reach', 'ok' => 'No broken address is waiting for a redirect.', 'problem' => '{1}1 address returns 404 and has been asked for more than once: every visitor arriving that way is lost.|[2,*]:count addresses return 404 and have been asked for more than once: every visitor arriving that way is lost.', ], 'stale-reviews' => [ 'title' => 'Reviews nobody answered', 'ok' => 'Nobody is waiting for a review.', 'problem' => '{1}1 thing has been waiting for review for over a week: whoever wrote it thinks something is happening.|[2,*]:count things have been waiting for review for over a week: whoever wrote them thinks something is happening.', ], 'stale-translations' => [ 'title' => 'Translations left behind', 'ok' => 'No translation has fallen behind its original.', 'problem' => '{1}1 translated record says something its original stopped saying: the translation exists, so nothing else flags it.|[2,*]:count translated records say something their originals stopped saying: the translations exist, so nothing else flags them.', ], 'stale-repositories' => [ 'title' => 'Repositories that will not sync', 'ok' => 'Every repository is syncing.', 'problem' => '{1}1 repository has failed several attempts. The site keeps showing its last figures, which are no longer true.|[2,*]:count repositories have failed several attempts. The site keeps showing their last figures, which are no longer true.', ], ], ];