CI (.github/workflows/tests.yml) reuses docker-compose.test.yml verbatim for the Postgres job rather than re-describing that environment in YAML, so the Docker image stays the single source of truth for it. Fixes a real mismatch found while wiring PHP versions into the workflow: composer.json declared "php": "^8.3", but the locked Symfony packages require >=8.4.1 — installing on 8.3 would fail at `composer install`, exactly what the Dockerfile's own comment already warned about. Bumped the constraint and resynced composer.lock's content-hash (no package versions changed). The pre-commit hook (.githooks/pre-commit, activated via `git config core.hooksPath` in post-autoload-dump) runs `pint --dirty --test` and refuses to commit unformatted files rather than silently rewriting them. The accessibility pass only touches this app's own hand-written Blade views, not Filament's components: aria-hidden on icons that repeat adjacent text, an aria-label on the one icon that is the only signal of a health check's severity, rel="noopener" and a labelled announcement on preview links that open in a new tab. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
845 lines
31 KiB
PHP
845 lines
31 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
return [
|
|
'untitled' => 'Untitled',
|
|
|
|
'duplicates' => [
|
|
'title' => 'Similar title',
|
|
'body' => 'Something very similar already exists: :titles',
|
|
'open' => 'Open existing record',
|
|
],
|
|
|
|
'sessions' => [
|
|
'title' => 'Sessions',
|
|
'this_one' => 'This session',
|
|
'unknown_device' => 'Unknown device',
|
|
'fields' => [
|
|
'ip_address' => 'IP address',
|
|
'device' => 'Device',
|
|
'last_activity' => 'Last activity',
|
|
],
|
|
'actions' => [
|
|
'revoke' => 'Sign out',
|
|
],
|
|
'revoked' => 'Session ended. That connection stops being valid on its next request.',
|
|
'empty' => [
|
|
'heading' => 'No open sessions',
|
|
'description' => 'Nobody has signed in with this account, or it has been idle for a while.',
|
|
],
|
|
],
|
|
|
|
'environment' => [
|
|
'production' => 'Production — this is real',
|
|
'other' => ':name environment',
|
|
],
|
|
|
|
'concurrency' => [
|
|
'title' => 'Not saved',
|
|
'body' => 'Somebody else changed this while you were editing it. Reload the page to see the current version — saving now would overwrite that change.',
|
|
'body_with_author' => ':name changed this while you were editing it. Reload the page to see their version — saving now would overwrite that change.',
|
|
],
|
|
|
|
'presence' => [
|
|
'title' => 'Somebody else has this open',
|
|
'body' => 'Also editing this right now: :names.',
|
|
],
|
|
|
|
'groups' => [
|
|
'collective' => 'Collective',
|
|
'content' => 'Content',
|
|
'administration' => 'Administration',
|
|
],
|
|
|
|
'language' => [
|
|
'label' => 'Language',
|
|
'switch' => 'Change language',
|
|
],
|
|
|
|
'pages' => [
|
|
'label' => 'Page',
|
|
'plural' => 'Pages',
|
|
'sections' => [
|
|
'content' => 'Content',
|
|
'content_hint' => 'Each tab is a language. The primary language is required; the others fall back to it when left empty.',
|
|
'publishing' => 'Publishing',
|
|
'seo' => 'SEO',
|
|
'seo_hint' => 'Metadata for search engines and social networks.',
|
|
],
|
|
'fields' => [
|
|
'title' => 'Title',
|
|
'slug' => 'Slug',
|
|
'excerpt' => 'Excerpt',
|
|
'body' => 'Body',
|
|
'meta_title' => 'Meta title',
|
|
'meta_description' => 'Meta description',
|
|
'category' => 'Category',
|
|
'author' => 'Author',
|
|
'status' => 'Status',
|
|
'featured_image' => 'Featured image',
|
|
'featured_image_alt' => 'Alt text',
|
|
'featured_image_alt_hint' => 'What the image shows, for someone who cannot see it. Leave empty if it is purely decorative.',
|
|
'is_featured' => 'Featured',
|
|
'published_at' => 'Published at',
|
|
'published_at_hint' => 'With a future date the page stays off the site until it arrives.',
|
|
'unpublish_at' => 'Take down on',
|
|
'unpublish_at_hint' => 'Optional. When it arrives the page drops off the site by itself. For notices with an expiry.',
|
|
'translations' => 'Translations',
|
|
],
|
|
'filters' => [
|
|
'translated_in' => 'Translated into',
|
|
'missing_translation' => 'Missing translation for',
|
|
],
|
|
'actions' => [
|
|
'publish' => 'Publish',
|
|
'unpublish' => 'Unpublish',
|
|
],
|
|
],
|
|
|
|
'categories' => [
|
|
'label' => 'Category',
|
|
'plural' => 'Categories',
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'slug' => 'Slug',
|
|
'description' => 'Description',
|
|
'color' => 'Colour',
|
|
'position' => 'Order',
|
|
'is_visible' => 'Visible',
|
|
'pages_count' => 'Pages',
|
|
],
|
|
],
|
|
|
|
'users' => [
|
|
'label' => 'User',
|
|
'plural' => 'Users',
|
|
'sections' => [
|
|
'identity' => 'Identity',
|
|
'identity_hint' => 'Managed by the OAuth server. Refreshed automatically on every sign-in.',
|
|
'access' => 'Access and permissions',
|
|
'access_hint' => 'Managed by this application.',
|
|
],
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'email' => 'Email',
|
|
'oauth_id' => 'OAuth server ID',
|
|
'roles' => 'Roles',
|
|
'locale' => 'Preferred language',
|
|
'is_active' => 'Active',
|
|
'last_login_at' => 'Last sign-in',
|
|
'remote_roles' => 'Remote roles',
|
|
'never' => 'Never',
|
|
],
|
|
'actions' => [
|
|
'activate' => 'Activate',
|
|
'deactivate' => 'Deactivate',
|
|
],
|
|
],
|
|
|
|
'roles' => [
|
|
'label' => 'Role',
|
|
'plural' => 'Roles',
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'permissions' => 'Permissions',
|
|
'users_count' => 'Users',
|
|
],
|
|
'protected' => 'Protected role: it cannot be deleted.',
|
|
'select_all' => 'Select all',
|
|
],
|
|
|
|
'permissions' => [
|
|
'groups' => [
|
|
'general' => 'General',
|
|
'projects' => 'Projects',
|
|
'members' => 'Members',
|
|
'services' => 'Services',
|
|
'clients' => 'Clients',
|
|
'testimonials' => 'Testimonials',
|
|
'talks' => 'Talks',
|
|
'technologies' => 'Technologies',
|
|
'calls' => 'Calls for help',
|
|
'applications' => 'Inbox',
|
|
'repositories' => 'Repositories',
|
|
'media' => 'Media',
|
|
'redirects' => 'Redirects',
|
|
'pages' => 'Pages',
|
|
'categories' => 'Categories',
|
|
'users' => 'Users',
|
|
'roles' => 'Roles',
|
|
'settings' => 'Settings',
|
|
],
|
|
'abilities' => [
|
|
'sync' => 'Sync',
|
|
'maintenance' => 'Toggle maintenance mode',
|
|
'panel_access' => 'Access the panel',
|
|
'view_any' => 'List',
|
|
'view' => 'View details',
|
|
'create' => 'Create',
|
|
'update' => 'Edit',
|
|
'delete' => 'Delete',
|
|
'restore' => 'Restore',
|
|
'force_delete' => 'Delete permanently',
|
|
'publish' => 'Publish',
|
|
],
|
|
],
|
|
|
|
'actions' => [
|
|
'duplicate' => 'Duplicate',
|
|
'duplicate_heading' => 'Duplicate this record',
|
|
'duplicated' => 'Duplicated. Give it a slug and a date before publishing it.',
|
|
],
|
|
|
|
'preview' => [
|
|
'label' => 'Preview',
|
|
'heading' => 'Preview links',
|
|
'hint' => 'Shareable, and they expire in :hours hours. Each one only works for this record.',
|
|
'open' => 'Open',
|
|
'opens_new_tab' => '(opens in a new tab)',
|
|
'link_for' => 'Preview link for :language',
|
|
],
|
|
|
|
'trash' => [
|
|
'title' => 'Trash',
|
|
'subheading' => 'Everything deleted, together, with the undo button next to it.',
|
|
'empty' => 'The trash is empty.',
|
|
'deleted_at' => 'Deleted :when',
|
|
'restore' => 'Restore',
|
|
'erase' => 'Erase',
|
|
'erase_confirm' => 'This cannot be undone. Are you sure?',
|
|
'restored' => 'Restored',
|
|
'erased' => 'Erased for good',
|
|
],
|
|
|
|
'today' => [
|
|
'all_clear' => 'Nothing is waiting',
|
|
'all_clear_hint' => 'Nobody unanswered, nothing half-finished.',
|
|
],
|
|
|
|
'widgets' => [
|
|
'stats' => [
|
|
'pages' => 'Pages',
|
|
'published' => 'Published',
|
|
'users' => 'Active users',
|
|
'missing_translations' => 'Untranslated',
|
|
'missing_translations_hint' => 'Pages missing at least one language',
|
|
'projects' => 'Projects',
|
|
'projects_description' => 'Published projects',
|
|
'active_projects' => 'Active projects',
|
|
'active_projects_description' => 'Seeking contributors',
|
|
'members' => 'Members',
|
|
'members_description' => 'Active collective members',
|
|
'open_calls' => 'Open calls',
|
|
'open_calls_description' => 'Seeking participants',
|
|
'good_first_issues' => 'Good first issues',
|
|
'good_first_issues_description' => 'Available to claim',
|
|
'help_wanted' => 'Help wanted',
|
|
'help_wanted_description' => 'Open issues',
|
|
],
|
|
'growth_chart' => 'Growth over time',
|
|
'growth' => [
|
|
'projects' => 'Projects',
|
|
'members' => 'Members',
|
|
'issues' => 'Good first issues',
|
|
],
|
|
'languages_chart' => 'Languages distribution',
|
|
'languages' => [
|
|
'repositories' => 'Repositories',
|
|
],
|
|
],
|
|
|
|
'projects' => [
|
|
'label' => 'Project',
|
|
'plural' => 'Projects',
|
|
'sections' => [
|
|
'content' => 'Content',
|
|
'writeup' => 'Decisions and postmortem',
|
|
'writeup_hint' => 'What a consultancy cannot publish and you can. This is the content other developers actually read.',
|
|
'details' => 'Details',
|
|
],
|
|
'fields' => [
|
|
'title' => 'Title',
|
|
'slug' => 'Slug',
|
|
'tagline' => 'Tagline',
|
|
'description' => 'Description',
|
|
'decisions' => 'Technical decisions',
|
|
'decisions_hint' => 'Why you chose what you chose, and what you ruled out.',
|
|
'postmortem' => 'Postmortem',
|
|
'postmortem_hint' => 'What went wrong and what you learned. It does not have to be a success story.',
|
|
'status' => 'Status',
|
|
'published_at' => 'Published at',
|
|
'unpublish_at' => 'Take down on',
|
|
'unpublish_at_hint' => 'Optional. When it arrives the project drops off the site by itself.',
|
|
'published_at_hint' => 'Empty = not visible on the public site.',
|
|
'technologies' => 'Technologies',
|
|
'lead' => 'Lead',
|
|
'members' => 'Contributors',
|
|
'client' => 'Who for',
|
|
'client_hint' => 'The NGO, association or organisation it was built for. If it is not on the list, you can create it right here.',
|
|
'services' => 'Services',
|
|
'demo_url' => 'Demo',
|
|
'cover_image' => 'Cover image',
|
|
'cover_image_alt' => 'Alt text',
|
|
'cover_image_alt_hint' => 'What the cover shows, for someone who cannot see it. Leave empty if it is purely decorative.',
|
|
'started_at' => 'Started',
|
|
'ended_at' => 'Ended',
|
|
'is_featured' => 'Featured',
|
|
'needs_help' => 'Looking for help',
|
|
'needs_help_hint' => 'Surfaces it in the contribute section of the site.',
|
|
],
|
|
'filters' => ['unpublished' => 'Unpublished'],
|
|
'actions' => ['publish' => 'Publish'],
|
|
],
|
|
|
|
'members' => [
|
|
'label' => 'Member',
|
|
'plural' => 'Members',
|
|
'sections' => [
|
|
'profile' => 'Public profile',
|
|
'profile_hint' => 'This is each person\'s shop window — the currency volunteer work is paid in.',
|
|
'membership' => 'Membership',
|
|
],
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'slug' => 'Slug',
|
|
'headline' => 'Headline',
|
|
'bio' => 'Bio',
|
|
'avatar' => 'Photo',
|
|
'avatar_hint' => 'The alt text is the person\'s name, so there is nothing to write.',
|
|
'github_username' => 'GitHub username',
|
|
'user' => 'Panel account',
|
|
'user_hint' => 'Optional. Most members never need admin access.',
|
|
'technologies' => 'Technologies',
|
|
'projects' => 'Projects',
|
|
'is_public' => 'Visible on the site',
|
|
'is_founder' => 'Founder',
|
|
'position' => 'Order',
|
|
'joined_at' => 'Joined',
|
|
'left_at' => 'Left',
|
|
'left_at_hint' => 'Removes them from the current roster but keeps their history.',
|
|
],
|
|
'filters' => ['current' => 'Current only'],
|
|
],
|
|
|
|
'technologies' => [
|
|
'label' => 'Technology',
|
|
'plural' => 'Technologies',
|
|
'off_radar' => 'Off the radar',
|
|
'sections' => ['prose' => 'Description and radar note'],
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'slug' => 'Slug',
|
|
'category' => 'Category',
|
|
'radar_ring' => 'Radar ring',
|
|
'radar_ring_hint' => 'Empty = usable as a tag but kept off the public radar.',
|
|
'radar_note' => 'Radar note',
|
|
'radar_note_hint' => 'Why it sits in that ring. This is the part people read.',
|
|
'description' => 'Description',
|
|
'color' => 'Colour',
|
|
'logo' => 'Logo',
|
|
'logo_hint' => 'Preferably SVG, or PNG with a transparent background. It shows on the radar and on the cards.',
|
|
'website' => 'Website',
|
|
'position' => 'Order',
|
|
'projects' => 'Projects',
|
|
'members' => 'Members',
|
|
],
|
|
],
|
|
|
|
'calls' => [
|
|
'label' => 'Call for help',
|
|
'plural' => 'Calls for help',
|
|
'no_project' => 'General',
|
|
'sections' => [
|
|
'commitment' => 'Commitment',
|
|
'commitment_hint' => 'Time is the scarce resource here, not money. Being specific is what makes someone decide.',
|
|
],
|
|
'fields' => [
|
|
'title' => 'Title',
|
|
'slug' => 'Slug',
|
|
'description' => 'Description',
|
|
'what_you_get' => 'What you get',
|
|
'what_you_get_hint' => 'Learning, portfolio, references, mentoring. Saying it openly helps.',
|
|
'status' => 'Status',
|
|
'project' => 'Project',
|
|
'project_hint' => 'Empty = a general call from the collective.',
|
|
'technologies' => 'Technologies',
|
|
'hours_per_week' => 'Hours per week',
|
|
'duration_weeks' => 'Weeks',
|
|
'seniority' => 'Level',
|
|
'commitment' => 'Commitment',
|
|
'opens_at' => 'Opens',
|
|
'closes_at' => 'Closes',
|
|
],
|
|
'seniority' => ['any' => 'Any', 'junior' => 'Junior', 'mid' => 'Mid', 'senior' => 'Senior'],
|
|
'commitment_summary' => '{0}:hoursh/week|{1}:hoursh/week · :weeks week|[2,*]:hoursh/week · :weeks weeks',
|
|
],
|
|
|
|
'applications' => [
|
|
'label' => 'Submission',
|
|
'plural' => 'Inbox',
|
|
'general_enquiry' => 'General message',
|
|
'badge_tooltip' => 'People waiting for an answer',
|
|
'saved' => 'Notes saved',
|
|
'reply_subject' => 'Re: :subject',
|
|
'sections' => [
|
|
'message' => 'What they wrote',
|
|
'internal' => 'Internal follow-up',
|
|
'internal_hint' => 'Only you see this. The sender never does.',
|
|
],
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'email' => 'E-mail',
|
|
'organisation' => 'Organisation',
|
|
'kind' => 'Kind',
|
|
'subject' => 'About',
|
|
'call' => 'Call',
|
|
'hours_per_week' => 'Hours/week',
|
|
'hours_asked' => 'The call asked for :hours h/week',
|
|
'message' => 'Message',
|
|
'links' => 'Links',
|
|
'link_name' => 'Name',
|
|
'link_url' => 'URL',
|
|
'status' => 'Status',
|
|
'received_at' => 'Received',
|
|
'handled_by' => 'Handled by',
|
|
'handled_at' => 'Handled on',
|
|
'locale' => 'Wrote in',
|
|
'notes' => 'Notes',
|
|
'notes_empty' => 'No notes',
|
|
'notes_hint' => 'For the rest of the team: what was discussed, where it was left.',
|
|
],
|
|
'actions' => [
|
|
'group' => 'Mark as',
|
|
'open' => 'Open submission',
|
|
'reply' => 'Reply',
|
|
'notes' => 'Notes',
|
|
'contacted' => 'Contacted',
|
|
'accepted' => 'Accepted',
|
|
'declined' => 'Declined',
|
|
'spam' => 'Spam',
|
|
],
|
|
'tabs' => [
|
|
'pending' => 'Unanswered',
|
|
'contribute' => 'Offering help',
|
|
'request' => 'Asking for help',
|
|
'all' => 'All',
|
|
'spam' => 'Spam',
|
|
],
|
|
'empty' => [
|
|
'heading' => 'Nothing to answer',
|
|
'description' => 'Whatever people send from the public site arrives here.',
|
|
'call_heading' => 'Nobody has written yet',
|
|
],
|
|
'notification' => [
|
|
'contribute' => ':name wants to help out',
|
|
'request' => ':name is asking for help with a project',
|
|
],
|
|
'mail' => [
|
|
'greeting' => 'Somebody is waiting for an answer.',
|
|
'from' => 'From :name (:email)',
|
|
],
|
|
],
|
|
|
|
'publishing' => [
|
|
'published_count' => '{0}Nothing to publish: already live.|{1}Published 1 record.|[2,*]Published :count records.',
|
|
'scheduled' => 'Scheduled',
|
|
'expired' => 'Expired',
|
|
'expired_at' => 'Expired on :time',
|
|
'expires_in' => 'Expires :time',
|
|
'live' => 'Live',
|
|
'unpublished' => 'Unpublished',
|
|
],
|
|
|
|
'gallery' => [
|
|
'title' => 'Gallery',
|
|
'missing_alt' => 'Not described',
|
|
'pending' => 'Processing',
|
|
'fields' => [
|
|
'image' => 'Image',
|
|
'alt' => 'Alt text',
|
|
'alt_hint' => 'What it shows, for someone who cannot see it.',
|
|
'caption' => 'Caption',
|
|
'caption_hint' => 'Shown to everyone. "Before" and "after" go here.',
|
|
'size' => 'Size',
|
|
],
|
|
'actions' => [
|
|
'add' => 'Add image',
|
|
],
|
|
'empty' => [
|
|
'heading' => 'No images yet',
|
|
'description' => 'Screenshots, before and after, whatever makes the project understandable. Drag to reorder.',
|
|
],
|
|
],
|
|
|
|
'services' => [
|
|
'label' => 'Service',
|
|
'plural' => 'Services',
|
|
'no_projects' => 'Nothing behind it: that is a promise, not an offer.',
|
|
'sections' => [
|
|
'evidence' => 'What backs it',
|
|
'evidence_hint' => 'A service that cannot point at real work is a promise. Link the projects that prove it.',
|
|
'seo' => 'SEO',
|
|
],
|
|
'fields' => [
|
|
'title' => 'Title',
|
|
'slug' => 'Slug',
|
|
'tagline' => 'One-line summary',
|
|
'tagline_hint' => 'One line. It is what the card on the landing page shows.',
|
|
'description' => 'Description',
|
|
'projects' => 'Projects',
|
|
'technologies' => 'Technologies',
|
|
'icon' => 'Icon',
|
|
'icon_hint' => 'A Heroicons name, for example heroicon-o-code-bracket.',
|
|
'position' => 'Order',
|
|
'is_published' => 'Published',
|
|
'is_featured' => 'Featured',
|
|
'is_featured_hint' => 'So the landing page can pick a few.',
|
|
'published_at' => 'Publish on',
|
|
'published_at_hint' => 'With a future date it stays off the site until it arrives.',
|
|
'unpublish_at' => 'Take down on',
|
|
'unpublish_at_hint' => 'Optional. When it arrives it drops off the site by itself.',
|
|
'meta_title' => 'Meta title',
|
|
'meta_description' => 'Meta description',
|
|
'translations' => 'Translations',
|
|
],
|
|
|
|
'actions' => [
|
|
'publish' => 'Publish',
|
|
],
|
|
],
|
|
|
|
'clients' => [
|
|
'label' => 'Client',
|
|
'plural' => 'Clients',
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'slug' => 'Slug',
|
|
'sector' => 'Sector',
|
|
'logo' => 'Logo',
|
|
'logo_hint' => 'Preferably SVG, or PNG with a transparent background.',
|
|
'url' => 'Website',
|
|
'projects' => 'Projects',
|
|
'is_public' => 'May be shown',
|
|
'is_public_hint' => 'Uncheck it if the organisation would rather not appear on the site.',
|
|
'position' => 'Order',
|
|
],
|
|
'filters' => [
|
|
'without_logo' => 'Without a logo',
|
|
],
|
|
],
|
|
|
|
'testimonials' => [
|
|
'label' => 'Testimonial',
|
|
'plural' => 'Testimonials',
|
|
'sections' => [
|
|
'quote' => 'The quote',
|
|
'quote_hint' => 'Write what they actually said, in the language they said it in. The other tabs are your translations, and the site will say so.',
|
|
'author' => 'Who said it',
|
|
'about' => 'What it is about',
|
|
'about_hint' => 'Attach it to a client, a project or a service, so the site asks for the right ones per page instead of keeping a loose list.',
|
|
],
|
|
'fields' => [
|
|
'quote' => 'Quote',
|
|
'original_locale' => 'Original language',
|
|
'original_locale_hint' => 'The language it was said in. Translating a quote puts words in somebody\'s mouth, so the site says as much.',
|
|
'author_name' => 'Name',
|
|
'author_role' => 'Role',
|
|
'avatar' => 'Photo',
|
|
'client' => 'Client',
|
|
'project' => 'Project',
|
|
'service' => 'Service',
|
|
'is_public' => 'Visible',
|
|
'position' => 'Order',
|
|
'given_at' => 'Date',
|
|
],
|
|
],
|
|
|
|
'talks' => [
|
|
'label' => 'Talk',
|
|
'plural' => 'Talks',
|
|
'fields' => [
|
|
'title' => 'Title',
|
|
'title_hint' => 'Not translated: it is the name of a talk given once, in one language.',
|
|
'language' => 'Language',
|
|
'summary' => 'Summary',
|
|
'event' => 'Event',
|
|
'city' => 'City',
|
|
'held_at' => 'Date',
|
|
'video_url' => 'Video',
|
|
'slides_url' => 'Slides',
|
|
'member' => 'Speaker',
|
|
'member_hint' => 'It will show on their profile too, without writing it twice.',
|
|
'project' => 'Project',
|
|
'is_public' => 'Visible',
|
|
],
|
|
],
|
|
|
|
'repositories' => [
|
|
'label' => 'Repository',
|
|
'plural' => 'Repositories',
|
|
'never_synced' => 'Never',
|
|
'fields' => [
|
|
'provider' => 'Provider',
|
|
'full_name' => 'Repository',
|
|
'full_name_hint' => 'Format "owner/repo". Everything else is fetched automatically.',
|
|
'project' => 'Project',
|
|
'is_primary' => 'Primary',
|
|
'is_primary_hint' => 'The one representing the project when there are several.',
|
|
'show_publicly' => 'Visible on the site',
|
|
'language' => 'Language',
|
|
'contributors' => 'Contributors',
|
|
'good_first_issues' => 'Good first issues',
|
|
'pushed_at' => 'Last push',
|
|
'last_synced_at' => 'Synced',
|
|
],
|
|
'filters' => ['failing' => 'Failing', 'dormant' => 'Dormant'],
|
|
'actions' => ['sync' => 'Sync', 'sync_selected' => 'Sync selected'],
|
|
'notifications' => [
|
|
'synced' => 'Repository synced',
|
|
'synced_body' => ':stars★ · :issues good first issues',
|
|
'sync_failed' => 'Sync failed',
|
|
'queued' => ':count repositories queued',
|
|
],
|
|
],
|
|
|
|
'revisions' => [
|
|
'title' => 'History',
|
|
'system' => 'The system',
|
|
'before' => 'Before',
|
|
'after' => 'After',
|
|
'no_changes' => 'This entry records no field changes.',
|
|
'restored' => 'Values restored',
|
|
'restore_confirm' => 'The fields go back to what they said at that moment. Restoring is recorded too, so it can always be undone.',
|
|
'diff_heading' => 'Change by :author · :when',
|
|
'fields' => [
|
|
'event' => 'What happened',
|
|
'author' => 'Who',
|
|
'fields' => 'Fields',
|
|
'when' => 'When',
|
|
],
|
|
'events' => [
|
|
'created' => 'Created',
|
|
'updated' => 'Edited',
|
|
'published' => 'Published',
|
|
'unpublished' => 'Unpublished',
|
|
'deleted' => 'Deleted',
|
|
'restored' => 'Recovered',
|
|
'erased' => 'Erased for good',
|
|
],
|
|
'actions' => [
|
|
'diff' => 'See the change',
|
|
'restore' => 'Restore these values',
|
|
],
|
|
],
|
|
|
|
'media' => [
|
|
'label' => 'File',
|
|
'plural' => 'Media',
|
|
'subheading' => ':count files · :size MB on disk, derived versions included.',
|
|
'pending' => 'Not processed',
|
|
'in_use' => 'In use',
|
|
'orphan' => 'Unused',
|
|
'fields' => [
|
|
'file' => 'File',
|
|
'size' => 'Dimensions',
|
|
'versions' => 'Versions',
|
|
'weight' => 'Weight',
|
|
'used' => 'Use',
|
|
'error' => 'Error',
|
|
],
|
|
'filters' => [
|
|
'pending' => 'Not processed',
|
|
'failed' => 'Failed',
|
|
'orphans' => 'Nothing points at them',
|
|
'missing' => 'No file on disk',
|
|
],
|
|
'actions' => [
|
|
'open' => 'Open',
|
|
'reprocess' => 'Reprocess',
|
|
'reprocess_all' => 'Reprocess everything',
|
|
'reprocess_all_hint' => 'Regenerates dimensions, versions and placeholders for every image. This is what to do after changing the widths or adding a format.',
|
|
'reprocess_queued' => 'Queued. It runs as soon as the queue does.',
|
|
],
|
|
'empty' => [
|
|
'heading' => 'No files yet',
|
|
'description' => 'They appear here by themselves as images are uploaded on projects, pages, members or the showcase.',
|
|
],
|
|
],
|
|
|
|
'redirects' => [
|
|
'label' => 'Redirect',
|
|
'plural' => 'Redirects',
|
|
'hint' => 'Paths as the site sees them, leading slash included. Renaming a slug writes one by itself.',
|
|
'every_locale' => 'Every language',
|
|
'automatic' => 'Automatic',
|
|
'manual' => 'By hand',
|
|
'fields' => [
|
|
'from' => 'From',
|
|
'from_hint' => 'The address that stopped working.',
|
|
'to' => 'To',
|
|
'status' => 'Kind',
|
|
'status_hint' => 'Permanent is the usual one: it tells Google to update the link.',
|
|
'locale' => 'Language',
|
|
'locale_hint' => 'Leave empty to apply in all three.',
|
|
'is_enabled' => 'Enabled',
|
|
'hits' => 'Uses',
|
|
'origin' => 'Origin',
|
|
],
|
|
'statuses' => [
|
|
'301' => 'Permanent (301)',
|
|
'302' => 'Temporary (302)',
|
|
],
|
|
'filters' => [
|
|
'unused' => 'Never used yet',
|
|
],
|
|
'empty' => [
|
|
'heading' => 'No redirects yet',
|
|
'description' => 'They are written automatically when a published slug changes. Add the ones from links older than this site by hand.',
|
|
],
|
|
],
|
|
|
|
'translations' => [
|
|
'filters' => [
|
|
'stale' => 'Translation left behind',
|
|
],
|
|
],
|
|
|
|
'views' => [
|
|
'column' => 'Reads',
|
|
'column_hint' => 'Reads over the last 30 days, every language together. Empty until the frontend reports them.',
|
|
'in_days' => 'in :days days',
|
|
'filters' => [
|
|
'unread' => 'Published and unread',
|
|
],
|
|
],
|
|
|
|
'reviews' => [
|
|
'title' => 'Review',
|
|
'column' => 'Review',
|
|
'waiting' => 'Waiting',
|
|
'waiting_for_you' => 'Waiting for your review',
|
|
'waiting_for_you_hint' => 'Somebody finished something and cannot publish it.',
|
|
'anyone' => 'Anybody who can publish',
|
|
'requested' => 'Review requested. The people who can publish it have been told.',
|
|
'requested_count' => '{0}Nothing to ask for: already in review or published.|{1}Requested review on 1 record.|[2,*]Requested review on :count records.',
|
|
'returned' => 'Sent back to whoever wrote it, with your reason.',
|
|
'fields' => [
|
|
'reviewer' => 'Ask',
|
|
'reviewer_hint' => 'Leave empty and everyone who can publish this will see it.',
|
|
'note' => 'Note',
|
|
'note_hint' => 'Optional. What the reviewer needs to know before looking.',
|
|
'reason' => 'What needs changing',
|
|
'reason_hint' => 'Required: handing work back without saying why is what stops people using review at all.',
|
|
'event' => 'What happened',
|
|
'who' => 'Who',
|
|
'when' => 'When',
|
|
],
|
|
'filters' => [
|
|
'mine' => 'Waiting for my review',
|
|
],
|
|
'actions' => [
|
|
'request' => 'Ask for review',
|
|
'request_bulk' => 'Ask for review (selection)',
|
|
'request_heading' => 'Say this is ready',
|
|
'request_hint' => 'You cannot publish it yourself, so this tells the people who can.',
|
|
'return' => 'Send back',
|
|
'return_heading' => 'Send it back to whoever wrote it',
|
|
'comment' => 'Comment',
|
|
'open' => 'Open',
|
|
],
|
|
'notification' => [
|
|
'title' => ':name is asking you to review something',
|
|
'returned' => ':name has sent something back to you',
|
|
],
|
|
'empty' => [
|
|
'heading' => 'Nothing said yet',
|
|
'description' => 'What was asked, what was sent back and why. The part the change history cannot hold.',
|
|
],
|
|
],
|
|
|
|
'missing_urls' => [
|
|
'label' => 'Missing URL',
|
|
'plural' => 'Missing URLs',
|
|
'linked_from_us' => 'Linked from our own site',
|
|
'no_referrer' => 'No referrer',
|
|
'fields' => [
|
|
'path' => 'Address',
|
|
'hits' => 'Requests',
|
|
'locale' => 'Language',
|
|
'status' => 'Status',
|
|
'referrer' => 'Came from',
|
|
'last_seen' => 'Last seen',
|
|
],
|
|
'filters' => [
|
|
'internal' => 'Linked from our site',
|
|
'repeated' => 'More than one request',
|
|
],
|
|
'actions' => [
|
|
'redirect' => 'Create redirect',
|
|
'redirect_heading' => 'Send this address somewhere',
|
|
'redirect_hint' => 'The failing address is already filled in. All that is missing is where it should lead.',
|
|
'redirected' => 'Redirect created. This address stops returning 404.',
|
|
'locale_hint' => 'Taken from the language it was requested in. Empty to apply in all.',
|
|
'ignore' => 'Ignore',
|
|
'unignore' => 'Stop ignoring',
|
|
],
|
|
'empty' => [
|
|
'heading' => 'Nobody has hit a 404',
|
|
'description' => 'Addresses the site could not resolve show up here, ready to be redirected. The frontend reports them, so SITE_INGEST_TOKEN has to be set.',
|
|
],
|
|
],
|
|
|
|
'settings' => [
|
|
'label' => 'Setting',
|
|
'plural' => 'Settings',
|
|
'sections' => [
|
|
'general' => 'General',
|
|
],
|
|
'fields' => [
|
|
'key' => 'Key',
|
|
'value' => 'Value',
|
|
'value_hint' => 'The value exactly as it is, in JSON. Invalid JSON is refused.',
|
|
],
|
|
'actions' => [
|
|
'add_setting' => 'Add setting',
|
|
'delete_setting' => 'Delete setting',
|
|
],
|
|
],
|
|
|
|
'issues' => [
|
|
'label' => 'Issue',
|
|
'plural' => 'Issues',
|
|
'sections' => [
|
|
'details' => 'Details',
|
|
'classification' => 'Classification',
|
|
'metadata' => 'Metadata',
|
|
],
|
|
'fields' => [
|
|
'number' => 'Number',
|
|
'title' => 'Title',
|
|
'repository' => 'Repository',
|
|
'author' => 'Author',
|
|
'assignee' => 'Assignee',
|
|
'assignee_hint' => 'GitHub username or empty to mark as unclaimed',
|
|
'url' => 'URL',
|
|
'is_good_first_issue' => 'Good first issue',
|
|
'is_good_first_issue_hint' => 'Recommended for newcomers to the project',
|
|
'is_help_wanted' => 'Help wanted',
|
|
'is_help_wanted_hint' => 'Open to community contributions',
|
|
'comments' => 'Comments',
|
|
'issue_created_at' => 'Created',
|
|
'issue_updated_at' => 'Updated',
|
|
'labels' => 'Labels',
|
|
'unassigned' => 'Unassigned',
|
|
],
|
|
'filters' => [
|
|
'repository' => 'Repository',
|
|
'good_first_issue' => 'Good first issues',
|
|
'help_wanted' => 'Help wanted',
|
|
'unclaimed' => 'Unclaimed',
|
|
'claimed' => 'Claimed',
|
|
],
|
|
],
|
|
];
|