A "TaskStream" section on the create form (toggle and optional key, suggested from the slug) opens the board before saving, as the person signed in, with the Pireon token of their session. A refusal shows on the key field and a TaskStream outage as a notification; either way nothing is saved. The created notification carries the link, and the edit page has an "Open in TaskStream" button. Documented in the user manual (and its PDF) and the README. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1086 lines
40 KiB
PHP
1086 lines
40 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.',
|
|
],
|
|
],
|
|
|
|
'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' => [
|
|
'byline' => 'Byline',
|
|
'byline_hint' => 'Who signs the post on the site, linked to their profile. Left empty, no author is shown.',
|
|
'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',
|
|
],
|
|
|
|
'webhooks' => [
|
|
'label' => 'Webhook',
|
|
'events_hint' => 'Pick as many as you like. "All of…" covers any change to that kind of record.',
|
|
'any_record' => 'Any record · :action',
|
|
'all_of' => 'All of :resource',
|
|
'groups' => [
|
|
'everything' => 'General',
|
|
'notices' => 'Notices',
|
|
],
|
|
'actions_on' => [
|
|
'created' => 'Created',
|
|
'updated' => 'Edited',
|
|
'deleted' => 'Deleted',
|
|
'restored' => 'Restored',
|
|
],
|
|
'resources' => [
|
|
'pages' => 'Pages',
|
|
'categories' => 'Categories',
|
|
'tags' => 'Tags',
|
|
'projects' => 'Projects',
|
|
'members' => 'Members',
|
|
'services' => 'Services',
|
|
'clients' => 'Clients',
|
|
'testimonials' => 'Testimonials',
|
|
'talks' => 'Talks',
|
|
'technologies' => 'Technologies',
|
|
'calls' => 'Calls',
|
|
'redirects' => 'Redirects',
|
|
'repositories' => 'Repositories',
|
|
'media' => 'Media',
|
|
'applications' => 'Inbox',
|
|
],
|
|
'plural' => 'Webhooks',
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'url' => 'URL',
|
|
'url_hint' => 'HTTPS and a public address: localhost, private IPs and internal names are refused.',
|
|
'events' => 'Events',
|
|
'include_personal_data' => 'Include personal data',
|
|
'include_personal_data_hint' => 'Only for "Submission received": adds the name, e-mail and message of whoever wrote.',
|
|
'is_active' => 'Active',
|
|
'failures' => 'Failures in a row',
|
|
'last_delivered_at' => 'Last successful delivery',
|
|
],
|
|
'events' => [
|
|
'*' => 'All',
|
|
'application_received' => 'Submission received in the inbox',
|
|
'content_published' => 'Content published',
|
|
'content_unpublished' => 'Content taken off the site',
|
|
'review_requested' => 'Review requested',
|
|
'review_returned' => 'Review returned for changes',
|
|
],
|
|
'actions' => [
|
|
'ping' => 'Send a test',
|
|
'ping_sent' => 'Test on its way',
|
|
'ping_hint' => 'See how it went under "Deliveries", further down.',
|
|
'rotate' => 'Change secret',
|
|
'rotate_hint' => 'The current secret stops working at once: update the receiving service straight after.',
|
|
],
|
|
'secret' => [
|
|
'title' => 'Keep this secret',
|
|
'body' => 'It signs every delivery and will not be shown again: :secret',
|
|
],
|
|
'deliveries' => [
|
|
'title' => 'Deliveries',
|
|
'event' => 'Event',
|
|
'status' => 'Status',
|
|
'response' => 'Response',
|
|
'attempts' => 'Attempts',
|
|
'error' => 'Error',
|
|
'created_at' => 'When',
|
|
'payload' => 'View content',
|
|
'redeliver' => 'Send again',
|
|
'redelivered' => 'Sending again',
|
|
'statuses' => [
|
|
'pending' => 'Pending',
|
|
'succeeded' => 'Delivered',
|
|
'failed' => 'Failed',
|
|
],
|
|
],
|
|
],
|
|
|
|
'tags' => [
|
|
'label' => 'Tag',
|
|
'plural' => 'Tags',
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'slug' => 'Slug',
|
|
'pages' => 'Posts',
|
|
],
|
|
],
|
|
|
|
'translate' => [
|
|
'title' => 'Translations',
|
|
'title_for' => ':title in :language',
|
|
'action' => 'Translate',
|
|
'pending' => 'To translate',
|
|
'pending_hint' => 'What is still to be written in a language (blue) or fell behind because the original changed afterwards (amber).',
|
|
'nothing' => 'Everything is translated and up to date.',
|
|
'translate_into' => 'Translate into :language',
|
|
'update_in' => 'Update :language (since :since)',
|
|
'changed' => 'Changed in the original:',
|
|
'stale_since' => 'The original changed on :date, after it was translated.',
|
|
'save' => 'Save in :language',
|
|
'saved' => 'Translation saved',
|
|
'back' => 'Back to the list',
|
|
'columns' => [
|
|
'record' => 'Content',
|
|
'languages' => 'Languages',
|
|
],
|
|
'fields' => [
|
|
'title' => 'Title',
|
|
'excerpt' => 'Excerpt',
|
|
'body' => 'Content',
|
|
'meta_title' => 'SEO title',
|
|
'meta_description' => 'SEO description',
|
|
'tagline' => 'Tagline',
|
|
'description' => 'Description',
|
|
'decisions' => 'Decisions',
|
|
'postmortem' => 'Postmortem',
|
|
'what_you_get' => 'What you get',
|
|
],
|
|
],
|
|
|
|
'replies' => [
|
|
'empty_template' => 'The template has no text in the language of this submission.',
|
|
'heading' => 'Reply to :name',
|
|
'sends' => 'Sent by this application, in the language they wrote in, and recorded here.',
|
|
'hands_over' => 'This installation does not send mail: your mail program will open with the text already written, and the reply is recorded here.',
|
|
'send' => 'Send',
|
|
'open_mail' => 'Open in my mail',
|
|
'sent' => 'Reply sent',
|
|
'recorded' => 'Reply recorded; finish sending it from your mail',
|
|
'elsewhere' => 'Reply from my mail',
|
|
'no_template' => 'No template',
|
|
'history' => 'Replies',
|
|
'by' => ':name, :when',
|
|
'in_language' => 'They wrote in :language: better to answer in it.',
|
|
'channels' => [
|
|
'mail' => 'sent from here',
|
|
'mailto' => 'from the replier\'s mail',
|
|
],
|
|
'fields' => [
|
|
'template' => 'Template',
|
|
'subject' => 'Subject',
|
|
'body' => 'Message',
|
|
],
|
|
'templates' => [
|
|
'label' => 'Reply template',
|
|
'plural' => 'Reply templates',
|
|
'any_kind' => 'Any kind',
|
|
'placeholders' => 'In the subject and message, :list are filled in (who wrote, what about, and who answers).',
|
|
'fields' => [
|
|
'name' => 'Name',
|
|
'name_hint' => 'To pick it from the list; never sent.',
|
|
'kind' => 'For',
|
|
'position' => 'Order',
|
|
],
|
|
],
|
|
],
|
|
|
|
'statistics' => [
|
|
'title' => 'Statistics',
|
|
'period' => 'Period',
|
|
'last_days' => 'Last :days days',
|
|
'languages' => 'Reads by language',
|
|
'compared' => 'Compared with the previous period of the same length.',
|
|
'daily' => 'Reads per day',
|
|
'top' => 'Most read',
|
|
'no_views' => 'No reads in this period yet.',
|
|
'unread' => 'On the site and unread',
|
|
'unread_hint' => 'Published, and nobody opened it in the period: either hard to find, or not worth finding.',
|
|
'all_read' => 'Everything published was read at least once.',
|
|
'new' => 'new',
|
|
'columns' => [
|
|
'title' => 'Title',
|
|
'type' => 'Type',
|
|
'views' => 'Reads',
|
|
'change' => 'Change',
|
|
],
|
|
'types' => [
|
|
'pages' => 'Page',
|
|
'projects' => 'Project',
|
|
'services' => 'Service',
|
|
'calls' => 'Call',
|
|
'members' => 'Member',
|
|
],
|
|
],
|
|
|
|
'calendar' => [
|
|
'title' => 'Editorial calendar',
|
|
'legend' => 'Legend',
|
|
'previous' => 'Previous month',
|
|
'next' => 'Next month',
|
|
'today' => 'Today',
|
|
'events' => [
|
|
'published' => 'Published',
|
|
'scheduled' => 'Scheduled',
|
|
'unpublishes' => 'Comes off the site',
|
|
'opens' => 'Opens',
|
|
'closes' => 'Closes',
|
|
],
|
|
'types' => [
|
|
'pages' => 'Page',
|
|
'projects' => 'Project',
|
|
'services' => 'Service',
|
|
'calls' => 'Call',
|
|
],
|
|
],
|
|
|
|
'expiring' => [
|
|
'heading' => 'Coming up',
|
|
'description' => 'Calls closing and content coming off the site in the next :days days.',
|
|
'types' => [
|
|
'calls' => 'Call',
|
|
'pages' => 'Page',
|
|
'projects' => 'Project',
|
|
'services' => 'Service',
|
|
],
|
|
'events' => [
|
|
'closes' => 'closes :when (:date)',
|
|
'unpublishes' => 'comes off the site :when (:date)',
|
|
],
|
|
'notification' => [
|
|
'title' => '{1} One thing expires soon|[2,*] :count things expire soon',
|
|
'open' => 'Open',
|
|
],
|
|
],
|
|
|
|
'duplicate' => [
|
|
'label' => 'Duplicate',
|
|
'heading' => 'Duplicate as a draft',
|
|
'hint' => 'A copy with the same content is made, unpublished and out of any review, and opened for editing.',
|
|
'done' => 'Copy made',
|
|
'title_suffix' => '(copy)',
|
|
'slug_suffix' => 'copy',
|
|
],
|
|
|
|
'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',
|
|
'webhooks' => 'Webhooks',
|
|
'audit' => 'Audit log',
|
|
'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',
|
|
],
|
|
],
|
|
|
|
'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.',
|
|
],
|
|
'taskstream' => [
|
|
'section' => 'TaskStream',
|
|
'section_hint' => 'A public board in TaskStream, the collective\'s issue tracker, in your name.',
|
|
'toggle' => 'Also create it in TaskStream',
|
|
'key' => 'Key in TaskStream',
|
|
'key_hint' => '2 to 10 letters or digits, starting with a letter. Left empty, it is made from the slug.',
|
|
'created' => 'Board created in TaskStream: :url',
|
|
'open' => 'Open in TaskStream',
|
|
],
|
|
'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',
|
|
'scheduled' => 'Scheduled',
|
|
'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',
|
|
],
|
|
],
|
|
];
|