Initial commit: Pireon Admin — headless admin panel and public API

Laravel 13 + Filament 5 admin panel and REST API for a non-profit developer
collective, backed by the Pireon OAuth identity server. The public site is a
separate, server-rendered application consuming /api/public/v1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 17:55:27 +02:00
commit 3897113313
534 changed files with 64050 additions and 0 deletions

229
lang/ca.json Normal file
View File

@@ -0,0 +1,229 @@
{
"(and :count more error)": "(i :count error més)",
"(and :count more errors)": "(i :count error més)|(i :count errors més)|(i :count errors més)",
"A decryption key is required.": "Cal una clau de desxifrat.",
"A Timeout Occurred": "S'ha produït un temps mort",
"Accept": "Acceptar",
"Accepted": "Acceptat",
"Action": "Acció",
"Actions": "Accions",
"Add": "Afegir",
"Add :name": "Afegeix :name",
"Admin": "Admin",
"Agree": "Acordar",
"All rights reserved.": "Tots els drets reservats.",
"Already Reported": "Ja s'ha informat",
"Archive": "Arxiu",
"Assign": "Assignar",
"Associate": "Associat",
"Attach": "Adjuntar",
"Bad Gateway": "Porta d'enllaç incorrecta",
"Bad Request": "Petició dolenta",
"Bandwidth Limit Exceeded": "Límit d'ample de banda excedit",
"Browse": "Navega",
"Cancel": "Cancel·la",
"Choose": "Triar",
"Choose :name": "Trieu :name",
"Choose File": "Tria el fitxer",
"Choose Image": "Trieu Imatge",
"Click to copy": "Feu clic per copiar",
"Client Closed Request": "Sol·licitud de client tancada",
"Close": "Tancar",
"Collapse": "Col·lapse",
"Collapse All": "Col · lapsar tot",
"Comment": "Comenta",
"Confirm": "Confirmar",
"Conflict": "Conflicte",
"Connect": "Connecta't",
"Connection Closed Without Response": "Connexió tancada sense resposta",
"Connection Timed Out": "Temps de connexió esgotat",
"Continue": "Continua",
"Create": "Crear",
"Create :name": "Crea :name",
"Created": "Creat",
"Delete": "Esborrar",
"Delete :name": "Suprimeix :name",
"Detach": "Separa",
"Details": "Detalls",
"Disable": "Deshabilitar",
"Discard": "Descartar",
"Done": "Fet",
"Down": "Avall",
"Duplicate": "Duplicat",
"Duplicate :name": "Duplicat: nom",
"Edit": "Edita",
"Edit :name": "Edita :name",
"Enable": "Habilitar",
"Encrypted environment file already exists.": "El fitxer d'entorn xifrat ja existeix.",
"Encrypted environment file not found.": "No s'ha trobat el fitxer d'entorn xifrat.",
"Environment file already exists.": "El fitxer d'entorn ja existeix.",
"Environment file not found.": "No s'ha trobat el fitxer d'entorn.",
"errors": "errors",
"Expand": "Ampliar",
"Expand All": "Amplia-ho tot",
"Expectation Failed": "L'expectativa ha fallat",
"Explanation": "Explicació",
"Export": "Exporta",
"Export :name": "Export :name",
"Failed Dependency": "Dependència fallida",
"File": "Dossier",
"Files": "Fitxers",
"Forbidden": "Prohibit",
"Found": "Trobat",
"Gateway Timeout": "Temps d'espera de la passarel·la",
"Go Home": "Aneu a l'inici",
"Go to page :page": "Aneu a la pàgina :page",
"Gone": "Desaparegut",
"Hello!": "Hola!",
"Hide": "Amaga",
"Hide :name": "Amaga :name",
"Home": "Inici",
"HTTP Version Not Supported": "Versió HTTP no compatible",
"I'm a teapot": "Sóc una tetera",
"If you did not create an account, no further action is required.": "Si no heu creat cap compte, no es requereix cap acció adicional.",
"If you did not request a password reset, no further action is required.": "Si no heu sol·licitat el restabliment de la contrasenya, obvieu aquest correu electrònic.",
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Si té algun problema per a fer clic al botó \":actionText\", copii i enganxi la següent URL al seu navegador web",
"IM Used": "IM utilitzat",
"Image": "Imatge",
"Impersonate": "Suplantar",
"Impersonation": "Suplantació d'identitat",
"Import": "Importar",
"Import :name": "Importació :name",
"Insufficient Storage": "Emmagatzematge insuficient",
"Internal Server Error": "error del servidor intern",
"Introduction": "Introducció",
"Invalid filename.": "Nom de fitxer no vàlid.",
"Invalid JSON was returned from the route.": "S'ha retornat un JSON no vàlid des de la ruta.",
"Invalid SSL Certificate": "Certificat SSL no vàlid",
"Length Required": "Longitud requerida",
"Like": "M'agrada",
"Load": "Carrega",
"Localize": "Localitza",
"Location": "Ubicació",
"Locked": "Tancat",
"Log In": "Entrar",
"Log Out": "Sortir",
"Login": "Entrar",
"Logout": "Sortir",
"Loop Detected": "Bucle detectat",
"Maintenance Mode": "mode de manteniment",
"Method Not Allowed": "Mètode no permès",
"Misdirected Request": "Sol·licitud mal dirigida",
"Moved Permanently": "Mogut permanentment",
"Multi-Status": "Multiestatus",
"Multiple Choices": "Opcions múltiples",
"Network Authentication Required": "Es requereix autenticació de xarxa",
"Network Connect Timeout Error": "Error de temps d'espera de connexió a la xarxa",
"Network Read Timeout Error": "Error de temps d'espera de lectura de la xarxa",
"New": "Nous",
"New :name": "Nou :name",
"No": "No",
"No Content": "Sense contingut",
"Non-Authoritative Information": "Informació no autoritzada",
"Not Acceptable": "No és acceptable",
"Not Extended": "No ampliat",
"Not Found": "No trobat",
"Not Implemented": "No implementat",
"Not Modified": "No modificat",
"of": "de",
"OK": "D'acord",
"Open": "Obert",
"Open in a current window": "Obre en una finestra actual",
"Open in a new window": "Obre en una finestra nova",
"Open in a parent frame": "Obre en un marc principal",
"Open in the topmost frame": "Obre al marc superior",
"Open on the website": "Obert al lloc web",
"Origin Is Unreachable": "L'origen és inabastable",
"Page Expired": "Pàgina caducada",
"Pagination Navigation": "Navegació de la paginació",
"Partial Content": "Contingut parcial",
"Payload Too Large": "Càrrega útil massa gran",
"Payment Required": "Pagament obligatori",
"Permanent Redirect": "Redirecció permanent",
"Please click the button below to verify your email address.": "Si us plau, feu clic al botó inferior per verificar la vostra adreça electrònica.",
"Precondition Failed": "La condició prèvia ha fallat",
"Precondition Required": "Condició prèvia requerida",
"Preview": "Vista prèvia",
"Price": "Preu",
"Processing": "Processament",
"Proxy Authentication Required": "Es requereix autenticació de proxy",
"Railgun Error": "Error de canó de ferrocarril",
"Range Not Satisfiable": "Interval no satisfactori",
"Record": "Registre",
"Regards,": "Salutacions,",
"Register": "Registre",
"Request Header Fields Too Large": "Els camps de la capçalera de la sol·licitud són massa grans",
"Request Timeout": "Temps d'espera esgotat",
"Reset Content": "Restablir contingut",
"Reset Password": "Restablir contrasenya",
"Reset your password": "Restableix la teva contrasenya",
"Restore": "Restauració",
"Restore :name": "Restaurar :name",
"results": "resultats",
"Retry With": "Torna-ho a provar amb",
"Save": "Desar",
"Save & Close": "Desa i tanca",
"Save & Return": "Guarda i torna",
"Save :name": "Estalvia :name",
"Search": "Cerca",
"Search :name": "Cerca :name",
"See Other": "Vegeu Altres",
"Select": "Seleccioni",
"Select All": "Seleccionar tot",
"Send": "Enviar",
"Server Error": "Error del servidor",
"Service Unavailable": "Servei no disponible",
"Session Has Expired": "La sessió ha caducat",
"Settings": "Configuració",
"Show": "Espectacle",
"Show :name": "Mostra :name",
"Show All": "Mostrar tots",
"Showing": "Mostrant",
"Sign In": "Inicieu la sessió",
"Solve": "Resol",
"SSL Handshake Failed": "SSL Handshake ha fallat",
"Start": "Començar",
"Stop": "Atura",
"Submit": "Presentar",
"Subscribe": "Subscrigui",
"Switch": "Interruptor",
"Switch To Role": "Canvia al rol",
"Switching Protocols": "Protocols de commutació",
"Tag": "Etiqueta",
"Tags": "Etiquetes",
"Temporary Redirect": "Redirecció temporal",
"The given data was invalid.": "Les dades proporcionades no eren vàlides.",
"The response is not a streamed response.": "La resposta no és una resposta en streaming.",
"The response is not a view.": "La resposta no és una visió.",
"This action is unauthorized.": "Aquesta acció no està autoritzada.",
"This password reset link will expire in :count minutes.": "Aquest enllaç de restabliment de contrasenya caducarà en :count minuts.",
"to": "a",
"Toggle navigation": "Commutar navegació",
"Too Early": "Massa aviat",
"Too Many Requests": "Massa peticions",
"Translate": "Traduir",
"Translate It": "Tradueix-ho",
"Unauthorized": "No autoritzat",
"Unavailable For Legal Reasons": "No disponible per motius legals",
"Unknown Error": "Error desconegut",
"Unpack": "Desempaquetar",
"Unprocessable Entity": "Entitat no processable",
"Unsubscribe": "Cancel·la la subscripció",
"Unsupported Media Type": "Tipus de suport no compatible",
"Up": "Amunt",
"Update": "Actualització",
"Update :name": "Actualització :name",
"Upgrade Required": "Actualització necessària",
"URI Too Long": "URI massa llarg",
"Use Proxy": "Utilitzeu el proxy",
"User": "Usuari",
"Variant Also Negotiates": "La variant també es negocia",
"Verify Email Address": "Confirmeu la vostra adreça electrònica",
"Verify your email address": "Verifica la teva adreça de correu electrònic",
"View": "Vista",
"View :name": "Vista :name",
"Web Server is Down": "El servidor web està caigut",
"Whoops!": "Vaja!",
"Yes": "Sí",
"You are receiving this email because we received a password reset request for your account.": "Heu rebut aquest correu electrònic perquè s'ha solicitat el restabliment de la contrasenya per al vostre compte."
}

119
lang/ca/actions.php Normal file
View File

@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
return [
'accept' => 'Acceptar',
'action' => 'Acció',
'actions' => 'Accions',
'add' => 'Afegeix',
'admin' => 'Admin',
'agree' => 'Acordar',
'archive' => 'Arxiu',
'assign' => 'Assignar',
'associate' => 'Associat',
'attach' => 'Adjuntar',
'browse' => 'Navega',
'cancel' => 'Cancel · lar',
'choose' => 'Tria',
'choose_file' => 'Trieu l\'arxiu',
'choose_image' => 'Trieu Imatge',
'click_to_copy' => 'Feu clic per copiar',
'close' => 'Tanca',
'collapse' => 'Col·lapse',
'collapse_all' => 'Col · lapsar tot',
'comment' => 'Comenta',
'confirm' => 'Confirmeu',
'connect' => 'Connecta\'t',
'create' => 'Crear',
'delete' => 'Suprimeix',
'detach' => 'Separar',
'details' => 'Detalls',
'disable' => 'Desactivar',
'discard' => 'Descartar',
'done' => 'Fet',
'down' => 'Avall',
'duplicate' => 'Duplicat',
'edit' => 'Edita',
'enable' => 'Activa',
'expand' => 'Ampliar',
'expand_all' => 'Amplia-ho tot',
'explanation' => 'Explicació',
'export' => 'Exporta',
'file' => 'Dossier',
'files' => 'Fitxers',
'go_home' => 'Aneu a l\'inici',
'hide' => 'Amaga',
'home' => 'Inici',
'image' => 'Imatge',
'impersonate' => 'Suplantar la identitat',
'impersonation' => 'Suplantació d\'identitat',
'import' => 'Importar',
'introduction' => 'Introducció',
'like' => 'M\'agrada',
'load' => 'Carrega',
'localize' => 'Localitza',
'log_in' => 'Iniciar Sessió',
'log_out' => 'Tancar sessió',
'named' => [
'add' => 'Afegeix :name',
'choose' => 'Trieu :name',
'create' => 'Crea :name',
'delete' => 'Suprimeix :name',
'duplicate' => 'Duplicat: nom',
'edit' => 'Edita :name',
'export' => 'Export :name',
'hide' => 'Amaga :name',
'import' => 'Importació :name',
'new' => 'Nou :name',
'restore' => 'Restaurar :name',
'save' => 'Estalvia :name',
'search' => 'Cerca :name',
'show' => 'Mostra :name',
'update' => 'Actualització :name',
'view' => 'Vista :name',
],
'new' => 'Nou',
'no' => 'No',
'open' => 'Obert',
'open_website' => 'Obert al lloc web',
'preview' => 'Vista prèvia',
'price' => 'Preu',
'record' => 'Registre',
'restore' => 'Restaurar',
'save' => 'Desa',
'save_and_close' => 'Desa i tanca',
'save_and_return' => 'Guarda i torna',
'search' => 'Cerca',
'select' => 'Seleccioneu',
'select_all' => 'Seleccionar tot',
'send' => 'Enviar',
'settings' => 'Configuració',
'show' => 'Espectacle',
'show_all' => 'Mostrar tots',
'sign_in' => 'Inicieu la sessió',
'solve' => 'Resol',
'start' => 'Començar',
'stop' => 'Atura',
'submit' => 'Presentar',
'subscribe' => 'Subscriu-te',
'switch' => 'Interruptor',
'switch_to_role' => 'Canvia al rol',
'tag' => 'Etiqueta',
'tags' => 'Etiquetes',
'target_link' => [
'blank' => 'Obre en una finestra nova',
'parent' => 'Obre en un marc principal',
'self' => 'Obre en una finestra actual',
'top' => 'Obre al marc superior',
],
'translate' => 'Traduir',
'translate_it' => 'Tradueix-ho',
'unpack' => 'Desempaquetar',
'unsubscribe' => 'Cancel·la la subscripció',
'up' => 'Amunt',
'update' => 'Actualització',
'user' => 'Usuari',
'view' => 'Veure',
'yes' => 'Sí',
];

9
lang/ca/auth.php Normal file
View File

@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
return [
'failed' => 'Aquestes credencials no concorden amb els nostres registres.',
'password' => 'La contrasenya és incorrecta.',
'throttle' => 'Ha superat el nombre màxim d\'intents d\'accés. Si us plau, torni a intentar-ho en :seconds segons.',
];

28
lang/ca/console.php Normal file
View File

@@ -0,0 +1,28 @@
<?php
declare(strict_types=1);
return [
'prune' => [
'dry_run' => 'Simulació: no s\'esborra res.',
'revisions' => 'Entrades d\'historial antigues',
'trash' => 'Registres eliminats definitivament',
'media' => 'Imatges que ja no fa servir ningú',
'missing_urls' => 'URL no trobades d\'una sola visita',
'views' => 'Xifres de lectura antigues',
],
'types' => [
'no_spec' => 'No hi ha especificació publicada a public/openapi.yaml.',
'current' => 'Els tipus estan al dia.',
'stale' => 'Els tipus no coincideixen amb l\'especificació. Executa: php artisan api:types',
'written' => ':count esquemes escrits a :path',
],
'schedule' => [
'closed' => 'tancada (va passar la seva data)',
'pending' => 'Esperant la seva data de publicació',
'off_site' => 'Fora del web per haver caducat',
'summary' => '{0}No hi havia convocatòries per tancar.|{1}S\'ha tancat 1 convocatòria vençuda.|[2,*]S\'han tancat :count convocatòries vençudes.',
],
];

7
lang/ca/docs.php Normal file
View File

@@ -0,0 +1,7 @@
<?php
declare(strict_types=1);
return [
'title' => 'Documentació de l\'API',
];

68
lang/ca/enums.php Normal file
View File

@@ -0,0 +1,68 @@
<?php
declare(strict_types=1);
return [
'page_status' => [
'draft' => 'Esborrany',
'review' => 'En revisió',
'published' => 'Publicada',
'archived' => 'Arxivada',
],
'project_status' => [
'idea' => 'Idea',
'active' => 'En marxa',
'paused' => 'En pausa',
'completed' => 'Acabat',
'archived' => 'Arxivat',
],
'missing_url_status' => [
'pending' => 'Sense decidir',
'resolved' => 'Resolta',
'ignored' => 'Ignorada',
],
'review_event' => [
'requested' => 'Revisió demanada',
'returned' => 'Retornat',
'published' => 'Publicat',
'commented' => 'Comentari',
],
'call_status' => [
'open' => 'Oberta',
'filled' => 'Coberta',
'closed' => 'Tancada',
],
'application_status' => [
'new' => 'Sense respondre',
'contacted' => 'Contactada',
'accepted' => 'Acceptada',
'declined' => 'Descartada',
'spam' => 'Spam',
],
'application_kind' => [
'contribute' => 'Vol ajudar',
'request' => 'Demana ajuda',
],
'radar_ring' => [
'adopt' => 'Adoptar',
'trial' => 'Provar',
'assess' => 'Avaluar',
'hold' => 'Evitar',
],
'technology_category' => [
'language' => 'Llenguatge',
'framework' => 'Framework',
'datastore' => 'Emmagatzematge',
'infrastructure' => 'Infraestructura',
'tool' => 'Eina',
'practice' => 'Pràctica',
],
];

149
lang/ca/health.php Normal file
View File

@@ -0,0 +1,149 @@
<?php
declare(strict_types=1);
return [
'title' => 'Salut del lloc',
'subheading' => 'El que està malament al web públic i no es veu des d\'aquí.',
'all_clear' => 'Tot en ordre. No hi ha res a arreglar.',
'problem_summary' => '{1}Hi ha 1 cosa a revisar|[2,*]Hi ha :count coses a revisar',
'problem_hint' => 'El web és en un altre lloc, així que aquests errors no es veuen editant: es veuen visitant-lo.',
'passing' => '{1}1 comprovació sense problemes|[2,*]:count comprovacions sense problemes',
'and_more' => 'i :count més',
'refreshed' => 'Comprovacions actualitzades',
'severity' => [
'ok' => 'Bé',
'warning' => 'Avís',
'error' => 'Error',
],
'actions' => [
'refresh' => 'Tornar a comprovar',
'go_fix' => 'Anar a arreglar-ho',
],
'bits' => [
'description' => 'sense meta descripció',
'cover' => 'sense portada',
'gallery_image' => 'Imatge de galeria sense descriure',
'itself' => 'ella mateixa',
],
'checks' => [
'missing-slugs' => [
'title' => 'Slugs que falten',
'ok' => 'Tot el que està traduït té el seu slug.',
'problem' => '{1}1 registre està traduït a un idioma però no hi té slug, així que la seva URL en aquell idioma no existeix o fa 404.|[2,*]:count registres estan traduïts a algun idioma sense tenir-hi slug, així que aquelles URL no existeixen o fan 404.',
],
'duplicate-slugs' => [
'title' => 'Slugs repetits',
'ok' => 'Cada URL resol a un sol registre.',
'problem' => '{1}1 slug està repetit dins del mateix idioma: l\'API resol aquella URL al primer que troba.|[2,*]:count slugs estan repetits dins del mateix idioma: l\'API resol aquelles URL al primer que troba.',
],
'broken-images' => [
'title' => 'Imatges trencades',
'ok' => 'Tots els fitxers d\'imatge són on toca.',
'problem' => '{1}1 imatge que el web està publicant ja no existeix al disc o no s\'ha pogut llegir.|[2,*]:count imatges que el web està publicant ja no existeixen al disc o no s\'han pogut llegir.',
],
'missing-translations' => [
'title' => 'Contingut sense traduir',
'ok' => 'Tot el que està publicat és als tres idiomes.',
'problem' => '{1}1 registre publicat no està traduït a algun idioma, així que aquella versió del web se\'n queda sense.|[2,*]:count registres publicats no estan traduïts a algun idioma, així que aquelles versions del web se\'n queden sense.',
],
'images-without-alt' => [
'title' => 'Imatges sense descriure',
'ok' => 'Totes les imatges publicades tenen text alternatiu.',
'problem' => '{1}1 imatge publicada no té text alternatiu: qui no la pot veure no sap que hi és.|[2,*]:count imatges publicades no tenen text alternatiu: qui no les pot veure no sap que hi són.',
],
'incomplete-seo' => [
'title' => 'Fitxes incompletes',
'ok' => 'Tot el que està publicat té descripció i portada.',
'problem' => '{1}1 registre publicat no té què ensenyar a un cercador o en enganxar l\'enllaç a un xat.|[2,*]:count registres publicats no tenen què ensenyar a un cercador o en enganxar l\'enllaç a un xat.',
],
'expired-calls' => [
'title' => 'Convocatòries vençudes',
'ok' => 'Cap convocatòria oberta ha passat la data de tancament.',
'problem' => '{1}1 convocatòria continua marcada com a oberta amb la data de tancament passada. Ja no surt al web, però infla el comptador del panell.|[2,*]:count convocatòries continuen marcades com a obertes amb la data de tancament passada. Ja no surten al web, però inflen el comptador del panell.',
],
'unanswered-submissions' => [
'title' => 'Gent esperant resposta',
'ok' => 'No hi ha ningú esperant des de fa més d\'una setmana.',
'problem' => '{1}1 persona va escriure fa més d\'una setmana i encara no té resposta.|[2,*]:count persones van escriure fa més d\'una setmana i encara no tenen resposta.',
],
'stalled-media' => [
'title' => 'Imatges sense processar',
'ok' => 'No hi ha cap imatge esperant a processar-se.',
'problem' => '{1}1 imatge fa més d\'una hora que espera: segurament no hi ha cap worker de cues ni scheduler funcionant.|[2,*]:count imatges fa més d\'una hora que esperen: segurament no hi ha cap worker de cues ni scheduler funcionant.',
],
'services-without-work' => [
'title' => 'Serveis sense obra al darrere',
'ok' => 'Tots els serveis publicats ensenyen feina real.',
'problem' => '{1}1 servei publicat no enllaça cap projecte publicat: és una promesa, no una oferta.|[2,*]:count serveis publicats no enllacen cap projecte publicat: són promeses, no ofertes.',
],
'clients-without-logo' => [
'title' => 'Clients sense logo',
'ok' => 'Tots els clients del mur tenen logo.',
'problem' => '{1}1 client surt al mur de logos sense tenir-ne: és un forat que sembla un error.|[2,*]:count clients surten al mur de logos sense tenir-ne: són forats que semblen un error.',
],
'testimonials-missing-original' => [
'title' => 'Cites sense l\'original',
'ok' => 'Totes les cites tenen les paraules que es van dir de veritat.',
'problem' => '{1}1 testimoni no té la cita en el seu idioma original: s\'està publicant una traducció d\'una cosa que ningú pot comprovar.|[2,*]:count testimonis no tenen la cita en el seu idioma original: s\'estan publicant traduccions de coses que ningú pot comprovar.',
],
'talks-without-speaker' => [
'title' => 'Xerrades sense ponent',
'ok' => 'Totes les xerrades acrediten algú.',
'problem' => '{1}1 xerrada no diu qui la va fer, així que no surt al perfil de ningú.|[2,*]:count xerrades no diuen qui les va fer, així que no surten al perfil de ningú.',
],
'broken-redirects' => [
'title' => 'Redireccions trencades',
'ok' => 'Cap redirecció dona voltes ni encadena amb una altra.',
'problem' => '{1}1 redirecció apunta a ella mateixa o a una altra redirecció: el navegador dona voltes o paga un salt de més.|[2,*]:count redireccions apunten a elles mateixes o a una altra redirecció: el navegador dona voltes o paga salts de més.',
],
'redirects-to-nowhere' => [
'title' => 'Redireccions a enlloc',
'ok' => 'Totes les redireccions porten a una pàgina que existeix.',
'problem' => '{1}1 redirecció porta a una adreça que ja no respon: és pitjor que el 404 que venia a evitar.|[2,*]:count redireccions porten a adreces que ja no responen: és pitjor que els 404 que venien a evitar.',
],
'missing-urls' => [
'title' => 'URL que ningú no troba',
'ok' => 'Cap adreça trencada esperant redirecció.',
'problem' => '{1}1 adreça dona 404 i s\'ha demanat més d\'una vegada: cada visita que hi arriba es perd.|[2,*]:count adreces donen 404 i s\'han demanat més d\'una vegada: cada visita que hi arriba es perd.',
],
'stale-reviews' => [
'title' => 'Revisions sense contestar',
'ok' => 'Ningú no espera una revisió.',
'problem' => '{1}1 cosa fa més d\'una setmana que espera revisió: qui la va escriure es pensa que hi passa alguna cosa.|[2,*]:count coses fa més d\'una setmana que esperen revisió: qui les va escriure es pensa que hi passa alguna cosa.',
],
'stale-translations' => [
'title' => 'Traduccions desactualitzades',
'ok' => 'Cap traducció no s\'ha quedat enrere de l\'original.',
'problem' => '{1}1 registre traduït diu una cosa que l\'original va deixar de dir: la traducció hi és, així que res més no ho avisa.|[2,*]:count registres traduïts diuen coses que els originals van deixar de dir: les traduccions hi són, així que res més no ho avisa.',
],
'stale-repositories' => [
'title' => 'Repositoris que no sincronitzen',
'ok' => 'Tots els repositoris sincronitzen bé.',
'problem' => '{1}1 repositori porta uns quants intents fallant. El web continua ensenyant els seus darrers números, que ja no són certs.|[2,*]:count repositoris porten uns quants intents fallant. El web continua ensenyant els seus darrers números, que ja no són certs.',
],
],
];

84
lang/ca/http-statuses.php Normal file
View File

@@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
return [
'0' => 'Error desconegut',
'100' => 'Continua',
'101' => 'Protocols de commutació',
'102' => 'Processament',
'200' => 'D\'acord',
'201' => 'Creat',
'202' => 'Acceptat',
'203' => 'Informació no autoritzada',
'204' => 'Sense contingut',
'205' => 'Restablir contingut',
'206' => 'Contingut parcial',
'207' => 'Multiestatus',
'208' => 'Ja s\'ha informat',
'226' => 'IM utilitzat',
'300' => 'Opcions múltiples',
'301' => 'Mogut permanentment',
'302' => 'Trobat',
'303' => 'Vegeu Altres',
'304' => 'No modificat',
'305' => 'Utilitzeu el proxy',
'307' => 'Redirecció temporal',
'308' => 'Redirecció permanent',
'400' => 'Petició dolenta',
'401' => 'No autoritzat',
'402' => 'Pagament obligatori',
'403' => 'Prohibit',
'404' => 'No trobat',
'405' => 'Mètode no permès',
'406' => 'No és acceptable',
'407' => 'Es requereix autenticació de proxy',
'408' => 'Temps d\'espera esgotat',
'409' => 'Conflicte',
'410' => 'Desaparegut',
'411' => 'Longitud requerida',
'412' => 'La condició prèvia ha fallat',
'413' => 'Càrrega útil massa gran',
'414' => 'URI massa llarg',
'415' => 'Tipus de suport no compatible',
'416' => 'Interval no satisfactori',
'417' => 'L\'expectativa ha fallat',
'418' => 'Sóc una tetera',
'419' => 'La sessió ha caducat',
'421' => 'Sol·licitud mal dirigida',
'422' => 'Entitat no processable',
'423' => 'Tancat',
'424' => 'Dependència fallida',
'425' => 'Massa aviat',
'426' => 'Actualització necessària',
'428' => 'Condició prèvia requerida',
'429' => 'Massa sol·licituds',
'431' => 'Els camps de la capçalera de la sol·licitud són massa grans',
'444' => 'Connexió tancada sense resposta',
'449' => 'Torna-ho a provar amb',
'451' => 'No disponible per motius legals',
'499' => 'Sol·licitud de client tancada',
'500' => 'error del servidor intern',
'501' => 'No implementat',
'502' => 'Porta d\'enllaç incorrecta',
'503' => 'mode de manteniment',
'504' => 'Temps d\'espera de la passarel·la',
'505' => 'Versió HTTP no compatible',
'506' => 'La variant també es negocia',
'507' => 'Emmagatzematge insuficient',
'508' => 'Bucle detectat',
'509' => 'Límit d\'ample de banda excedit',
'510' => 'No ampliat',
'511' => 'Es requereix autenticació de xarxa',
'520' => 'Error desconegut',
'521' => 'El servidor web està caigut',
'522' => 'Temps de connexió esgotat',
'523' => 'L\'origen és inabastable',
'524' => 'S\'ha produït un temps mort',
'525' => 'SSL Handshake ha fallat',
'526' => 'Certificat SSL no vàlid',
'527' => 'Error de canó de ferrocarril',
'598' => 'Error de temps d\'espera de lectura de la xarxa',
'599' => 'Error de temps d\'espera de connexió a la xarxa',
'unknownError' => 'Error desconegut',
];

34
lang/ca/maintenance.php Normal file
View File

@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
return [
'title' => 'Mode manteniment',
'subheading' => 'Afecta només el web públic. El tauler i l\'API d\'administració continuen funcionant.',
'badge' => 'Web caiguda',
'status_up' => 'El web públic està operatiu.',
'status_down' => 'El web públic està en manteniment.',
'since' => 'Des de :time',
'lifts_at' => 's\'aixeca el :time',
'panel_unaffected' => 'Podeu continuar editant: el tauler no es veu afectat.',
'notice' => 'Avís per als visitants',
'notice_hint' => 'El retorna l\'API pública al 503 perquè el frontend el mostri. Si el deixes buit s\'usa el text per defecte.',
'default_message' => 'Estem fent canvis al web. Tornem de seguida.',
'until' => 'S\'aixeca automàticament',
'until_hint' => 'Opcional. Evita que un manteniment oblidat deixi el web caigut indefinidament.',
'enable' => 'Activa el manteniment',
'enable_confirm' => 'Els visitants deixaran de veure el web i rebran l\'avís. El tauler continuarà disponible.',
'disable' => 'Aixeca el manteniment',
'save_message' => 'Desa l\'avís',
'enabled_notice' => 'El web públic està en manteniment',
'disabled_notice' => 'El web públic torna a estar operatiu',
'message_saved' => 'Avís desat',
'bypass_hint' => 'L\'equip pot continuar veient el web real amb el token de preview o des d\'una IP de confiança (SITE_TRUSTED_IPS).',
'no_permission' => 'No tens permís per activar o aixecar el manteniment.',
];

8
lang/ca/pagination.php Normal file
View File

@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Següent &raquo;',
'previous' => '&laquo; Anterior',
];

844
lang/ca/panel.php Normal file
View File

@@ -0,0 +1,844 @@
<?php
declare(strict_types=1);
return [
'untitled' => 'Sense títol',
'duplicates' => [
'title' => 'Títol semblant',
'body' => 'Ja existeix alguna cosa molt semblant: :titles',
'open' => 'Veure fitxa existent',
],
'sessions' => [
'title' => 'Sessions',
'this_one' => 'Aquesta sessió',
'unknown_device' => 'Dispositiu desconegut',
'fields' => [
'ip_address' => 'Adreça IP',
'device' => 'Dispositiu',
'last_activity' => 'Última activitat',
],
'actions' => [
'revoke' => 'Tancar sessió',
],
'revoked' => 'Sessió tancada. Aquesta connexió deixa de valer a la propera petició.',
'empty' => [
'heading' => 'Sense sessions obertes',
'description' => 'Ningú no ha iniciat sessió amb aquest compte, o fa temps que no la fa servir.',
],
],
'environment' => [
'production' => 'Producció — això és real',
'other' => 'Entorn de :name',
],
'concurrency' => [
'title' => 'No s\'ha desat',
'body' => 'Algú altre ha canviat això mentre ho editaves. Recarrega la pàgina per veure la versió actual: si ho deses ara, perdries aquest canvi.',
'body_with_author' => ':name ha canviat això mentre ho editaves. Recarrega la pàgina per veure la seva versió: si ho deses ara, perdries aquest canvi.',
],
'presence' => [
'title' => 'Algú altre ho té obert',
'body' => 'Ara mateix també ho està editant: :names.',
],
'groups' => [
'collective' => 'Col·lectiu',
'content' => 'Contingut',
'administration' => 'Administració',
],
'language' => [
'label' => 'Idioma',
'switch' => 'Canvia d\'idioma',
],
'pages' => [
'label' => 'Pàgina',
'plural' => 'Pàgines',
'sections' => [
'content' => 'Contingut',
'content_hint' => 'Cada pestanya és un idioma. L\'idioma principal és obligatori; la resta s\'omple amb ell si el deixes buit.',
'publishing' => 'Publicació',
'seo' => 'SEO',
'seo_hint' => 'Metadades per a cercadors i xarxes socials.',
],
'fields' => [
'title' => 'Títol',
'slug' => 'Slug',
'excerpt' => 'Extracte',
'body' => 'Contingut',
'meta_title' => 'Meta títol',
'meta_description' => 'Meta descripció',
'category' => 'Categoria',
'author' => 'Autor',
'status' => 'Estat',
'featured_image' => 'Imatge destacada',
'featured_image_alt' => 'Text alternatiu',
'featured_image_alt_hint' => 'Què es veu a la imatge, per a qui no la pot veure. Si és purament decorativa, deixa-ho buit.',
'is_featured' => 'Destacada',
'published_at' => 'Data de publicació',
'published_at_hint' => 'Amb una data futura, la pàgina no surt al web fins que arribi.',
'unpublish_at' => 'Retirar el',
'unpublish_at_hint' => 'Opcional. En arribar, la pàgina desapareix sola del web. Per a avisos amb data de caducitat.',
'translations' => 'Traduccions',
],
'filters' => [
'translated_in' => 'Traduïda a',
'missing_translation' => 'Sense traduir a',
],
'actions' => [
'publish' => 'Publica',
'unpublish' => 'Despublica',
],
],
'categories' => [
'label' => 'Categoria',
'plural' => 'Categories',
'fields' => [
'name' => 'Nom',
'slug' => 'Slug',
'description' => 'Descripció',
'color' => 'Color',
'position' => 'Ordre',
'is_visible' => 'Visible',
'pages_count' => 'Pàgines',
],
],
'users' => [
'label' => 'Usuari',
'plural' => 'Usuaris',
'sections' => [
'identity' => 'Identitat',
'identity_hint' => 'Gestionada pel servidor OAuth. S\'actualitza automàticament a cada inici de sessió.',
'access' => 'Accés i permisos',
'access_hint' => 'Gestionat per aquesta aplicació.',
],
'fields' => [
'name' => 'Nom',
'email' => 'Correu electrònic',
'oauth_id' => 'ID al servidor OAuth',
'roles' => 'Rols',
'locale' => 'Idioma preferit',
'is_active' => 'Actiu',
'last_login_at' => 'Últim accés',
'remote_roles' => 'Rols remots',
'never' => 'Mai',
],
'actions' => [
'activate' => 'Activa',
'deactivate' => 'Desactiva',
],
],
'roles' => [
'label' => 'Rol',
'plural' => 'Rols',
'fields' => [
'name' => 'Nom',
'permissions' => 'Permisos',
'users_count' => 'Usuaris',
],
'protected' => 'Rol protegit: no es pot eliminar.',
'select_all' => 'Selecciona-ho tot',
],
'permissions' => [
'groups' => [
'general' => 'General',
'projects' => 'Projectes',
'members' => 'Membres',
'services' => 'Serveis',
'clients' => 'Clients',
'testimonials' => 'Testimonis',
'talks' => 'Xerrades',
'technologies' => 'Tecnologies',
'calls' => 'Convocatòries',
'applications' => 'Bústia',
'repositories' => 'Repositoris',
'media' => 'Mitjans',
'redirects' => 'Redireccions',
'pages' => 'Pàgines',
'categories' => 'Categories',
'users' => 'Usuaris',
'roles' => 'Rols',
'settings' => 'Configuració',
],
'abilities' => [
'sync' => 'Sincronitza',
'maintenance' => 'Activar el mode manteniment',
'panel_access' => 'Accedir al tauler',
'view_any' => 'Llistar',
'view' => 'Veure detall',
'create' => 'Crear',
'update' => 'Editar',
'delete' => 'Eliminar',
'restore' => 'Restaurar',
'force_delete' => 'Eliminar definitivament',
'publish' => 'Publicar',
],
],
'actions' => [
'duplicate' => 'Duplicar',
'duplicate_heading' => 'Duplicar aquest registre',
'duplicated' => 'Duplicat. Posa-li un slug i una data abans de publicar-lo.',
],
'preview' => [
'label' => 'Vista prèvia',
'heading' => 'Enllaços de vista prèvia',
'hint' => 'Es poden compartir i caduquen en :hours hores. Cadascun serveix només per a aquest registre.',
'open' => 'Obrir',
],
'trash' => [
'title' => 'Paperera',
'subheading' => 'Tot el que s\'ha esborrat, junt, amb el botó de desfer al costat.',
'empty' => 'La paperera és buida.',
'deleted_at' => 'Esborrat :when',
'restore' => 'Recuperar',
'erase' => 'Eliminar',
'erase_confirm' => 'Això no es pot desfer. Segur?',
'restored' => 'Recuperat',
'erased' => 'Eliminat definitivament',
],
'today' => [
'all_clear' => 'No hi ha res esperant',
'all_clear_hint' => 'Ni gent sense resposta ni contingut a mitges.',
],
'widgets' => [
'stats' => [
'pages' => 'Pàgines',
'published' => 'Publicades',
'users' => 'Usuaris actius',
'missing_translations' => 'Sense traduir',
'missing_translations_hint' => 'Pàgines que falten en algun idioma',
'projects' => 'Projectes',
'projects_description' => 'Projectes publicats',
'active_projects' => 'Projectes en marxa',
'active_projects_description' => 'Cercant qui hi col·labori',
'members' => 'Membres',
'members_description' => 'Gent activa al col·lectiu',
'open_calls' => 'Convocatòries obertes',
'open_calls_description' => 'Cercant participants',
'good_first_issues' => 'Tasques per començar',
'good_first_issues_description' => 'Lliures per agafar',
'help_wanted' => 'Es busca ajuda',
'help_wanted_description' => 'Issues obertes',
],
'growth_chart' => 'Creixement en el temps',
'growth' => [
'projects' => 'Projectes',
'members' => 'Membres',
'issues' => 'Tasques per començar',
],
'languages_chart' => 'Repartiment de llenguatges',
'languages' => [
'repositories' => 'Repositoris',
],
],
'projects' => [
'label' => 'Projecte',
'plural' => 'Projectes',
'sections' => [
'content' => 'Contingut',
'writeup' => 'Decisions i postmortem',
'writeup_hint' => 'El que una consultora no pot publicar i vosaltres sí. És el contingut que altres desenvolupadors llegeixen de debò.',
'details' => 'Detalls',
],
'fields' => [
'title' => 'Títol',
'slug' => 'Slug',
'tagline' => 'Frase resum',
'description' => 'Descripció',
'decisions' => 'Decisions tècniques',
'decisions_hint' => 'Per què vau triar el que vau triar, i què vau descartar.',
'postmortem' => 'Postmortem',
'postmortem_hint' => 'Què va sortir malament i què vau aprendre. No cal que sigui un èxit.',
'status' => 'Estat',
'published_at' => 'Publicat el',
'unpublish_at' => 'Retirar el',
'unpublish_at_hint' => 'Opcional. En arribar, el projecte desapareix sol del web.',
'published_at_hint' => 'Buit = no visible al web públic.',
'technologies' => 'Tecnologies',
'lead' => 'Responsable',
'members' => 'Participants',
'client' => 'Per a qui',
'client_hint' => 'L\'ONG, associació o entitat destinatària. Si no hi és a la llista, la pots crear aquí mateix.',
'services' => 'Serveis',
'demo_url' => 'Demo',
'cover_image' => 'Imatge de portada',
'cover_image_alt' => 'Text alternatiu',
'cover_image_alt_hint' => 'Què es veu a la portada, per a qui no la pot veure. Si és purament decorativa, deixa-ho buit.',
'started_at' => 'Inici',
'ended_at' => 'Fi',
'is_featured' => 'Destacat',
'needs_help' => 'Busca gent',
'needs_help_hint' => 'El mostra a la secció de col·laboració del web.',
],
'filters' => ['unpublished' => 'Sense publicar'],
'actions' => ['publish' => 'Publica'],
],
'members' => [
'label' => 'Membre',
'plural' => 'Membres',
'sections' => [
'profile' => 'Perfil públic',
'profile_hint' => 'És l\'aparador personal de cadascú: la moneda amb què es paga el treball voluntari.',
'membership' => 'Pertinença',
],
'fields' => [
'name' => 'Nom',
'slug' => 'Slug',
'headline' => 'Titular',
'bio' => 'Biografia',
'avatar' => 'Foto',
'avatar_hint' => 'El text alternatiu és el nom de la persona, així que no cal escriure\'l.',
'github_username' => 'Usuari de GitHub',
'user' => 'Compte del tauler',
'user_hint' => 'Opcional. La majoria de membres no necessita accés a l\'admin.',
'technologies' => 'Tecnologies',
'projects' => 'Projectes',
'is_public' => 'Visible al web',
'is_founder' => 'Fundador/a',
'position' => 'Ordre',
'joined_at' => 'S\'hi va unir',
'left_at' => 'Va marxar',
'left_at_hint' => 'Surt del llistat actual però conserva el seu historial.',
],
'filters' => ['current' => 'Només actuals'],
],
'technologies' => [
'label' => 'Tecnologia',
'plural' => 'Tecnologies',
'off_radar' => 'Fora del radar',
'sections' => ['prose' => 'Descripció i nota del radar'],
'fields' => [
'name' => 'Nom',
'slug' => 'Slug',
'category' => 'Categoria',
'radar_ring' => 'Anell del radar',
'radar_ring_hint' => 'Buit = es pot fer servir com a etiqueta però no surt al radar.',
'radar_note' => 'Nota del radar',
'radar_note_hint' => 'Per què és en aquell anell. És la part que la gent llegeix.',
'description' => 'Descripció',
'color' => 'Color',
'logo' => 'Logo',
'logo_hint' => 'Preferiblement SVG o PNG amb fons transparent. Surt al radar i a les fitxes.',
'website' => 'Web',
'position' => 'Ordre',
'projects' => 'Projectes',
'members' => 'Membres',
],
],
'calls' => [
'label' => 'Convocatòria',
'plural' => 'Convocatòries',
'no_project' => 'General',
'sections' => [
'commitment' => 'Compromís',
'commitment_hint' => 'El que escasseja aquí és el temps, no els diners. Ser concret és el que fa que algú s\'hi decideixi.',
],
'fields' => [
'title' => 'Títol',
'slug' => 'Slug',
'description' => 'Descripció',
'what_you_get' => 'Què t\'endús',
'what_you_get_hint' => 'Aprenentatge, portfolio, referències, mentoria. Dir-ho obertament hi suma.',
'status' => 'Estat',
'project' => 'Projecte',
'project_hint' => 'Buit = convocatòria general del col·lectiu.',
'technologies' => 'Tecnologies',
'hours_per_week' => 'Hores per setmana',
'duration_weeks' => 'Setmanes',
'seniority' => 'Nivell',
'commitment' => 'Dedicació',
'opens_at' => 'Obre',
'closes_at' => 'Tanca',
],
'seniority' => ['any' => 'Qualsevol', 'junior' => 'Júnior', 'mid' => 'Intermedi', 'senior' => 'Sènior'],
'commitment_summary' => '{0}:hoursh/setmana|{1}:hoursh/setmana · :weeks setmana|[2,*]:hoursh/setmana · :weeks setmanes',
],
'applications' => [
'label' => 'Sol·licitud',
'plural' => 'Bústia',
'general_enquiry' => 'Missatge general',
'badge_tooltip' => 'Persones esperant resposta',
'saved' => 'Notes desades',
'reply_subject' => 'Re: :subject',
'sections' => [
'message' => 'El que ens han escrit',
'internal' => 'Seguiment intern',
'internal_hint' => 'Només ho veieu vosaltres. Qui va escriure no en veu res.',
],
'fields' => [
'name' => 'Nom',
'email' => 'Correu',
'organisation' => 'Entitat',
'kind' => 'Tipus',
'subject' => 'Sobre',
'call' => 'Convocatòria',
'hours_per_week' => 'Hores/setmana',
'hours_asked' => 'La convocatòria en demanava :hours h/setmana',
'message' => 'Missatge',
'links' => 'Enllaços',
'link_name' => 'Nom',
'link_url' => 'URL',
'status' => 'Estat',
'received_at' => 'Rebuda',
'handled_by' => 'Atesa per',
'handled_at' => 'Atesa el',
'locale' => 'Va escriure en',
'notes' => 'Notes',
'notes_empty' => 'Sense notes',
'notes_hint' => 'Per a la resta de l\'equip: què heu parlat, com va quedar.',
],
'actions' => [
'group' => 'Marcar com a',
'open' => 'Obrir sol·licitud',
'reply' => 'Respondre',
'notes' => 'Notes',
'contacted' => 'Contactada',
'accepted' => 'Acceptada',
'declined' => 'Descartada',
'spam' => 'Spam',
],
'tabs' => [
'pending' => 'Sense respondre',
'contribute' => 'Volen ajudar',
'request' => 'Demanen ajuda',
'all' => 'Totes',
'spam' => 'Spam',
],
'empty' => [
'heading' => 'No hi ha res a respondre',
'description' => 'Aquí arriba el que la gent escriu des del web públic.',
'call_heading' => 'Encara no ha escrit ningú',
],
'notification' => [
'contribute' => ':name vol donar un cop de mà',
'request' => ':name demana ajuda per a un projecte',
],
'mail' => [
'greeting' => 'Hi ha algú esperant resposta.',
'from' => 'De :name (:email)',
],
],
'publishing' => [
'published_count' => '{0}No hi havia res a publicar: ja era a la web.|{1}Publicada 1 fitxa.|[2,*]Publicades :count fitxes.',
'scheduled' => 'Programada',
'expired' => 'Caducada',
'expired_at' => 'Va caducar el :time',
'expires_in' => 'Caduca :time',
'live' => 'Al web',
'unpublished' => 'Sense publicar',
],
'gallery' => [
'title' => 'Galeria',
'missing_alt' => 'Sense descriure',
'pending' => 'Processant',
'fields' => [
'image' => 'Imatge',
'alt' => 'Text alternatiu',
'alt_hint' => 'Què s\'hi veu, per a qui no ho pot veure.',
'caption' => 'Peu de foto',
'caption_hint' => 'Es mostra a tothom. Aquí van els «abans» i «després».',
'size' => 'Mida',
],
'actions' => [
'add' => 'Afegir imatge',
],
'empty' => [
'heading' => 'Encara no hi ha imatges',
'description' => 'Captures, abans i després, el que calgui perquè s\'entengui el projecte. Es poden reordenar arrossegant.',
],
],
'services' => [
'label' => 'Servei',
'plural' => 'Serveis',
'no_projects' => 'Sense cap projecte al darrere: és una promesa, no una oferta.',
'sections' => [
'evidence' => 'El que ho avala',
'evidence_hint' => 'Un servei que no pot assenyalar feina real és una promesa. Enllaça els projectes que ho demostren.',
'seo' => 'SEO',
],
'fields' => [
'title' => 'Títol',
'slug' => 'Slug',
'tagline' => 'Frase resum',
'tagline_hint' => 'Una línia. És el que es llegeix a la targeta de la portada.',
'description' => 'Descripció',
'projects' => 'Projectes',
'technologies' => 'Tecnologies',
'icon' => 'Icona',
'icon_hint' => 'Nom d\'una icona de Heroicons, per exemple heroicon-o-code-bracket.',
'position' => 'Ordre',
'is_published' => 'Publicat',
'is_featured' => 'Destacat',
'is_featured_hint' => 'Perquè la portada en pugui triar uns quants.',
'published_at' => 'Publicar el',
'published_at_hint' => 'Amb una data futura, no surt al web fins que arribi.',
'unpublish_at' => 'Retirar el',
'unpublish_at_hint' => 'Opcional. En arribar, desapareix sol del web.',
'meta_title' => 'Meta títol',
'meta_description' => 'Meta descripció',
'translations' => 'Traduccions',
],
'actions' => [
'publish' => 'Publicar',
],
],
'clients' => [
'label' => 'Client',
'plural' => 'Clients',
'fields' => [
'name' => 'Nom',
'slug' => 'Slug',
'sector' => 'Sector',
'logo' => 'Logo',
'logo_hint' => 'Preferiblement en SVG o PNG amb fons transparent.',
'url' => 'Web',
'projects' => 'Projectes',
'is_public' => 'Es pot mostrar',
'is_public_hint' => 'Desmarca-ho si l\'entitat prefereix no sortir al web.',
'position' => 'Ordre',
],
'filters' => [
'without_logo' => 'Sense logo',
],
],
'testimonials' => [
'label' => 'Testimoni',
'plural' => 'Testimonis',
'sections' => [
'quote' => 'La cita',
'quote_hint' => 'Escriu en l\'idioma original el que van dir de veritat. Les altres pestanyes són traduccions vostres, i el web ho indicarà.',
'author' => 'Qui ho va dir',
'about' => 'De què parla',
'about_hint' => 'Enllaça-ho a un client, un projecte o un servei: així el web demana els que toquen a cada pàgina en comptes de tenir una llista solta.',
],
'fields' => [
'quote' => 'Cita',
'original_locale' => 'Idioma original',
'original_locale_hint' => 'En quin idioma ho van dir. Traduir una cita és posar paraules a la boca d\'algú, així que el web ho avisa.',
'author_name' => 'Nom',
'author_role' => 'Càrrec',
'avatar' => 'Foto',
'client' => 'Client',
'project' => 'Projecte',
'service' => 'Servei',
'is_public' => 'Visible',
'position' => 'Ordre',
'given_at' => 'Data',
],
],
'talks' => [
'label' => 'Xerrada',
'plural' => 'Xerrades',
'fields' => [
'title' => 'Títol',
'title_hint' => 'No es tradueix: és el nom d\'una xerrada que es va fer una vegada i en un idioma.',
'language' => 'Idioma',
'summary' => 'Resum',
'event' => 'Esdeveniment',
'city' => 'Ciutat',
'held_at' => 'Data',
'video_url' => 'Vídeo',
'slides_url' => 'Diapositives',
'member' => 'Ponent',
'member_hint' => 'Sortirà també al seu perfil, sense escriure-ho dues vegades.',
'project' => 'Projecte',
'is_public' => 'Visible',
],
],
'repositories' => [
'label' => 'Repositori',
'plural' => 'Repositoris',
'never_synced' => 'Mai',
'fields' => [
'provider' => 'Proveïdor',
'full_name' => 'Repositori',
'full_name_hint' => 'Format «owner/repo». La resta es porta sol.',
'project' => 'Projecte',
'is_primary' => 'Principal',
'is_primary_hint' => 'El que representa el projecte quan n\'hi ha diversos.',
'show_publicly' => 'Visible al web',
'language' => 'Llenguatge',
'contributors' => 'Contribuïdors',
'good_first_issues' => 'Tasques per començar',
'pushed_at' => 'Últim push',
'last_synced_at' => 'Sincronitzat',
],
'filters' => ['failing' => 'Amb errors', 'dormant' => 'Sense activitat'],
'actions' => ['sync' => 'Sincronitza', 'sync_selected' => 'Sincronitza seleccionats'],
'notifications' => [
'synced' => 'Repositori sincronitzat',
'synced_body' => ':stars★ · :issues tasques per començar',
'sync_failed' => 'No s\'ha pogut sincronitzar',
'queued' => ':count repositoris a la cua',
],
],
'revisions' => [
'title' => 'Historial',
'system' => 'El sistema',
'before' => 'Abans',
'after' => 'Després',
'no_changes' => 'Aquesta entrada no registra canvis de camps.',
'restored' => 'Valors restaurats',
'restore_confirm' => 'Els camps tornaran a com estaven en aquell moment. La restauració també queda registrada, així que sempre es pot desfer.',
'diff_heading' => 'Canvi de :author · :when',
'fields' => [
'event' => 'Què va passar',
'author' => 'Qui',
'fields' => 'Camps',
'when' => 'Quan',
],
'events' => [
'created' => 'Creat',
'updated' => 'Editat',
'published' => 'Publicat',
'unpublished' => 'Despublicat',
'deleted' => 'Esborrat',
'restored' => 'Recuperat',
'erased' => 'Eliminat del tot',
],
'actions' => [
'diff' => 'Veure el canvi',
'restore' => 'Restaurar aquests valors',
],
],
'media' => [
'label' => 'Fitxer',
'plural' => 'Mitjans',
'subheading' => ':count fitxers · :size MB al disc, comptant-hi les versions derivades.',
'pending' => 'Sense processar',
'in_use' => 'En ús',
'orphan' => 'Sense fer servir',
'fields' => [
'file' => 'Fitxer',
'size' => 'Mides',
'versions' => 'Versions',
'weight' => 'Pes',
'used' => 'Ús',
'error' => 'Error',
],
'filters' => [
'pending' => 'Sense processar',
'failed' => 'Amb error',
'orphans' => 'Que no fa servir ningú',
'missing' => 'Sense fitxer al disc',
],
'actions' => [
'open' => 'Obrir',
'reprocess' => 'Reprocessar',
'reprocess_all' => 'Reprocessar-ho tot',
'reprocess_all_hint' => 'Torna a generar mides, versions i placeholders de totes les imatges. És el que cal fer després de canviar les amplades o afegir un format.',
'reprocess_queued' => 'Encuat. Es processa tan bon punt corri la cua.',
],
'empty' => [
'heading' => 'Encara no hi ha fitxers',
'description' => 'Apareixen aquí sols a mesura que es pugen imatges a projectes, pàgines, membres o la vitrina.',
],
],
'redirects' => [
'label' => 'Redirecció',
'plural' => 'Redireccions',
'hint' => 'Rutes tal com les veu el web, començant per barra. En canviar un slug se\'n crea una de sola.',
'every_locale' => 'Tots els idiomes',
'automatic' => 'Automàtica',
'manual' => 'A mà',
'fields' => [
'from' => 'De',
'from_hint' => 'L\'adreça que va deixar de funcionar.',
'to' => 'A',
'status' => 'Tipus',
'status_hint' => 'Permanent és el normal: diu a Google que actualitzi l\'enllaç.',
'locale' => 'Idioma',
'locale_hint' => 'Deixa-ho buit perquè valgui als tres.',
'is_enabled' => 'Activa',
'hits' => 'Usos',
'origin' => 'Origen',
],
'statuses' => [
'301' => 'Permanent (301)',
'302' => 'Temporal (302)',
],
'filters' => [
'unused' => 'Sense fer servir encara',
],
'empty' => [
'heading' => 'Encara no hi ha redireccions',
'description' => 'Es creen soles en canviar l\'slug d\'alguna cosa publicada. Aquí pots afegir a mà les d\'enllaços anteriors a aquest web.',
],
],
'translations' => [
'filters' => [
'stale' => 'Traducció desactualitzada',
],
],
'views' => [
'column' => 'Visites',
'column_hint' => 'Lectures dels últims 30 dies, sumant tots els idiomes. Buit mentre el frontend no les reporti.',
'in_days' => 'en :days dies',
'filters' => [
'unread' => 'Publicat i sense visites',
],
],
'reviews' => [
'title' => 'Revisió',
'column' => 'Revisió',
'waiting' => 'Esperant',
'waiting_for_you' => 'Esperen la teva revisió',
'waiting_for_you_hint' => 'Algú va acabar alguna cosa i no la pot publicar.',
'anyone' => 'Qualsevol que pugui publicar',
'requested' => 'Revisió demanada. Avisem qui ho pot publicar.',
'requested_count' => '{0}No hi havia res a demanar: ja estava en revisió o publicat.|{1}Demanada la revisió d\'1 fitxa.|[2,*]Demanada la revisió de :count fitxes.',
'returned' => 'Retornat a qui ho va escriure, amb el teu motiu.',
'fields' => [
'reviewer' => 'Ho demanes a',
'reviewer_hint' => 'Deixa-ho buit i ho veurà tothom qui pugui publicar-ho.',
'note' => 'Nota',
'note_hint' => 'Opcional. El que qui revisi necessita saber abans de mirar-ho.',
'reason' => 'Què cal canviar',
'reason_hint' => 'Obligatori: retornar una feina sense dir per què és el que fa que ningú faci servir la revisió.',
'event' => 'Què va passar',
'who' => 'Qui',
'when' => 'Quan',
],
'filters' => [
'mine' => 'Esperant la meva revisió',
],
'actions' => [
'request' => 'Demanar revisió',
'request_bulk' => 'Demanar revisió (selecció)',
'request_heading' => 'Dir que això ja està',
'request_hint' => 'Tu no ho pots publicar, així que això avisa qui sí que pot.',
'return' => 'Retornar',
'return_heading' => 'Retornar-ho a qui ho va escriure',
'comment' => 'Comentar',
'open' => 'Obrir',
],
'notification' => [
'title' => ':name demana que revisis alguna cosa',
'returned' => ':name t\'ha retornat alguna cosa',
],
'empty' => [
'heading' => 'Encara no s\'ha dit res',
'description' => 'Aquí queda què es va demanar, què es va retornar i per què. És el que l\'historial de canvis no pot guardar.',
],
],
'missing_urls' => [
'label' => 'URL no trobada',
'plural' => 'URL no trobades',
'linked_from_us' => 'Enllaçada des del nostre propi web',
'no_referrer' => 'Sense procedència',
'fields' => [
'path' => 'Adreça',
'hits' => 'Visites',
'locale' => 'Idioma',
'status' => 'Estat',
'referrer' => 'Venien de',
'last_seen' => 'Última vegada',
],
'filters' => [
'internal' => 'Enllaçades des del nostre web',
'repeated' => 'Més d\'una visita',
],
'actions' => [
'redirect' => 'Crear redirecció',
'redirect_heading' => 'Enviar aquesta adreça a un altre lloc',
'redirect_hint' => 'L\'adreça que falla ja hi és. Només cal dir on hauria de portar.',
'redirected' => 'Redirecció creada. Aquesta adreça deixa de donar 404.',
'locale_hint' => 'Ve de l\'idioma en què es va demanar. Buit perquè valgui a tots.',
'ignore' => 'Ignorar',
'unignore' => 'Deixar d\'ignorar',
],
'empty' => [
'heading' => 'Ningú s\'ha trobat amb un 404',
'description' => 'Aquí apareixen les adreces que el web no va saber resoldre, per poder redirigir-les. Les reporta el frontend, així que cal configurar SITE_INGEST_TOKEN.',
],
],
'settings' => [
'label' => 'Configuració',
'plural' => 'Configuracions',
'sections' => [
'general' => 'General',
],
'fields' => [
'key' => 'Clau',
'value' => 'Valor',
'value_hint' => 'El valor tal qual, en JSON. Si no és JSON vàlid no es desa.',
],
'actions' => [
'add_setting' => 'Afegir configuració',
'delete_setting' => 'Eliminar configuració',
],
],
'issues' => [
'label' => 'Tasca',
'plural' => 'Tasques',
'sections' => [
'details' => 'Detalls',
'classification' => 'Classificació',
'metadata' => 'Metadades',
],
'fields' => [
'number' => 'Número',
'title' => 'Títol',
'repository' => 'Repositori',
'author' => 'Autor',
'assignee' => 'Assignat a',
'assignee_hint' => 'Usuari de GitHub o buit per marcar sense assignar',
'url' => 'URL',
'is_good_first_issue' => 'Tasca per començar',
'is_good_first_issue_hint' => 'Recomanada per a nous col·laboradors del projecte',
'is_help_wanted' => 'Ajuda buscada',
'is_help_wanted_hint' => 'Oberta a contribucions de la comunitat',
'comments' => 'Comentaris',
'issue_created_at' => 'Creada',
'issue_updated_at' => 'Actualitzada',
'labels' => 'Etiquetes',
'unassigned' => 'Sense assignar',
],
'filters' => [
'repository' => 'Repositori',
'good_first_issue' => 'Tasques per començar',
'help_wanted' => 'Ajuda buscada',
'unclaimed' => 'Sense assignar',
'claimed' => 'Assignades',
],
],
];

11
lang/ca/passwords.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
return [
'reset' => 'La contrasenya s\'ha restablert!',
'sent' => 'Li hem enviat un correu electrònic amb un enllaç per a reiniciar la teva contrasenya!',
'throttled' => 'Si us plau, esperi abans de tornar-ho a intentar.',
'token' => 'Aquest token de recuperació de contrasenya és invàlid.',
'user' => 'No existeix cap usuari amb aquest correu.',
];

27
lang/ca/pireon.php Normal file
View File

@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
return [
'sign_in' => 'Entra',
'sign_in_intro' => 'Accedeix amb el teu correu i la teva contrasenya.',
'signing_in' => 'Comprovant les teves credencials…',
'password_grant_disabled' => 'L\'accés amb contrasenya està desactivat en aquesta instal·lació. Avisa un administrador.',
'server_unavailable' => 'El servidor d\'identitat no respon. No és cosa de les teves credencials; avisa un administrador.',
'sign_out' => 'Tanca la sessió',
'denied' => 'No s\'ha completat l\'accés: :reason',
'inactive' => 'El teu compte està desactivat. Contacta amb un administrador.',
'pending_approval' => 'El teu registre encara està pendent d\'aprovació per part d\'un administrador.',
'no_permission' => 'El teu compte no té permís per accedir a aquest tauler. Demana a un administrador que t\'assigni un rol.',
'cannot_grant_super_admin' => 'Només un super administrador pot concedir el rol de super administrador.',
'not_configured_title' => 'El client OAuth no està configurat',
'not_configured_body' => 'Registra aquesta aplicació a :server i omple PIREON_CLIENT_ID i PIREON_CLIENT_SECRET al fitxer .env.',
'account' => [
'remote_roles' => 'Rols al servidor d\'identitat',
'remote_roles_hint' => 'Només informatius: els permisos d\'aquesta aplicació es gestionen aquí, no al servidor OAuth.',
'managed_remotely' => 'Aquest camp es gestiona a :server i s\'actualitza a cada inici de sessió.',
],
];

31
lang/ca/rules.php Normal file
View File

@@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
return [
'translatable' => [
'type' => 'El camp :attribute ha de ser un text o un objecte de traduccions (idioma => text).',
'unsupported_locale' => 'L\'idioma «:locale» no està suportat a :attribute. Idiomes disponibles: :supported.',
'max' => 'La traducció de :attribute en «:locale» no pot superar els :max caràcters.',
'default_required' => 'Falta la traducció de :attribute en l\'idioma principal («:locale»).',
],
'slug' => [
'unique' => 'El slug «:slug» ja està en ús en l\'idioma «:locale».',
],
'applications' => [
'attributes' => [
'name' => 'nom',
'email' => 'correu',
'message' => 'missatge',
'organisation' => 'entitat',
'hours_per_week' => 'hores per setmana',
'consent' => 'consentiment',
],
],
'pages' => [
'cannot_publish' => 'No tens permís per publicar pàgines.',
],
];

20
lang/ca/site.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
/*
* Texts the public API returns to the public frontend, in the language the
* visitor is browsing in. They are rendered by the frontend as-is.
*/
return [
'telemetry' => [
'disabled' => 'El report d\'URL no trobades està desactivat en aquest servidor.',
'forbidden' => 'Token d\'ingesta no vàlid.',
],
'applications' => [
'received' => 'Hem rebut el teu missatge. Et contestem tan aviat com puguem.',
'closed' => 'Ara mateix no acceptem missatges. Torna-ho a provar d\'aquí a una estona.',
],
];

290
lang/ca/validation.php Normal file
View File

@@ -0,0 +1,290 @@
<?php
declare(strict_types=1);
return [
'accepted' => ':Attribute ha de ser acceptat.',
'accepted_if' => 'El :attribute s\'ha d\'acceptar quan :other és :value.',
'active_url' => ':Attribute no és un URL vàlid.',
'after' => ':Attribute ha de ser una data posterior a :date.',
'after_or_equal' => ':Attribute ha de ser una data posterior o igual a :date.',
'alpha' => ':Attribute només pot contenir lletres.',
'alpha_dash' => ':Attribute només pot contenir lletres, números i guions.',
'alpha_num' => ':Attribute només pot contenir lletres i números.',
'any_of' => 'El camp :attribute no és vàlid.',
'array' => ':Attribute ha de ser una matriu.',
'array_keys' => 'The :attribute field must only contain the following keys: :values.',
'ascii' => 'El :attribute només ha de contenir caràcters i símbols alfanumèrics d\'un sol byte.',
'base64' => 'The :attribute field must be a valid Base64 string.',
'before' => ':Attribute ha de ser una data anterior a :date.',
'before_or_equal' => ':Attribute ha de ser una data anterior o igual a :date.',
'between' => [
'array' => ':Attribute ha de tenir entre :min - :max ítems.',
'file' => ':Attribute ha de pesar entre :min - :max kilobytes.',
'numeric' => ':Attribute ha d\'estar entre :min - :max.',
'string' => ':Attribute ha de tenir entre :min - :max caràcters.',
],
'boolean' => 'El camp :attribute ha de ser verdader o fals',
'can' => 'El camp :attribute conté un valor no autoritzat.',
'confirmed' => 'La confirmació de :attribute no coincideix.',
'contains' => 'Al camp :attribute li falta un valor obligatori.',
'current_password' => 'La contrasenya és incorrecta.',
'date' => ':Attribute no és una data vàlida.',
'date_equals' => 'El :attribute ha de ser una data igual a :date.',
'date_format' => 'El camp :attribute no concorda amb el format :format.',
'decimal' => 'El :attribute ha de tenir :decimal decimals.',
'declined' => 'Els :attribute s\'han de rebutjar.',
'declined_if' => 'El :attribute s\'ha de rebutjar quan :other és :value.',
'different' => ':Attribute i :other han de ser diferents.',
'digits' => ':Attribute ha de tenir :digits dígits.',
'digits_between' => ':Attribute ha de tenir entre :min i :max dígits.',
'dimensions' => 'Les dimensions de la imatge :attribute no són vàlides.',
'distinct' => 'El camp :attribute té un valor duplicat.',
'doesnt_contain' => 'El camp :attribute no ha de contenir cap dels següents: :values.',
'doesnt_end_with' => 'El :attribute no pot acabar amb un dels següents: :values.',
'doesnt_start_with' => 'El :attribute no pot començar amb un dels següents: :values.',
'email' => ':Attribute no és un e-mail vàlid',
'encoding' => 'El camp :attribute s\'ha de codificar en :encoding.',
'ends_with' => 'La :attribute ha d\'acabar amb una de les següents: :values.',
'enum' => 'El :attribute seleccionat no és vàlid.',
'exists' => ':Attribute és invàlid.',
'extensions' => 'El camp :attribute ha de tenir una de les extensions següents: :values.',
'file' => 'El camp :attribute ha de ser un arxiu.',
'filled' => 'El camp :attribute és obligatori.',
'gt' => [
'array' => 'El :attribute ha de tenir més de :value ítems.',
'file' => 'El :attribute ha de ser superior a :value kilobytes.',
'numeric' => 'El :attribute ha de ser superior a :value.',
'string' => 'El :attribute ha de superar els :value caràcters.',
],
'gte' => [
'array' => 'El :attribute ha de tenir :value ítems o més.',
'file' => 'El :attribute ha de ser igual o superior a :value kilobytes.',
'numeric' => 'El :attribute ha de ser igual o superior a :value.',
'string' => 'El :attribute ha de ser igual o superior a :value caràcters.',
],
'hex_color' => 'El camp :attribute ha de ser un color hexadecimal vàlid.',
'image' => ':Attribute ha de ser una imatge.',
'in' => ':Attribute és invàlid',
'in_array' => 'El camp :attribute no existeix dintre de :other.',
'in_array_keys' => 'El camp :attribute ha de contenir almenys una de les tecles següents: :values.',
'integer' => ':Attribute ha de ser un nombre enter.',
'ip' => ':Attribute ha de ser una adreça IP vàlida.',
'ipv4' => ':Attribute ha de ser una adreça IPv4 vàlida.',
'ipv6' => ':Attribute ha de ser una adreça IPv6 vàlida.',
'json' => 'El camp :attribute ha de ser una cadena JSON vàlida.',
'list' => 'El camp :attribute ha de ser una llista.',
'lowercase' => 'El :attribute ha d\'anar en minúscula.',
'lt' => [
'array' => 'El :attribute ha de tenir menys de :value ítems.',
'file' => 'El :attribute ha de ser inferior a :value kilobytes.',
'numeric' => 'El :attribute ha de ser inferior a :value.',
'string' => 'El :attribute no ha de superar els :value caràcters.',
],
'lte' => [
'array' => 'El :attribute no ha de tenir més de :value ítems.',
'file' => 'El :attribute ha de ser igual o inferior a :value kilobytes.',
'numeric' => 'El :attribute ha de ser igual o inferior a :value.',
'string' => 'El :attribute ha de ser igual o inferior a :value caràcters.',
],
'mac_address' => 'El :attribute ha de ser una adreça MAC vàlida.',
'max' => [
'array' => ':Attribute no pot tenir més de :max ítems.',
'file' => ':Attribute no pot ser més gran que :max kilobytes.',
'numeric' => ':Attribute no pot ser més gran que :max.',
'string' => ':Attribute no pot ser més gran que :max caràcters.',
],
'max_digits' => 'El :attribute no ha de tenir més de :max dígits.',
'mimes' => ':Attribute ha de ser un arxiu amb format: :values.',
'mimetypes' => ':Attribute ha de ser un arxiu amb format: :values.',
'min' => [
'array' => ':Attribute ha de tenir almenys :min ítems.',
'file' => 'La mida de :attribute ha de ser d\'almenys :min kilobytes.',
'numeric' => 'La mida de :attribute ha de ser d\'almenys :min.',
'string' => ':Attribute ha de contenir almenys :min caràcters.',
],
'min_digits' => 'El :attribute ha de tenir almenys :min dígits.',
'missing' => 'El camp :attribute ha de faltar.',
'missing_if' => 'El camp :attribute ha de faltar quan :other és :value.',
'missing_unless' => 'El camp :attribute ha de faltar, tret que :other sigui :value.',
'missing_with' => 'El camp :attribute ha de faltar quan hi ha :values.',
'missing_with_all' => 'El camp :attribute ha de faltar quan n\'hi ha :values.',
'multiple_of' => 'La :attribute ha de ser un múltiple de :value',
'not_in' => ':Attribute és invàlid.',
'not_regex' => 'El format de :attribute no és vàlid.',
'numeric' => ':Attribute ha de ser numèric.',
'password' => [
'letters' => 'El :attribute ha de contenir almenys una lletra.',
'mixed' => 'El :attribute ha de contenir almenys una lletra majúscula i una minúscula.',
'numbers' => 'El :attribute ha de contenir almenys un número.',
'symbols' => 'El :attribute ha de contenir almenys un símbol.',
'uncompromised' => 'El :attribute donat ha aparegut en una filtració de dades. Si us plau, trieu un :attribute diferent.',
],
'present' => 'El camp :attribute ha d\'existir.',
'present_if' => 'El camp :attribute ha d\'estar present quan :other és :value.',
'present_unless' => 'El camp :attribute ha d\'estar present tret que :other sigui :value.',
'present_with' => 'El camp :attribute ha d\'estar present quan n\'hi ha :values.',
'present_with_all' => 'El camp :attribute ha d\'estar present quan n\'hi ha :values.',
'prohibited' => 'La :attribute camp està prohibit.',
'prohibited_if' => 'La :attribute camp és prohibida quan :other és :value.',
'prohibited_if_accepted' => 'El camp :attribute està prohibit quan s’accepta :other.',
'prohibited_if_declined' => 'El camp :attribute està prohibit quan es declina :other.',
'prohibited_unless' => 'La :attribute camp és prohibida, tret que :other és en :values.',
'prohibits' => 'El camp :attribute prohibeix la presència de :other.',
'regex' => 'El format de :attribute és invàlid.',
'required' => 'El camp :attribute és obligatori.',
'required_array_keys' => 'El camp :attribute ha de contenir entrades per a: :values.',
'required_if' => 'El camp :attribute és obligatori quan :other és :value.',
'required_if_accepted' => 'El camp :attribute és obligatori quan s\'accepta :other.',
'required_if_declined' => 'El camp :attribute és obligatori quan es rebutja :other.',
'required_unless' => 'El camp :attribute és obligatori a no ser que :other sigui a :values.',
'required_with' => 'El camp :attribute és obligatori quan hi ha :values.',
'required_with_all' => 'El camp :attribute és obligatori quan hi ha :values.',
'required_without' => 'El camp :attribute és obligatori quan no hi ha :values.',
'required_without_all' => 'El camp :attribute és obligatori quan no hi ha cap valor dels següents: :values.',
'same' => ':Attribute i :other han de coincidir.',
'size' => [
'array' => ':Attribute ha de contenir :size ítems.',
'file' => 'La mida de :attribute ha de ser :size kilobytes.',
'numeric' => 'La mida de :attribute ha de ser :size.',
'string' => ':Attribute ha de contenir :size caràcters.',
],
'starts_with' => 'El :attribute ha de començar per un dels valors següents: :values',
'string' => 'El camp :attribute ha de ser una cadena.',
'timezone' => 'El camp :attribute ha de ser una zona vàlida.',
'ulid' => 'El :attribute ha de ser un ULID vàlid.',
'unique' => ':Attribute ja està registrat i no es pot repetir.',
'uploaded' => ':Attribute ha fallat al pujar.',
'uppercase' => 'El :attribute ha d\'anar en majúscula.',
'url' => ':Attribute no és una adreça web vàlida.',
'uuid' => 'El :attribute ha de ser un indentificador únic universal (UUID) vàlid.',
'attributes' => [
'address' => 'adreça',
'affiliate_url' => 'URL d\'afiliat',
'age' => 'edat',
'amount' => 'quantitat',
'announcement' => 'anunci',
'area' => 'zona',
'audience_prize' => 'premi del públic',
'audience_winner' => 'audience winner',
'available' => 'disponible',
'birthday' => 'aniversari',
'body' => 'cos',
'city' => 'ciutat',
'color' => 'color',
'company' => 'company',
'compilation' => 'compilació',
'concept' => 'concepte',
'conditions' => 'condicions',
'content' => 'contingut',
'contest' => 'contest',
'country' => 'país',
'cover' => 'coberta',
'created_at' => 'creat a',
'creator' => 'creador',
'currency' => 'moneda',
'current_password' => 'Contrasenya actual',
'customer' => 'client',
'date' => 'data',
'date_of_birth' => 'data de naixement',
'dates' => 'dates',
'day' => 'dia',
'deleted_at' => 'esborrat a les',
'description' => 'descripció',
'display_type' => 'tipus de visualització',
'district' => 'districte',
'duration' => 'durada',
'email' => 'adreça electrònica',
'excerpt' => 'extracte',
'filter' => 'filtre',
'finished_at' => 'acabat a les',
'first_name' => 'nom',
'gender' => 'gènere',
'grand_prize' => 'gran premi',
'group' => 'grup',
'hour' => 'hora',
'image' => 'imatge',
'image_desktop' => 'imatge d\'escriptori',
'image_main' => 'imatge principal',
'image_mobile' => 'imatge mòbil',
'images' => 'imatges',
'is_audience_winner' => 'és el guanyador del públic',
'is_hidden' => 'està amagat',
'is_subscribed' => 'està subscrit',
'is_visible' => 'és visible',
'is_winner' => 'és el guanyador',
'items' => 'elements',
'key' => 'clau',
'last_name' => 'cognom',
'lesson' => 'lliçó',
'line_address_1' => 'adreça de línia 1',
'line_address_2' => 'adreça de línia 2',
'login' => 'iniciar Sessió',
'message' => 'missatge',
'middle_name' => 'segon nom',
'minute' => 'minut',
'mobile' => 'mòbil',
'month' => 'mes',
'name' => 'nom',
'national_code' => 'codi nacional',
'number' => 'nombre',
'password' => 'contrasenya',
'password_confirmation' => 'confirmació de la contrasenya',
'phone' => 'telèfon',
'photo' => 'foto',
'portfolio' => 'cartera',
'postal_code' => 'Codi Postal',
'preview' => 'Vista prèvia',
'price' => 'preu',
'product_id' => 'ID del producte',
'product_uid' => 'UID del producte',
'product_uuid' => 'UUID del producte',
'promo_code' => 'codi promocional',
'province' => 'província',
'quantity' => 'quantitat',
'reason' => 'raó',
'recaptcha_response_field' => 'camp de resposta recaptcha',
'referee' => 'àrbitre',
'referees' => 'àrbitres',
'region' => 'region',
'reject_reason' => 'rebutjar la raó',
'remember' => 'recorda',
'restored_at' => 'restaurat a',
'result_text_under_image' => 'text del resultat sota la imatge',
'role' => 'paper',
'rule' => 'regla',
'rules' => 'regles',
'second' => 'segon',
'sex' => 'sexe',
'shipment' => 'enviament',
'short_text' => 'text breu',
'size' => 'mida',
'skills' => 'habilitats',
'slug' => 'llimac',
'specialization' => 'especialització',
'started_at' => 'va començar a',
'state' => 'estat',
'status' => 'estat',
'street' => 'carrer',
'student' => 'estudiant',
'subject' => 'assumpte',
'tag' => 'etiqueta',
'tags' => 'etiquetes',
'teacher' => 'professor',
'terms' => 'termes',
'test_description' => 'descripció de la prova',
'test_locale' => 'localització de prova',
'test_name' => 'nom de la prova',
'text' => 'text',
'time' => 'hora',
'title' => 'títol',
'type' => 'tipus',
'updated_at' => 'actualitzat a',
'user' => 'usuari',
'username' => 'usuari',
'value' => 'valor',
'winner' => 'winner',
'work' => 'work',
'year' => 'any',
],
];

229
lang/en.json Normal file
View File

@@ -0,0 +1,229 @@
{
"(and :count more error)": "(and :count more error)",
"(and :count more errors)": "(and :count more error)|(and :count more errors)|(and :count more errors)",
"A decryption key is required.": "A decryption key is required.",
"A Timeout Occurred": "A Timeout Occurred",
"Accept": "Accept",
"Accepted": "Accepted",
"Action": "Action",
"Actions": "Actions",
"Add": "Add",
"Add :name": "Add :name",
"Admin": "Admin",
"Agree": "Agree",
"All rights reserved.": "All rights reserved.",
"Already Reported": "Already Reported",
"Archive": "Archive",
"Assign": "Assign",
"Associate": "Associate",
"Attach": "Attach",
"Bad Gateway": "Bad Gateway",
"Bad Request": "Bad Request",
"Bandwidth Limit Exceeded": "Bandwidth Limit Exceeded",
"Browse": "Browse",
"Cancel": "Cancel",
"Choose": "Choose",
"Choose :name": "Choose :name",
"Choose File": "Choose File",
"Choose Image": "Choose Image",
"Click to copy": "Click to copy",
"Client Closed Request": "Client Closed Request",
"Close": "Close",
"Collapse": "Collapse",
"Collapse All": "Collapse All",
"Comment": "Comment",
"Confirm": "Confirm",
"Conflict": "Conflict",
"Connect": "Connect",
"Connection Closed Without Response": "Connection Closed Without Response",
"Connection Timed Out": "Connection Timed Out",
"Continue": "Continue",
"Create": "Create",
"Create :name": "Create :name",
"Created": "Created",
"Delete": "Delete",
"Delete :name": "Delete :name",
"Detach": "Detach",
"Details": "Details",
"Disable": "Disable",
"Discard": "Discard",
"Done": "Done",
"Down": "Down",
"Duplicate": "Duplicate",
"Duplicate :name": "Duplicate :name",
"Edit": "Edit",
"Edit :name": "Edit :name",
"Enable": "Enable",
"Encrypted environment file already exists.": "Encrypted environment file already exists.",
"Encrypted environment file not found.": "Encrypted environment file not found.",
"Environment file already exists.": "Environment file already exists.",
"Environment file not found.": "Environment file not found.",
"errors": "errors",
"Expand": "Expand",
"Expand All": "Expand All",
"Expectation Failed": "Expectation Failed",
"Explanation": "Explanation",
"Export": "Export",
"Export :name": "Export :name",
"Failed Dependency": "Failed Dependency",
"File": "File",
"Files": "Files",
"Forbidden": "Forbidden",
"Found": "Found",
"Gateway Timeout": "Gateway Timeout",
"Go Home": "Go Home",
"Go to page :page": "Go to page :page",
"Gone": "Gone",
"Hello!": "Hello!",
"Hide": "Hide",
"Hide :name": "Hide :name",
"Home": "Home",
"HTTP Version Not Supported": "HTTP Version Not Supported",
"I'm a teapot": "I'm a teapot",
"If you did not create an account, no further action is required.": "If you did not create an account, no further action is required.",
"If you did not request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.",
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:",
"IM Used": "IM Used",
"Image": "Image",
"Impersonate": "Impersonate",
"Impersonation": "Impersonation",
"Import": "Import",
"Import :name": "Import :name",
"Insufficient Storage": "Insufficient Storage",
"Internal Server Error": "Internal Server Error",
"Introduction": "Introduction",
"Invalid filename.": "Invalid filename.",
"Invalid JSON was returned from the route.": "Invalid JSON was returned from the route.",
"Invalid SSL Certificate": "Invalid SSL Certificate",
"Length Required": "Length Required",
"Like": "Like",
"Load": "Load",
"Localize": "Localize",
"Location": "Location",
"Locked": "Locked",
"Log In": "Log In",
"Log Out": "Log Out",
"Login": "Login",
"Logout": "Logout",
"Loop Detected": "Loop Detected",
"Maintenance Mode": "Maintenance Mode",
"Method Not Allowed": "Method Not Allowed",
"Misdirected Request": "Misdirected Request",
"Moved Permanently": "Moved Permanently",
"Multi-Status": "Multi-Status",
"Multiple Choices": "Multiple Choices",
"Network Authentication Required": "Network Authentication Required",
"Network Connect Timeout Error": "Network Connect Timeout Error",
"Network Read Timeout Error": "Network Read Timeout Error",
"New": "New",
"New :name": "New :name",
"No": "No",
"No Content": "No Content",
"Non-Authoritative Information": "Non-Authoritative Information",
"Not Acceptable": "Not Acceptable",
"Not Extended": "Not Extended",
"Not Found": "Not Found",
"Not Implemented": "Not Implemented",
"Not Modified": "Not Modified",
"of": "of",
"OK": "OK",
"Open": "Open",
"Open in a current window": "Open in a current window",
"Open in a new window": "Open in a new window",
"Open in a parent frame": "Open in a parent frame",
"Open in the topmost frame": "Open in the topmost frame",
"Open on the website": "Open on the website",
"Origin Is Unreachable": "Origin Is Unreachable",
"Page Expired": "Page Expired",
"Pagination Navigation": "Pagination Navigation",
"Partial Content": "Partial Content",
"Payload Too Large": "Payload Too Large",
"Payment Required": "Payment Required",
"Permanent Redirect": "Permanent Redirect",
"Please click the button below to verify your email address.": "Please click the button below to verify your email address.",
"Precondition Failed": "Precondition Failed",
"Precondition Required": "Precondition Required",
"Preview": "Preview",
"Price": "Price",
"Processing": "Processing",
"Proxy Authentication Required": "Proxy Authentication Required",
"Railgun Error": "Railgun Error",
"Range Not Satisfiable": "Range Not Satisfiable",
"Record": "Record",
"Regards,": "Regards,",
"Register": "Register",
"Request Header Fields Too Large": "Request Header Fields Too Large",
"Request Timeout": "Request Timeout",
"Reset Content": "Reset Content",
"Reset Password": "Reset Password",
"Reset your password": "Reset your password",
"Restore": "Restore",
"Restore :name": "Restore :name",
"results": "results",
"Retry With": "Retry With",
"Save": "Save",
"Save & Close": "Save & Close",
"Save & Return": "Save & Return",
"Save :name": "Save :name",
"Search": "Search",
"Search :name": "Search :name",
"See Other": "See Other",
"Select": "Select",
"Select All": "Select All",
"Send": "Send",
"Server Error": "Server Error",
"Service Unavailable": "Service Unavailable",
"Session Has Expired": "Session Has Expired",
"Settings": "Settings",
"Show": "Show",
"Show :name": "Show :name",
"Show All": "Show All",
"Showing": "Showing",
"Sign In": "Sign In",
"Solve": "Solve",
"SSL Handshake Failed": "SSL Handshake Failed",
"Start": "Start",
"Stop": "Stop",
"Submit": "Submit",
"Subscribe": "Subscribe",
"Switch": "Switch",
"Switch To Role": "Switch To Role",
"Switching Protocols": "Switching Protocols",
"Tag": "Tag",
"Tags": "Tags",
"Temporary Redirect": "Temporary Redirect",
"The given data was invalid.": "The given data was invalid.",
"The response is not a streamed response.": "The response is not a streamed response.",
"The response is not a view.": "The response is not a view.",
"This action is unauthorized.": "This action is unauthorized.",
"This password reset link will expire in :count minutes.": "This password reset link will expire in :count minutes.",
"to": "to",
"Toggle navigation": "Toggle navigation",
"Too Early": "Too Early",
"Too Many Requests": "Too Many Requests",
"Translate": "Translate",
"Translate It": "Translate It",
"Unauthorized": "Unauthorized",
"Unavailable For Legal Reasons": "Unavailable For Legal Reasons",
"Unknown Error": "Unknown Error",
"Unpack": "Unpack",
"Unprocessable Entity": "Unprocessable Entity",
"Unsubscribe": "Unsubscribe",
"Unsupported Media Type": "Unsupported Media Type",
"Up": "Up",
"Update": "Update",
"Update :name": "Update :name",
"Upgrade Required": "Upgrade Required",
"URI Too Long": "URI Too Long",
"Use Proxy": "Use Proxy",
"User": "User",
"Variant Also Negotiates": "Variant Also Negotiates",
"Verify Email Address": "Verify Email Address",
"Verify your email address": "Verify your email address",
"View": "View",
"View :name": "View :name",
"Web Server is Down": "Web Server is Down",
"Whoops!": "Whoops!",
"Yes": "Yes",
"You are receiving this email because we received a password reset request for your account.": "You are receiving this email because we received a password reset request for your account."
}

119
lang/en/actions.php Normal file
View File

@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
return [
'accept' => 'Accept',
'action' => 'Action',
'actions' => 'Actions',
'add' => 'Add',
'admin' => 'Admin',
'agree' => 'Agree',
'archive' => 'Archive',
'assign' => 'Assign',
'associate' => 'Associate',
'attach' => 'Attach',
'browse' => 'Browse',
'cancel' => 'Cancel',
'choose' => 'Choose',
'choose_file' => 'Choose File',
'choose_image' => 'Choose Image',
'click_to_copy' => 'Click to copy',
'close' => 'Close',
'collapse' => 'Collapse',
'collapse_all' => 'Collapse All',
'comment' => 'Comment',
'confirm' => 'Confirm',
'connect' => 'Connect',
'create' => 'Create',
'delete' => 'Delete',
'detach' => 'Detach',
'details' => 'Details',
'disable' => 'Disable',
'discard' => 'Discard',
'done' => 'Done',
'down' => 'Down',
'duplicate' => 'Duplicate',
'edit' => 'Edit',
'enable' => 'Enable',
'expand' => 'Expand',
'expand_all' => 'Expand All',
'explanation' => 'Explanation',
'export' => 'Export',
'file' => 'File',
'files' => 'Files',
'go_home' => 'Go Home',
'hide' => 'Hide',
'home' => 'Home',
'image' => 'Image',
'impersonate' => 'Impersonate',
'impersonation' => 'Impersonation',
'import' => 'Import',
'introduction' => 'Introduction',
'like' => 'Like',
'load' => 'Load',
'localize' => 'Localize',
'log_in' => 'Log In',
'log_out' => 'Log Out',
'named' => [
'add' => 'Add :name',
'choose' => 'Choose :name',
'create' => 'Create :name',
'delete' => 'Delete :name',
'duplicate' => 'Duplicate :name',
'edit' => 'Edit :name',
'export' => 'Export :name',
'hide' => 'Hide :name',
'import' => 'Import :name',
'new' => 'New :name',
'restore' => 'Restore :name',
'save' => 'Save :name',
'search' => 'Search :name',
'show' => 'Show :name',
'update' => 'Update :name',
'view' => 'View :name',
],
'new' => 'New',
'no' => 'No',
'open' => 'Open',
'open_website' => 'Open on the website',
'preview' => 'Preview',
'price' => 'Price',
'record' => 'Record',
'restore' => 'Restore',
'save' => 'Save',
'save_and_close' => 'Save & Close',
'save_and_return' => 'Save & Return',
'search' => 'Search',
'select' => 'Select',
'select_all' => 'Select All',
'send' => 'Send',
'settings' => 'Settings',
'show' => 'Show',
'show_all' => 'Show All',
'sign_in' => 'Sign In',
'solve' => 'Solve',
'start' => 'Start',
'stop' => 'Stop',
'submit' => 'Submit',
'subscribe' => 'Subscribe',
'switch' => 'Switch',
'switch_to_role' => 'Switch To Role',
'tag' => 'Tag',
'tags' => 'Tags',
'target_link' => [
'blank' => 'Open in a new window',
'parent' => 'Open in a parent frame',
'self' => 'Open in a current window',
'top' => 'Open in the topmost frame',
],
'translate' => 'Translate',
'translate_it' => 'Translate It',
'unpack' => 'Unpack',
'unsubscribe' => 'Unsubscribe',
'up' => 'Up',
'update' => 'Update',
'user' => 'User',
'view' => 'View',
'yes' => 'Yes',
];

9
lang/en/auth.php Normal file
View File

@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
return [
'failed' => 'These credentials do not match our records.',
'password' => 'The provided password is incorrect.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
];

28
lang/en/console.php Normal file
View File

@@ -0,0 +1,28 @@
<?php
declare(strict_types=1);
return [
'prune' => [
'dry_run' => 'Dry run: nothing is deleted.',
'revisions' => 'Old history entries',
'trash' => 'Records erased for good',
'media' => 'Images nothing points at',
'missing_urls' => 'One-off 404s nobody asked for again',
'views' => 'Old reading figures',
],
'types' => [
'no_spec' => 'No specification published at public/openapi.yaml.',
'current' => 'The types are up to date.',
'stale' => 'The types no longer match the specification. Run: php artisan api:types',
'written' => ':count schemas written to :path',
],
'schedule' => [
'closed' => 'closed (its date passed)',
'pending' => 'Waiting for their publication date',
'off_site' => 'Off the site because they expired',
'summary' => '{0}No calls needed closing.|{1}Closed 1 expired call.|[2,*]Closed :count expired calls.',
],
];

7
lang/en/docs.php Normal file
View File

@@ -0,0 +1,7 @@
<?php
declare(strict_types=1);
return [
'title' => 'API documentation',
];

68
lang/en/enums.php Normal file
View File

@@ -0,0 +1,68 @@
<?php
declare(strict_types=1);
return [
'page_status' => [
'draft' => 'Draft',
'review' => 'In review',
'published' => 'Published',
'archived' => 'Archived',
],
'project_status' => [
'idea' => 'Idea',
'active' => 'Active',
'paused' => 'Paused',
'completed' => 'Completed',
'archived' => 'Archived',
],
'missing_url_status' => [
'pending' => 'Undecided',
'resolved' => 'Resolved',
'ignored' => 'Ignored',
],
'review_event' => [
'requested' => 'Review asked for',
'returned' => 'Sent back',
'published' => 'Published',
'commented' => 'Comment',
],
'call_status' => [
'open' => 'Open',
'filled' => 'Filled',
'closed' => 'Closed',
],
'application_status' => [
'new' => 'Unanswered',
'contacted' => 'Contacted',
'accepted' => 'Accepted',
'declined' => 'Declined',
'spam' => 'Spam',
],
'application_kind' => [
'contribute' => 'Offering help',
'request' => 'Asking for help',
],
'radar_ring' => [
'adopt' => 'Adopt',
'trial' => 'Trial',
'assess' => 'Assess',
'hold' => 'Hold',
],
'technology_category' => [
'language' => 'Language',
'framework' => 'Framework',
'datastore' => 'Datastore',
'infrastructure' => 'Infrastructure',
'tool' => 'Tool',
'practice' => 'Practice',
],
];

149
lang/en/health.php Normal file
View File

@@ -0,0 +1,149 @@
<?php
declare(strict_types=1);
return [
'title' => '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.',
],
],
];

84
lang/en/http-statuses.php Normal file
View File

@@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
return [
'0' => 'Unknown Error',
'100' => 'Continue',
'101' => 'Switching Protocols',
'102' => 'Processing',
'200' => 'OK',
'201' => 'Created',
'202' => 'Accepted',
'203' => 'Non-Authoritative Information',
'204' => 'No Content',
'205' => 'Reset Content',
'206' => 'Partial Content',
'207' => 'Multi-Status',
'208' => 'Already Reported',
'226' => 'IM Used',
'300' => 'Multiple Choices',
'301' => 'Moved Permanently',
'302' => 'Found',
'303' => 'See Other',
'304' => 'Not Modified',
'305' => 'Use Proxy',
'307' => 'Temporary Redirect',
'308' => 'Permanent Redirect',
'400' => 'Bad Request',
'401' => 'Unauthorized',
'402' => 'Payment Required',
'403' => 'Forbidden',
'404' => 'Not Found',
'405' => 'Method Not Allowed',
'406' => 'Not Acceptable',
'407' => 'Proxy Authentication Required',
'408' => 'Request Timeout',
'409' => 'Conflict',
'410' => 'Gone',
'411' => 'Length Required',
'412' => 'Precondition Failed',
'413' => 'Payload Too Large',
'414' => 'URI Too Long',
'415' => 'Unsupported Media Type',
'416' => 'Range Not Satisfiable',
'417' => 'Expectation Failed',
'418' => 'I\'m a teapot',
'419' => 'Session Has Expired',
'421' => 'Misdirected Request',
'422' => 'Unprocessable Entity',
'423' => 'Locked',
'424' => 'Failed Dependency',
'425' => 'Too Early',
'426' => 'Upgrade Required',
'428' => 'Precondition Required',
'429' => 'Too Many Requests',
'431' => 'Request Header Fields Too Large',
'444' => 'Connection Closed Without Response',
'449' => 'Retry With',
'451' => 'Unavailable For Legal Reasons',
'499' => 'Client Closed Request',
'500' => 'Internal Server Error',
'501' => 'Not Implemented',
'502' => 'Bad Gateway',
'503' => 'Maintenance Mode',
'504' => 'Gateway Timeout',
'505' => 'HTTP Version Not Supported',
'506' => 'Variant Also Negotiates',
'507' => 'Insufficient Storage',
'508' => 'Loop Detected',
'509' => 'Bandwidth Limit Exceeded',
'510' => 'Not Extended',
'511' => 'Network Authentication Required',
'520' => 'Unknown Error',
'521' => 'Web Server is Down',
'522' => 'Connection Timed Out',
'523' => 'Origin Is Unreachable',
'524' => 'A Timeout Occurred',
'525' => 'SSL Handshake Failed',
'526' => 'Invalid SSL Certificate',
'527' => 'Railgun Error',
'598' => 'Network Read Timeout Error',
'599' => 'Network Connect Timeout Error',
'unknownError' => 'Unknown Error',
];

34
lang/en/maintenance.php Normal file
View File

@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
return [
'title' => 'Maintenance mode',
'subheading' => 'Affects the public site only. The panel and the admin API keep working.',
'badge' => 'Site down',
'status_up' => 'The public site is up.',
'status_down' => 'The public site is in maintenance.',
'since' => 'Since :time',
'lifts_at' => 'lifts at :time',
'panel_unaffected' => 'You can keep editing: the panel is unaffected.',
'notice' => 'Notice for visitors',
'notice_hint' => 'Returned by the public API in the 503 so the frontend can render it. Left empty, the default text is used.',
'default_message' => 'We are making changes to the site. Back shortly.',
'until' => 'Lifts automatically',
'until_hint' => 'Optional. Stops a forgotten maintenance from leaving the site down indefinitely.',
'enable' => 'Enable maintenance',
'enable_confirm' => 'Visitors will stop seeing the site and get the notice instead. The panel stays available.',
'disable' => 'Lift maintenance',
'save_message' => 'Save notice',
'enabled_notice' => 'The public site is now in maintenance',
'disabled_notice' => 'The public site is up again',
'message_saved' => 'Notice saved',
'bypass_hint' => 'The team can still see the real site using the preview token or from a trusted IP (SITE_TRUSTED_IPS).',
'no_permission' => 'You do not have permission to enable or lift maintenance.',
];

8
lang/en/pagination.php Normal file
View File

@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Next &raquo;',
'previous' => '&laquo; Previous',
];

842
lang/en/panel.php Normal file
View File

@@ -0,0 +1,842 @@
<?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',
],
'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',
],
],
];

11
lang/en/passwords.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
return [
'reset' => 'Your password has been reset.',
'sent' => 'We have emailed your password reset link.',
'throttled' => 'Please wait before retrying.',
'token' => 'This password reset token is invalid.',
'user' => 'We can\'t find a user with that email address.',
];

27
lang/en/pireon.php Normal file
View File

@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
return [
'sign_in' => 'Sign in',
'sign_in_intro' => 'Sign in with your e-mail and password.',
'signing_in' => 'Checking your credentials…',
'password_grant_disabled' => 'Password sign-in is switched off on this installation. Please tell an administrator.',
'server_unavailable' => 'The identity server is not responding. This is not about your credentials; please tell an administrator.',
'sign_out' => 'Sign out',
'denied' => 'Sign-in was not completed: :reason',
'inactive' => 'Your account is deactivated. Please contact an administrator.',
'pending_approval' => 'Your registration is still awaiting approval by an administrator.',
'no_permission' => 'Your account is not allowed into this panel. Ask an administrator to assign you a role.',
'cannot_grant_super_admin' => 'Only a super admin may grant the super admin role.',
'not_configured_title' => 'The OAuth client is not configured',
'not_configured_body' => 'Register this application at :server, then fill in PIREON_CLIENT_ID and PIREON_CLIENT_SECRET in your .env file.',
'account' => [
'remote_roles' => 'Roles on the identity server',
'remote_roles_hint' => 'Informational only: permissions for this application are managed here, not on the OAuth server.',
'managed_remotely' => 'This field is managed at :server and refreshed on every sign-in.',
],
];

31
lang/en/rules.php Normal file
View File

@@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
return [
'translatable' => [
'type' => 'The :attribute field must be a string or a translations object (locale => text).',
'unsupported_locale' => 'The locale ":locale" is not supported for :attribute. Available locales: :supported.',
'max' => 'The ":locale" translation of :attribute may not be longer than :max characters.',
'default_required' => 'The :attribute is missing a translation for the primary locale (":locale").',
],
'slug' => [
'unique' => 'The slug ":slug" is already in use for the ":locale" locale.',
],
'applications' => [
'attributes' => [
'name' => 'name',
'email' => 'e-mail',
'message' => 'message',
'organisation' => 'organisation',
'hours_per_week' => 'hours per week',
'consent' => 'consent',
],
],
'pages' => [
'cannot_publish' => 'You do not have permission to publish pages.',
],
];

20
lang/en/site.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
/*
* Texts the public API returns to the public frontend, in the language the
* visitor is browsing in. They are rendered by the frontend as-is.
*/
return [
'telemetry' => [
'disabled' => 'Not-found reporting is disabled on this server.',
'forbidden' => 'Invalid ingest token.',
],
'applications' => [
'received' => 'We got your message. We will get back to you as soon as we can.',
'closed' => 'We are not accepting messages right now. Please try again later.',
],
];

290
lang/en/validation.php Normal file
View File

@@ -0,0 +1,290 @@
<?php
declare(strict_types=1);
return [
'accepted' => 'The :attribute field must be accepted.',
'accepted_if' => 'The :attribute field must be accepted when :other is :value.',
'active_url' => 'The :attribute field must be a valid URL.',
'after' => 'The :attribute field must be a date after :date.',
'after_or_equal' => 'The :attribute field must be a date after or equal to :date.',
'alpha' => 'The :attribute field must only contain letters.',
'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.',
'alpha_num' => 'The :attribute field must only contain letters and numbers.',
'any_of' => 'The :attribute field is invalid.',
'array' => 'The :attribute field must be an array.',
'array_keys' => 'The :attribute field must only contain the following keys: :values.',
'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
'base64' => 'The :attribute field must be a valid Base64 string.',
'before' => 'The :attribute field must be a date before :date.',
'before_or_equal' => 'The :attribute field must be a date before or equal to :date.',
'between' => [
'array' => 'The :attribute field must have between :min and :max items.',
'file' => 'The :attribute field must be between :min and :max kilobytes.',
'numeric' => 'The :attribute field must be between :min and :max.',
'string' => 'The :attribute field must be between :min and :max characters.',
],
'boolean' => 'The :attribute field must be true or false.',
'can' => 'The :attribute field contains an unauthorized value.',
'confirmed' => 'The :attribute field confirmation does not match.',
'contains' => 'The :attribute field is missing a required value.',
'current_password' => 'The password is incorrect.',
'date' => 'The :attribute field must be a valid date.',
'date_equals' => 'The :attribute field must be a date equal to :date.',
'date_format' => 'The :attribute field must match the format :format.',
'decimal' => 'The :attribute field must have :decimal decimal places.',
'declined' => 'The :attribute field must be declined.',
'declined_if' => 'The :attribute field must be declined when :other is :value.',
'different' => 'The :attribute field and :other must be different.',
'digits' => 'The :attribute field must be :digits digits.',
'digits_between' => 'The :attribute field must be between :min and :max digits.',
'dimensions' => 'The :attribute field has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'doesnt_contain' => 'The :attribute field must not contain any of the following: :values.',
'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.',
'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',
'email' => 'The :attribute field must be a valid email address.',
'encoding' => 'The :attribute field must be encoded in :encoding.',
'ends_with' => 'The :attribute field must end with one of the following: :values.',
'enum' => 'The selected :attribute is invalid.',
'exists' => 'The selected :attribute is invalid.',
'extensions' => 'The :attribute field must have one of the following extensions: :values.',
'file' => 'The :attribute field must be a file.',
'filled' => 'The :attribute field must have a value.',
'gt' => [
'array' => 'The :attribute field must have more than :value items.',
'file' => 'The :attribute field must be greater than :value kilobytes.',
'numeric' => 'The :attribute field must be greater than :value.',
'string' => 'The :attribute field must be greater than :value characters.',
],
'gte' => [
'array' => 'The :attribute field must have :value items or more.',
'file' => 'The :attribute field must be greater than or equal to :value kilobytes.',
'numeric' => 'The :attribute field must be greater than or equal to :value.',
'string' => 'The :attribute field must be greater than or equal to :value characters.',
],
'hex_color' => 'The :attribute field must be a valid hexadecimal color.',
'image' => 'The :attribute field must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field must exist in :other.',
'in_array_keys' => 'The :attribute field must contain at least one of the following keys: :values.',
'integer' => 'The :attribute field must be an integer.',
'ip' => 'The :attribute field must be a valid IP address.',
'ipv4' => 'The :attribute field must be a valid IPv4 address.',
'ipv6' => 'The :attribute field must be a valid IPv6 address.',
'json' => 'The :attribute field must be a valid JSON string.',
'list' => 'The :attribute field must be a list.',
'lowercase' => 'The :attribute field must be lowercase.',
'lt' => [
'array' => 'The :attribute field must have less than :value items.',
'file' => 'The :attribute field must be less than :value kilobytes.',
'numeric' => 'The :attribute field must be less than :value.',
'string' => 'The :attribute field must be less than :value characters.',
],
'lte' => [
'array' => 'The :attribute field must not have more than :value items.',
'file' => 'The :attribute field must be less than or equal to :value kilobytes.',
'numeric' => 'The :attribute field must be less than or equal to :value.',
'string' => 'The :attribute field must be less than or equal to :value characters.',
],
'mac_address' => 'The :attribute field must be a valid MAC address.',
'max' => [
'array' => 'The :attribute field must not have more than :max items.',
'file' => 'The :attribute field must not be greater than :max kilobytes.',
'numeric' => 'The :attribute field must not be greater than :max.',
'string' => 'The :attribute field must not be greater than :max characters.',
],
'max_digits' => 'The :attribute field must not have more than :max digits.',
'mimes' => 'The :attribute field must be a file of type: :values.',
'mimetypes' => 'The :attribute field must be a file of type: :values.',
'min' => [
'array' => 'The :attribute field must have at least :min items.',
'file' => 'The :attribute field must be at least :min kilobytes.',
'numeric' => 'The :attribute field must be at least :min.',
'string' => 'The :attribute field must be at least :min characters.',
],
'min_digits' => 'The :attribute field must have at least :min digits.',
'missing' => 'The :attribute field must be missing.',
'missing_if' => 'The :attribute field must be missing when :other is :value.',
'missing_unless' => 'The :attribute field must be missing unless :other is :value.',
'missing_with' => 'The :attribute field must be missing when :values is present.',
'missing_with_all' => 'The :attribute field must be missing when :values are present.',
'multiple_of' => 'The :attribute field must be a multiple of :value.',
'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'The :attribute field format is invalid.',
'numeric' => 'The :attribute field must be a number.',
'password' => [
'letters' => 'The :attribute field must contain at least one letter.',
'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.',
'numbers' => 'The :attribute field must contain at least one number.',
'symbols' => 'The :attribute field must contain at least one symbol.',
'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
],
'present' => 'The :attribute field must be present.',
'present_if' => 'The :attribute field must be present when :other is :value.',
'present_unless' => 'The :attribute field must be present unless :other is :value.',
'present_with' => 'The :attribute field must be present when :values is present.',
'present_with_all' => 'The :attribute field must be present when :values are present.',
'prohibited' => 'The :attribute field is prohibited.',
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
'prohibited_if_accepted' => 'The :attribute field is prohibited when :other is accepted.',
'prohibited_if_declined' => 'The :attribute field is prohibited when :other is declined.',
'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
'prohibits' => 'The :attribute field prohibits :other from being present.',
'regex' => 'The :attribute field format is invalid.',
'required' => 'The :attribute field is required.',
'required_array_keys' => 'The :attribute field must contain entries for: :values.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
'required_if_declined' => 'The :attribute field is required when :other is declined.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values are present.',
'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute field must match :other.',
'size' => [
'array' => 'The :attribute field must contain :size items.',
'file' => 'The :attribute field must be :size kilobytes.',
'numeric' => 'The :attribute field must be :size.',
'string' => 'The :attribute field must be :size characters.',
],
'starts_with' => 'The :attribute field must start with one of the following: :values.',
'string' => 'The :attribute field must be a string.',
'timezone' => 'The :attribute field must be a valid timezone.',
'ulid' => 'The :attribute field must be a valid ULID.',
'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.',
'uppercase' => 'The :attribute field must be uppercase.',
'url' => 'The :attribute field must be a valid URL.',
'uuid' => 'The :attribute field must be a valid UUID.',
'attributes' => [
'address' => 'address',
'affiliate_url' => 'affiliate URL',
'age' => 'age',
'amount' => 'amount',
'announcement' => 'announcement',
'area' => 'area',
'audience_prize' => 'audience prize',
'audience_winner' => 'audience winner',
'available' => 'available',
'birthday' => 'birthday',
'body' => 'body',
'city' => 'city',
'color' => 'color',
'company' => 'company',
'compilation' => 'compilation',
'concept' => 'concept',
'conditions' => 'conditions',
'content' => 'content',
'contest' => 'contest',
'country' => 'country',
'cover' => 'cover',
'created_at' => 'created at',
'creator' => 'creator',
'currency' => 'currency',
'current_password' => 'current password',
'customer' => 'customer',
'date' => 'date',
'date_of_birth' => 'date of birth',
'dates' => 'dates',
'day' => 'day',
'deleted_at' => 'deleted at',
'description' => 'description',
'display_type' => 'display type',
'district' => 'district',
'duration' => 'duration',
'email' => 'email',
'excerpt' => 'excerpt',
'filter' => 'filter',
'finished_at' => 'finished at',
'first_name' => 'first name',
'gender' => 'gender',
'grand_prize' => 'grand prize',
'group' => 'group',
'hour' => 'hour',
'image' => 'image',
'image_desktop' => 'desktop image',
'image_main' => 'main image',
'image_mobile' => 'mobile image',
'images' => 'images',
'is_audience_winner' => 'is audience winner',
'is_hidden' => 'is hidden',
'is_subscribed' => 'is subscribed',
'is_visible' => 'is visible',
'is_winner' => 'is winner',
'items' => 'items',
'key' => 'key',
'last_name' => 'last name',
'lesson' => 'lesson',
'line_address_1' => 'line address 1',
'line_address_2' => 'line address 2',
'login' => 'login',
'message' => 'message',
'middle_name' => 'middle name',
'minute' => 'minute',
'mobile' => 'mobile',
'month' => 'month',
'name' => 'name',
'national_code' => 'national code',
'number' => 'number',
'password' => 'password',
'password_confirmation' => 'password confirmation',
'phone' => 'phone',
'photo' => 'photo',
'portfolio' => 'portfolio',
'postal_code' => 'postal code',
'preview' => 'preview',
'price' => 'price',
'product_id' => 'product ID',
'product_uid' => 'product UID',
'product_uuid' => 'product UUID',
'promo_code' => 'promo code',
'province' => 'province',
'quantity' => 'quantity',
'reason' => 'reason',
'recaptcha_response_field' => 'recaptcha response field',
'referee' => 'referee',
'referees' => 'referees',
'region' => 'region',
'reject_reason' => 'reject reason',
'remember' => 'remember',
'restored_at' => 'restored at',
'result_text_under_image' => 'result text under image',
'role' => 'role',
'rule' => 'rule',
'rules' => 'rules',
'second' => 'second',
'sex' => 'sex',
'shipment' => 'shipment',
'short_text' => 'short text',
'size' => 'size',
'skills' => 'skills',
'slug' => 'slug',
'specialization' => 'specialization',
'started_at' => 'started at',
'state' => 'state',
'status' => 'status',
'street' => 'street',
'student' => 'student',
'subject' => 'subject',
'tag' => 'tag',
'tags' => 'tags',
'teacher' => 'teacher',
'terms' => 'terms',
'test_description' => 'test description',
'test_locale' => 'test locale',
'test_name' => 'test name',
'text' => 'text',
'time' => 'time',
'title' => 'title',
'type' => 'type',
'updated_at' => 'updated at',
'user' => 'user',
'username' => 'username',
'value' => 'value',
'winner' => 'winner',
'work' => 'work',
'year' => 'year',
],
];

229
lang/es.json Normal file
View File

@@ -0,0 +1,229 @@
{
"(and :count more error)": "(y :count error más)",
"(and :count more errors)": "(y :count error más)|(y :count errores más)|(y :count errores más)",
"A decryption key is required.": "Se requiere una clave de descifrado.",
"A Timeout Occurred": "Se produjo un tiempo de espera",
"Accept": "Aceptar",
"Accepted": "Aceptado",
"Action": "Acción",
"Actions": "Acciones",
"Add": "Añadir",
"Add :name": "Agregar :name",
"Admin": "Administrar",
"Agree": "Aceptar",
"All rights reserved.": "Todos los derechos reservados.",
"Already Reported": "Ya Reportado",
"Archive": "Archivar",
"Assign": "Asignar",
"Associate": "Asociar",
"Attach": "Adjuntar",
"Bad Gateway": "Mala puerta de enlace",
"Bad Request": "Solicitud incorrecta",
"Bandwidth Limit Exceeded": "Límite de ancho de banda excedido",
"Browse": "Navegar",
"Cancel": "Cancelar",
"Choose": "Elija",
"Choose :name": "Elegir :name",
"Choose File": "Elija archivo",
"Choose Image": "Elegir Imagen",
"Click to copy": "Haga clic para copiar",
"Client Closed Request": "Solicitud cerrada del cliente",
"Close": "Cerrar",
"Collapse": "Colapsar",
"Collapse All": "Colapsar todo",
"Comment": "Comentar",
"Confirm": "Confirmar",
"Conflict": "Conflicto",
"Connect": "Conectar",
"Connection Closed Without Response": "Conexión cerrada sin respuesta",
"Connection Timed Out": "Tiempo de conexión agotado",
"Continue": "Continuar",
"Create": "Crear",
"Create :name": "Crear :name",
"Created": "Creado",
"Delete": "Eliminar",
"Delete :name": "Eliminar :name",
"Detach": "Desvincular",
"Details": "Detalles",
"Disable": "Deshabilitar",
"Discard": "Descartar",
"Done": "Hecho",
"Down": "Abajo",
"Duplicate": "Duplicar",
"Duplicate :name": "Duplicar :name",
"Edit": "Editar",
"Edit :name": "Editar :name",
"Enable": "Habilitar",
"Encrypted environment file already exists.": "El archivo de entorno cifrado ya existe.",
"Encrypted environment file not found.": "No se encontró el archivo de entorno cifrado.",
"Environment file already exists.": "El archivo de entorno ya existe.",
"Environment file not found.": "Archivo de entorno no encontrado.",
"errors": "errores",
"Expand": "Expandir",
"Expand All": "Expandir todo",
"Expectation Failed": "Expectativa fallida",
"Explanation": "Explicación",
"Export": "Exportar",
"Export :name": "Exportar :name",
"Failed Dependency": "Dependencia fallida",
"File": "Archivo",
"Files": "Archivos",
"Forbidden": "Prohibido",
"Found": "Encontrado",
"Gateway Timeout": "Tiempo de espera de puerta de enlace",
"Go Home": "Ir a inicio",
"Go to page :page": "Ir a la página :page",
"Gone": "Recurso no disponible",
"Hello!": "¡Hola!",
"Hide": "Ocultar",
"Hide :name": "Ocultar :name",
"Home": "Inicio",
"HTTP Version Not Supported": "Versión HTTP no compatible",
"I'm a teapot": "Soy una tetera",
"If you did not create an account, no further action is required.": "Si no ha creado una cuenta, no se requiere ninguna acción adicional.",
"If you did not request a password reset, no further action is required.": "Si no ha solicitado el restablecimiento de contraseña, omita este mensaje de correo electrónico.",
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Si está teniendo problemas al hacer clic en el botón \":actionText\", copie y pegue la URL de abajo\nen su navegador web:",
"IM Used": "IM usado",
"Image": "Imagen",
"Impersonate": "Personificar",
"Impersonation": "Personificación",
"Import": "Importar",
"Import :name": "Importar :name",
"Insufficient Storage": "Espacio insuficiente",
"Internal Server Error": "Error interno del servidor",
"Introduction": "Introducción",
"Invalid filename.": "Nombre de archivo no válido.",
"Invalid JSON was returned from the route.": "Se devolvió un JSON no válido desde la ruta.",
"Invalid SSL Certificate": "Certificado SSL no válido",
"Length Required": "Longitud requerida",
"Like": "Me gusta",
"Load": "Cargar",
"Localize": "Localizar",
"Location": "Ubicación",
"Locked": "Bloqueado",
"Log In": "Iniciar sesión",
"Log Out": "Finalizar sesión",
"Login": "Iniciar sesión",
"Logout": "Finalizar sesión",
"Loop Detected": "Bucle detectado",
"Maintenance Mode": "Modo de mantenimiento",
"Method Not Allowed": "Método no permitido",
"Misdirected Request": "Solicitud mal dirigida",
"Moved Permanently": "Movido permanentemente",
"Multi-Status": "Multiestado",
"Multiple Choices": "Múltiples opciones",
"Network Authentication Required": "Se requiere autenticación de red",
"Network Connect Timeout Error": "Error de tiempo de espera de conexión de red",
"Network Read Timeout Error": "Error de tiempo de espera de lectura de red",
"New": "Nuevo",
"New :name": "Nuevo :name",
"No": "No",
"No Content": "Sin contenido",
"Non-Authoritative Information": "Información no autorizada",
"Not Acceptable": "Inaceptable",
"Not Extended": "no extendido",
"Not Found": "No encontrado",
"Not Implemented": "No se ha implementado",
"Not Modified": "No modificado",
"of": "de",
"OK": "Correcto",
"Open": "Abrir",
"Open in a current window": "Abrir en una ventana actual",
"Open in a new window": "Abrir en una ventana nueva",
"Open in a parent frame": "Abrir en un marco principal",
"Open in the topmost frame": "Abrir en el marco superior",
"Open on the website": "Abrir en el sitio web",
"Origin Is Unreachable": "El origen es inalcanzable",
"Page Expired": "Página expirada",
"Pagination Navigation": "Navegación por los enlaces de paginación",
"Partial Content": "Contenido parcial",
"Payload Too Large": "Solicitud demasiado grande",
"Payment Required": "Pago requerido",
"Permanent Redirect": "Redirección permanente",
"Please click the button below to verify your email address.": "Por favor, haga clic en el botón de abajo para verificar su dirección de correo electrónico.",
"Precondition Failed": "Error de condición previa",
"Precondition Required": "Precondición requerida",
"Preview": "Previsualizar",
"Price": "Precio",
"Processing": "Procesando",
"Proxy Authentication Required": "Se requiere autenticación proxy",
"Railgun Error": "Error de cañón de riel",
"Range Not Satisfiable": "Rango no satisfactorio",
"Record": "Registro",
"Regards,": "Saludos,",
"Register": "Registrarse",
"Request Header Fields Too Large": "Campos de encabezado de solicitud demasiado grandes",
"Request Timeout": "Solicitud de tiempo de espera",
"Reset Content": "Restablecer contenido",
"Reset Password": "Restablecer contraseña",
"Reset your password": "Restablezca su contraseña",
"Restore": "Restaurar",
"Restore :name": "Restaurar :name",
"results": "resultados",
"Retry With": "Reintentar con",
"Save": "Guardar",
"Save & Close": "Guardar y cerrar",
"Save & Return": "Guardar y volver",
"Save :name": "Guardar :name",
"Search": "Buscar",
"Search :name": "Buscar :name",
"See Other": "Ver otros",
"Select": "Seleccione",
"Select All": "Seleccionar todo",
"Send": "Enviar",
"Server Error": "Error del servidor",
"Service Unavailable": "Servicio no disponible",
"Session Has Expired": "La sesión ha expirado",
"Settings": "Ajustes",
"Show": "Mostrar",
"Show :name": "Mostrar :name",
"Show All": "Mostrar todo",
"Showing": "Mostrando",
"Sign In": "Iniciar sesión",
"Solve": "Resolver",
"SSL Handshake Failed": "Protocolo de enlace SSL fallido",
"Start": "Comenzar",
"Stop": "Detener",
"Submit": "Enviar",
"Subscribe": "Suscriba",
"Switch": "Cambiar",
"Switch To Role": "Cambiar de rol",
"Switching Protocols": "Protocolos de conmutación",
"Tag": "Etiqueta",
"Tags": "Etiquetas",
"Temporary Redirect": "Redirección temporal",
"The given data was invalid.": "Los datos proporcionados no son válidos.",
"The response is not a streamed response.": "La respuesta no es una respuesta transmitida.",
"The response is not a view.": "La respuesta no es una vista.",
"This action is unauthorized.": "Esta acción no está autorizada.",
"This password reset link will expire in :count minutes.": "Este enlace de restablecimiento de contraseña expirará en :count minutos.",
"to": "al",
"Toggle navigation": "Alternar navegación",
"Too Early": "Demasiado temprano",
"Too Many Requests": "Demasiadas peticiones",
"Translate": "Traducir",
"Translate It": "Traducirlo",
"Unauthorized": "No autorizado",
"Unavailable For Legal Reasons": "No disponible por razones legales",
"Unknown Error": "Error desconocido",
"Unpack": "Desglosar",
"Unprocessable Entity": "Entidad no procesable",
"Unsubscribe": "Darse de baja",
"Unsupported Media Type": "Tipo de medio no admitido",
"Up": "Arriba",
"Update": "Actualizar",
"Update :name": "Actualizar :name",
"Upgrade Required": "Se requiere actualización",
"URI Too Long": "URI demasiado largo",
"Use Proxy": "Usa proxy",
"User": "Usuario",
"Variant Also Negotiates": "Variante También Negocia",
"Verify Email Address": "Confirme su correo electrónico",
"Verify your email address": "Verifique su dirección de correo electrónico",
"View": "Ver",
"View :name": "Ver :name",
"Web Server is Down": "El servidor web está caído",
"Whoops!": "¡Ups!",
"Yes": "Sí",
"You are receiving this email because we received a password reset request for your account.": "Ha recibido este mensaje porque se solicitó un restablecimiento de contraseña para su cuenta."
}

119
lang/es/actions.php Normal file
View File

@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
return [
'accept' => 'Aceptar',
'action' => 'Acción',
'actions' => 'Acciones',
'add' => 'Agregar',
'admin' => 'Administrar',
'agree' => 'Aceptar',
'archive' => 'Archivar',
'assign' => 'Asignar',
'associate' => 'Asociar',
'attach' => 'Adjuntar',
'browse' => 'Navegar',
'cancel' => 'Cancelar',
'choose' => 'Elegir',
'choose_file' => 'Elegir archivo',
'choose_image' => 'Elegir Imagen',
'click_to_copy' => 'Haga clic para copiar',
'close' => 'Cerrar',
'collapse' => 'Colapsar',
'collapse_all' => 'Colapsar todo',
'comment' => 'Comentar',
'confirm' => 'Confirmar',
'connect' => 'Conectar',
'create' => 'Crear',
'delete' => 'Borrar',
'detach' => 'Desasociar',
'details' => 'Detalles',
'disable' => 'Desactivar',
'discard' => 'Descartar',
'done' => 'Hecho',
'down' => 'Abajo',
'duplicate' => 'Duplicar',
'edit' => 'Editar',
'enable' => 'Permitir',
'expand' => 'Expandir',
'expand_all' => 'Expandir todo',
'explanation' => 'Explicación',
'export' => 'Exportar',
'file' => 'Archivo',
'files' => 'Archivos',
'go_home' => 'Ir a Inicio',
'hide' => 'Ocultar',
'home' => 'Inicio',
'image' => 'Imagen',
'impersonate' => 'Personificar',
'impersonation' => 'Personificación',
'import' => 'Importar',
'introduction' => 'Introducción',
'like' => 'Me gusta',
'load' => 'Cargar',
'localize' => 'Localizar',
'log_in' => 'Acceder',
'log_out' => 'Cerrar sesión',
'named' => [
'add' => 'Agregar :name',
'choose' => 'Elegir :name',
'create' => 'Crear :name',
'delete' => 'Eliminar :name',
'duplicate' => 'Duplicar :name',
'edit' => 'Editar :name',
'export' => 'Exportar :name',
'hide' => 'Ocultar :name',
'import' => 'Importar :name',
'new' => 'Nuevo :name',
'restore' => 'Restaurar :name',
'save' => 'Guardar :name',
'search' => 'Buscar :name',
'show' => 'Mostrar :name',
'update' => 'Actualizar :name',
'view' => 'Ver :name',
],
'new' => 'Nuevo',
'no' => 'No',
'open' => 'Abrir',
'open_website' => 'Abrir en el sitio web',
'preview' => 'Previsualizar',
'price' => 'Precio',
'record' => 'Registro',
'restore' => 'Restaurar',
'save' => 'Guardar',
'save_and_close' => 'Guardar y cerrar',
'save_and_return' => 'Guardar y volver',
'search' => 'Buscar',
'select' => 'Seleccionar',
'select_all' => 'Seleccionar todo',
'send' => 'Enviar',
'settings' => 'Ajustes',
'show' => 'Mostrar',
'show_all' => 'Mostrar todo',
'sign_in' => 'Iniciar sesión',
'solve' => 'Resolver',
'start' => 'Comenzar',
'stop' => 'Detener',
'submit' => 'Enviar',
'subscribe' => 'Suscribir',
'switch' => 'Cambiar',
'switch_to_role' => 'Cambiar de rol',
'tag' => 'Etiqueta',
'tags' => 'Etiquetas',
'target_link' => [
'blank' => 'Abrir en una ventana nueva',
'parent' => 'Abrir en el marco principal',
'self' => 'Abrir en la ventana actual',
'top' => 'Abrir en el marco superior',
],
'translate' => 'Traducir',
'translate_it' => 'Traducirlo',
'unpack' => 'Desglosar',
'unsubscribe' => 'Darse de baja',
'up' => 'Arriba',
'update' => 'Actualizar',
'user' => 'Usuario',
'view' => 'Ver',
'yes' => 'Sí',
];

9
lang/es/auth.php Normal file
View File

@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
return [
'failed' => 'Estas credenciales no coinciden con nuestros registros.',
'password' => 'La contraseña es incorrecta.',
'throttle' => 'Demasiados intentos de acceso. Por favor intente nuevamente en :seconds segundos.',
];

28
lang/es/console.php Normal file
View File

@@ -0,0 +1,28 @@
<?php
declare(strict_types=1);
return [
'prune' => [
'dry_run' => 'Simulación: no se borra nada.',
'revisions' => 'Entradas de historial antiguas',
'trash' => 'Registros eliminados definitivamente',
'media' => 'Imágenes que ya no usa nadie',
'missing_urls' => 'URLs no encontradas de una sola visita',
'views' => 'Cifras de lectura antiguas',
],
'types' => [
'no_spec' => 'No hay especificación publicada en public/openapi.yaml.',
'current' => 'Los tipos están al día.',
'stale' => 'Los tipos no coinciden con la especificación. Ejecuta: php artisan api:types',
'written' => ':count esquemas escritos en :path',
],
'schedule' => [
'closed' => 'cerrada (pasó su fecha)',
'pending' => 'Esperando su fecha de publicación',
'off_site' => 'Fuera de la web por haber caducado',
'summary' => '{0}No había convocatorias que cerrar.|{1}Se cerró 1 convocatoria vencida.|[2,*]Se cerraron :count convocatorias vencidas.',
],
];

7
lang/es/docs.php Normal file
View File

@@ -0,0 +1,7 @@
<?php
declare(strict_types=1);
return [
'title' => 'Documentación de la API',
];

68
lang/es/enums.php Normal file
View File

@@ -0,0 +1,68 @@
<?php
declare(strict_types=1);
return [
'page_status' => [
'draft' => 'Borrador',
'review' => 'En revisión',
'published' => 'Publicada',
'archived' => 'Archivada',
],
'project_status' => [
'idea' => 'Idea',
'active' => 'En marcha',
'paused' => 'En pausa',
'completed' => 'Terminado',
'archived' => 'Archivado',
],
'missing_url_status' => [
'pending' => 'Sin decidir',
'resolved' => 'Resuelta',
'ignored' => 'Ignorada',
],
'review_event' => [
'requested' => 'Pedida revisión',
'returned' => 'Devuelto',
'published' => 'Publicado',
'commented' => 'Comentario',
],
'call_status' => [
'open' => 'Abierta',
'filled' => 'Cubierta',
'closed' => 'Cerrada',
],
'application_status' => [
'new' => 'Sin responder',
'contacted' => 'Contactada',
'accepted' => 'Aceptada',
'declined' => 'Descartada',
'spam' => 'Spam',
],
'application_kind' => [
'contribute' => 'Quiere ayudar',
'request' => 'Pide ayuda',
],
'radar_ring' => [
'adopt' => 'Adoptar',
'trial' => 'Probar',
'assess' => 'Evaluar',
'hold' => 'Evitar',
],
'technology_category' => [
'language' => 'Lenguaje',
'framework' => 'Framework',
'datastore' => 'Almacenamiento',
'infrastructure' => 'Infraestructura',
'tool' => 'Herramienta',
'practice' => 'Práctica',
],
];

149
lang/es/health.php Normal file
View File

@@ -0,0 +1,149 @@
<?php
declare(strict_types=1);
return [
'title' => 'Salud del sitio',
'subheading' => 'Lo que está mal en la web pública y no se ve desde aquí.',
'all_clear' => 'Todo en orden. No hay nada que arreglar.',
'problem_summary' => '{1}Hay 1 cosa que revisar|[2,*]Hay :count cosas que revisar',
'problem_hint' => 'La web está en otro sitio, así que estos fallos no se ven editando: se ven visitándola.',
'passing' => '{1}1 comprobación sin problemas|[2,*]:count comprobaciones sin problemas',
'and_more' => 'y :count más',
'refreshed' => 'Comprobaciones actualizadas',
'severity' => [
'ok' => 'Bien',
'warning' => 'Aviso',
'error' => 'Fallo',
],
'actions' => [
'refresh' => 'Volver a comprobar',
'go_fix' => 'Ir a arreglarlo',
],
'bits' => [
'description' => 'sin meta descripción',
'cover' => 'sin portada',
'gallery_image' => 'Imagen de galería sin describir',
'itself' => 'sí misma',
],
'checks' => [
'missing-slugs' => [
'title' => 'Slugs que faltan',
'ok' => 'Todo lo traducido tiene su slug.',
'problem' => '{1}1 registro está traducido a un idioma pero no tiene slug en él, así que su URL en ese idioma no existe o apunta a un 404.|[2,*]:count registros están traducidos a algún idioma sin tener slug en él, así que esas URLs no existen o apuntan a un 404.',
],
'duplicate-slugs' => [
'title' => 'Slugs repetidos',
'ok' => 'Cada URL resuelve a un solo registro.',
'problem' => '{1}1 slug está repetido dentro del mismo idioma: la API resuelve esa URL al primero que encuentra.|[2,*]:count slugs están repetidos dentro del mismo idioma: la API resuelve esas URLs al primero que encuentra.',
],
'broken-images' => [
'title' => 'Imágenes rotas',
'ok' => 'Todos los archivos de imagen están donde deben.',
'problem' => '{1}1 imagen que la web está publicando ya no existe en disco o no se pudo leer.|[2,*]:count imágenes que la web está publicando ya no existen en disco o no se pudieron leer.',
],
'missing-translations' => [
'title' => 'Contenido sin traducir',
'ok' => 'Todo lo publicado está en los tres idiomas.',
'problem' => '{1}1 registro publicado no está traducido a algún idioma, así que esa versión de la web se queda sin él.|[2,*]:count registros publicados no están traducidos a algún idioma, así que esas versiones de la web se quedan sin ellos.',
],
'images-without-alt' => [
'title' => 'Imágenes sin describir',
'ok' => 'Todas las imágenes publicadas tienen texto alternativo.',
'problem' => '{1}1 imagen publicada no tiene texto alternativo: quien no puede verla no se entera de que está.|[2,*]:count imágenes publicadas no tienen texto alternativo: quien no puede verlas no se entera de que están.',
],
'incomplete-seo' => [
'title' => 'Fichas incompletas',
'ok' => 'Todo lo publicado tiene descripción y portada.',
'problem' => '{1}1 registro publicado no tiene qué enseñar en un buscador o al pegar el enlace en un chat.|[2,*]:count registros publicados no tienen qué enseñar en un buscador o al pegar el enlace en un chat.',
],
'expired-calls' => [
'title' => 'Convocatorias vencidas',
'ok' => 'Ninguna convocatoria abierta ha pasado su fecha de cierre.',
'problem' => '{1}1 convocatoria sigue marcada como abierta con la fecha de cierre pasada. Ya no sale en la web, pero infla el contador del panel.|[2,*]:count convocatorias siguen marcadas como abiertas con la fecha de cierre pasada. Ya no salen en la web, pero inflan el contador del panel.',
],
'unanswered-submissions' => [
'title' => 'Gente esperando respuesta',
'ok' => 'No hay nadie esperando desde hace más de una semana.',
'problem' => '{1}1 persona escribió hace más de una semana y sigue sin respuesta.|[2,*]:count personas escribieron hace más de una semana y siguen sin respuesta.',
],
'stalled-media' => [
'title' => 'Imágenes sin procesar',
'ok' => 'No hay imágenes esperando a procesarse.',
'problem' => '{1}1 imagen lleva más de una hora sin procesarse: probablemente no hay ningún worker de colas ni scheduler corriendo.|[2,*]:count imágenes llevan más de una hora sin procesarse: probablemente no hay ningún worker de colas ni scheduler corriendo.',
],
'services-without-work' => [
'title' => 'Servicios sin obra detrás',
'ok' => 'Todos los servicios publicados enseñan trabajo real.',
'problem' => '{1}1 servicio publicado no enlaza ningún proyecto publicado: es una promesa, no una oferta.|[2,*]:count servicios publicados no enlazan ningún proyecto publicado: son promesas, no ofertas.',
],
'clients-without-logo' => [
'title' => 'Clientes sin logo',
'ok' => 'Todos los clientes del muro tienen logo.',
'problem' => '{1}1 cliente sale en el muro de logos sin tener logo: es un hueco que parece un fallo.|[2,*]:count clientes salen en el muro de logos sin tener logo: son huecos que parecen un fallo.',
],
'testimonials-missing-original' => [
'title' => 'Citas sin el original',
'ok' => 'Todas las citas tienen las palabras que se dijeron de verdad.',
'problem' => '{1}1 testimonio no tiene la cita en su idioma original: se está publicando una traducción de algo que nadie puede comprobar.|[2,*]:count testimonios no tienen la cita en su idioma original: se están publicando traducciones de algo que nadie puede comprobar.',
],
'talks-without-speaker' => [
'title' => 'Charlas sin ponente',
'ok' => 'Todas las charlas tienen a alguien acreditado.',
'problem' => '{1}1 charla no dice quién la dio, así que no sale en el perfil de nadie.|[2,*]:count charlas no dicen quién las dio, así que no salen en el perfil de nadie.',
],
'broken-redirects' => [
'title' => 'Redirecciones rotas',
'ok' => 'Ninguna redirección da vueltas ni encadena con otra.',
'problem' => '{1}1 redirección apunta a sí misma o a otra redirección: el navegador da vueltas o paga un salto de más.|[2,*]:count redirecciones apuntan a sí mismas o a otra redirección: el navegador da vueltas o paga saltos de más.',
],
'redirects-to-nowhere' => [
'title' => 'Redirecciones a ninguna parte',
'ok' => 'Todas las redirecciones llevan a una página que existe.',
'problem' => '{1}1 redirección lleva a una dirección que ya no responde: es peor que el 404 que venía a evitar.|[2,*]:count redirecciones llevan a direcciones que ya no responden: es peor que el 404 que venían a evitar.',
],
'missing-urls' => [
'title' => 'URLs que nadie encuentra',
'ok' => 'Ninguna dirección rota esperando redirección.',
'problem' => '{1}1 dirección da 404 y se ha pedido más de una vez: cada visita que llega por ahí se pierde.|[2,*]:count direcciones dan 404 y se han pedido más de una vez: cada visita que llega por ahí se pierde.',
],
'stale-reviews' => [
'title' => 'Revisiones sin contestar',
'ok' => 'Nadie lleva esperando una revisión.',
'problem' => '{1}1 cosa lleva más de una semana esperando revisión: quien la escribió cree que algo está pasando.|[2,*]:count cosas llevan más de una semana esperando revisión: quien las escribió cree que algo está pasando.',
],
'stale-translations' => [
'title' => 'Traducciones desactualizadas',
'ok' => 'Ninguna traducción se ha quedado atrás del original.',
'problem' => '{1}1 registro traducido dice algo que el original dejó de decir: existe la traducción, así que nada más lo avisa.|[2,*]:count registros traducidos dicen algo que el original dejó de decir: existen las traducciones, así que nada más lo avisa.',
],
'stale-repositories' => [
'title' => 'Repositorios que no sincronizan',
'ok' => 'Todos los repositorios sincronizan bien.',
'problem' => '{1}1 repositorio lleva varios intentos fallando. La web sigue enseñando sus últimos números, que ya no son ciertos.|[2,*]:count repositorios llevan varios intentos fallando. La web sigue enseñando sus últimos números, que ya no son ciertos.',
],
],
];

84
lang/es/http-statuses.php Normal file
View File

@@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
return [
'0' => 'Error desconocido',
'100' => 'Continuar',
'101' => 'Protocolos de conmutación',
'102' => 'Procesando',
'200' => 'DE ACUERDO',
'201' => 'Creado',
'202' => 'Aceptado',
'203' => 'Información no autorizada',
'204' => 'Sin contenido',
'205' => 'Restablecer contenido',
'206' => 'Contenido parcial',
'207' => 'Multiestado',
'208' => 'Ya Reportado',
'226' => 'IM usado',
'300' => 'Múltiples opciones',
'301' => 'Movido permanentemente',
'302' => 'Encontrado',
'303' => 'Ver otros',
'304' => 'No modificado',
'305' => 'Usa proxy',
'307' => 'Redirección temporal',
'308' => 'Redirección permanente',
'400' => 'Solicitud incorrecta',
'401' => 'No autorizado',
'402' => 'Pago requerido',
'403' => 'Prohibido',
'404' => 'No encontrado',
'405' => 'Método no permitido',
'406' => 'Inaceptable',
'407' => 'Se requiere autenticación proxy',
'408' => 'Solicitud de tiempo de espera',
'409' => 'Conflicto',
'410' => 'Recurso no disponible',
'411' => 'Longitud requerida',
'412' => 'Error de condición previa',
'413' => 'Solicitud demasiado grande',
'414' => 'URI demasiado largo',
'415' => 'Tipo de medio no admitido',
'416' => 'Rango no satisfactorio',
'417' => 'Expectativa fallida',
'418' => 'Soy una tetera',
'419' => 'La sesión ha expirado',
'421' => 'Solicitud mal dirigida',
'422' => 'Entidad no procesable',
'423' => 'Bloqueado',
'424' => 'Dependencia fallida',
'425' => 'Demasiado temprano',
'426' => 'Se requiere actualización',
'428' => 'Precondición requerida',
'429' => 'Demasiadas solicitudes',
'431' => 'Campos de encabezado de solicitud demasiado grandes',
'444' => 'Conexión cerrada sin respuesta',
'449' => 'Reintentar con',
'451' => 'No disponible por razones legales',
'499' => 'Solicitud cerrada del cliente',
'500' => 'Error interno del servidor',
'501' => 'No se ha implementado',
'502' => 'Mala puerta de enlace',
'503' => 'Modo de mantenimiento',
'504' => 'Tiempo de espera de puerta de enlace',
'505' => 'Versión HTTP no compatible',
'506' => 'Variante También Negocia',
'507' => 'Espacio insuficiente',
'508' => 'Bucle detectado',
'509' => 'Límite de ancho de banda excedido',
'510' => 'no extendido',
'511' => 'Se requiere autenticación de red',
'520' => 'Error desconocido',
'521' => 'El servidor web está caído',
'522' => 'Tiempo de conexión agotado',
'523' => 'El origen es inalcanzable',
'524' => 'Se produjo un tiempo de espera',
'525' => 'Protocolo de enlace SSL fallido',
'526' => 'Certificado SSL no válido',
'527' => 'Error de cañón de riel',
'598' => 'Error de tiempo de espera de lectura de red',
'599' => 'Error de tiempo de espera de conexión de red',
'unknownError' => 'Error desconocido',
];

34
lang/es/maintenance.php Normal file
View File

@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
return [
'title' => 'Modo mantenimiento',
'subheading' => 'Afecta solo a la web pública. El panel y la API de administración siguen funcionando.',
'badge' => 'Web caída',
'status_up' => 'La web pública está operativa.',
'status_down' => 'La web pública está en mantenimiento.',
'since' => 'Desde :time',
'lifts_at' => 'se levanta el :time',
'panel_unaffected' => 'Podéis seguir editando: el panel no se ve afectado.',
'notice' => 'Aviso para los visitantes',
'notice_hint' => 'Lo devuelve la API pública en el 503 para que el frontend lo muestre. Si lo dejas vacío se usa el texto por defecto.',
'default_message' => 'Estamos haciendo cambios en la web. Volvemos en un rato.',
'until' => 'Se levanta automáticamente',
'until_hint' => 'Opcional. Evita que un mantenimiento olvidado deje la web caída indefinidamente.',
'enable' => 'Activar mantenimiento',
'enable_confirm' => 'Los visitantes dejarán de ver la web y recibirán el aviso. El panel seguirá disponible.',
'disable' => 'Levantar mantenimiento',
'save_message' => 'Guardar aviso',
'enabled_notice' => 'La web pública está en mantenimiento',
'disabled_notice' => 'La web pública vuelve a estar operativa',
'message_saved' => 'Aviso guardado',
'bypass_hint' => 'El equipo puede seguir viendo la web real usando el token de preview o desde una IP de confianza (SITE_TRUSTED_IPS).',
'no_permission' => 'No tienes permiso para activar o levantar el mantenimiento.',
];

8
lang/es/pagination.php Normal file
View File

@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => 'Siguiente &raquo;',
'previous' => '&laquo; Anterior',
];

844
lang/es/panel.php Normal file
View File

@@ -0,0 +1,844 @@
<?php
declare(strict_types=1);
return [
'untitled' => 'Sin título',
'duplicates' => [
'title' => 'Título parecido',
'body' => 'Ya existe algo muy parecido: :titles',
'open' => 'Ver ficha existente',
],
'sessions' => [
'title' => 'Sesiones',
'this_one' => 'Esta sesión',
'unknown_device' => 'Dispositivo desconocido',
'fields' => [
'ip_address' => 'Dirección IP',
'device' => 'Dispositivo',
'last_activity' => 'Última actividad',
],
'actions' => [
'revoke' => 'Cerrar sesión',
],
'revoked' => 'Sesión cerrada. Esa conexión deja de valer en la próxima petición.',
'empty' => [
'heading' => 'Sin sesiones abiertas',
'description' => 'Nadie ha iniciado sesión con esta cuenta, o llevan tiempo sin usarla.',
],
],
'environment' => [
'production' => 'Producción — esto es real',
'other' => 'Entorno de :name',
],
'concurrency' => [
'title' => 'No se ha guardado',
'body' => 'Alguien más ha cambiado esto mientras lo editabas. Recarga la página para ver la versión actual: si guardas ahora, perderías ese cambio.',
'body_with_author' => ':name ha cambiado esto mientras lo editabas. Recarga la página para ver su versión: si guardas ahora, perderías ese cambio.',
],
'presence' => [
'title' => 'Alguien más lo tiene abierto',
'body' => 'Ahora mismo también lo está editando: :names.',
],
'groups' => [
'collective' => 'Colectivo',
'content' => 'Contenido',
'administration' => 'Administración',
],
'language' => [
'label' => 'Idioma',
'switch' => 'Cambiar idioma',
],
'pages' => [
'label' => 'Página',
'plural' => 'Páginas',
'sections' => [
'content' => 'Contenido',
'content_hint' => 'Cada pestaña es un idioma. El idioma principal es obligatorio; el resto se rellena con él si lo dejas vacío.',
'publishing' => 'Publicación',
'seo' => 'SEO',
'seo_hint' => 'Metadatos para buscadores y redes sociales.',
],
'fields' => [
'title' => 'Título',
'slug' => 'Slug',
'excerpt' => 'Extracto',
'body' => 'Contenido',
'meta_title' => 'Meta título',
'meta_description' => 'Meta descripción',
'category' => 'Categoría',
'author' => 'Autor',
'status' => 'Estado',
'featured_image' => 'Imagen destacada',
'featured_image_alt' => 'Texto alternativo',
'featured_image_alt_hint' => 'Qué se ve en la imagen, para quien no puede verla. Si es puramente decorativa, déjalo vacío.',
'is_featured' => 'Destacada',
'published_at' => 'Fecha de publicación',
'published_at_hint' => 'Con una fecha futura, la página no sale en la web hasta que llegue.',
'unpublish_at' => 'Retirar el',
'unpublish_at_hint' => 'Opcional. Al llegar, la página desaparece sola de la web. Para avisos con fecha de caducidad.',
'translations' => 'Traducciones',
],
'filters' => [
'translated_in' => 'Traducida a',
'missing_translation' => 'Sin traducir a',
],
'actions' => [
'publish' => 'Publicar',
'unpublish' => 'Despublicar',
],
],
'categories' => [
'label' => 'Categoría',
'plural' => 'Categorías',
'fields' => [
'name' => 'Nombre',
'slug' => 'Slug',
'description' => 'Descripción',
'color' => 'Color',
'position' => 'Orden',
'is_visible' => 'Visible',
'pages_count' => 'Páginas',
],
],
'users' => [
'label' => 'Usuario',
'plural' => 'Usuarios',
'sections' => [
'identity' => 'Identidad',
'identity_hint' => 'Gestionada por el servidor OAuth. Se actualiza automáticamente en cada inicio de sesión.',
'access' => 'Acceso y permisos',
'access_hint' => 'Gestionado por esta aplicación.',
],
'fields' => [
'name' => 'Nombre',
'email' => 'Correo electrónico',
'oauth_id' => 'ID en el servidor OAuth',
'roles' => 'Roles',
'locale' => 'Idioma preferido',
'is_active' => 'Activo',
'last_login_at' => 'Último acceso',
'remote_roles' => 'Roles remotos',
'never' => 'Nunca',
],
'actions' => [
'activate' => 'Activar',
'deactivate' => 'Desactivar',
],
],
'roles' => [
'label' => 'Rol',
'plural' => 'Roles',
'fields' => [
'name' => 'Nombre',
'permissions' => 'Permisos',
'users_count' => 'Usuarios',
],
'protected' => 'Rol protegido: no se puede eliminar.',
'select_all' => 'Seleccionar todos',
],
'permissions' => [
'groups' => [
'general' => 'General',
'projects' => 'Proyectos',
'members' => 'Miembros',
'services' => 'Servicios',
'clients' => 'Clientes',
'testimonials' => 'Testimonios',
'talks' => 'Charlas',
'technologies' => 'Tecnologías',
'calls' => 'Convocatorias',
'applications' => 'Buzón',
'repositories' => 'Repositorios',
'media' => 'Medios',
'redirects' => 'Redirecciones',
'pages' => 'Páginas',
'categories' => 'Categorías',
'users' => 'Usuarios',
'roles' => 'Roles',
'settings' => 'Ajustes',
],
'abilities' => [
'sync' => 'Sincronizar',
'maintenance' => 'Activar modo mantenimiento',
'panel_access' => 'Acceder al panel',
'view_any' => 'Listar',
'view' => 'Ver detalle',
'create' => 'Crear',
'update' => 'Editar',
'delete' => 'Eliminar',
'restore' => 'Restaurar',
'force_delete' => 'Eliminar definitivamente',
'publish' => 'Publicar',
],
],
'actions' => [
'duplicate' => 'Duplicar',
'duplicate_heading' => 'Duplicar este registro',
'duplicated' => 'Duplicado. Ponle un slug y una fecha antes de publicarlo.',
],
'preview' => [
'label' => 'Vista previa',
'heading' => 'Enlaces de vista previa',
'hint' => 'Se pueden compartir y caducan en :hours horas. Cada uno sirve solo para este registro.',
'open' => 'Abrir',
],
'trash' => [
'title' => 'Papelera',
'subheading' => 'Todo lo borrado, junto, con el botón de deshacer al lado.',
'empty' => 'La papelera está vacía.',
'deleted_at' => 'Borrado :when',
'restore' => 'Recuperar',
'erase' => 'Eliminar',
'erase_confirm' => 'Esto no se puede deshacer. ¿Seguro?',
'restored' => 'Recuperado',
'erased' => 'Eliminado definitivamente',
],
'today' => [
'all_clear' => 'No hay nada esperando',
'all_clear_hint' => 'Ni gente sin respuesta ni contenido a medias.',
],
'widgets' => [
'stats' => [
'pages' => 'Páginas',
'published' => 'Publicadas',
'users' => 'Usuarios activos',
'missing_translations' => 'Sin traducir',
'missing_translations_hint' => 'Páginas que faltan en algún idioma',
'projects' => 'Proyectos',
'projects_description' => 'Proyectos publicados',
'active_projects' => 'Proyectos en marcha',
'active_projects_description' => 'Buscando quien colabore',
'members' => 'Miembros',
'members_description' => 'Gente activa en el colectivo',
'open_calls' => 'Convocatorias abiertas',
'open_calls_description' => 'Buscando participantes',
'good_first_issues' => 'Tareas para empezar',
'good_first_issues_description' => 'Libres para cogerlas',
'help_wanted' => 'Se busca ayuda',
'help_wanted_description' => 'Issues abiertas',
],
'growth_chart' => 'Crecimiento en el tiempo',
'growth' => [
'projects' => 'Proyectos',
'members' => 'Miembros',
'issues' => 'Tareas para empezar',
],
'languages_chart' => 'Reparto de lenguajes',
'languages' => [
'repositories' => 'Repositorios',
],
],
'projects' => [
'label' => 'Proyecto',
'plural' => 'Proyectos',
'sections' => [
'content' => 'Contenido',
'writeup' => 'Decisiones y postmortem',
'writeup_hint' => 'Lo que una consultora no puede publicar y vosotros sí. Es el contenido que otros desarrolladores leen de verdad.',
'details' => 'Detalles',
],
'fields' => [
'title' => 'Título',
'slug' => 'Slug',
'tagline' => 'Frase resumen',
'description' => 'Descripción',
'decisions' => 'Decisiones técnicas',
'decisions_hint' => 'Por qué elegisteis lo que elegisteis, y qué descartasteis.',
'postmortem' => 'Postmortem',
'postmortem_hint' => 'Qué salió mal y qué aprendisteis. No hace falta que sea un éxito.',
'status' => 'Estado',
'published_at' => 'Publicado el',
'unpublish_at' => 'Retirar el',
'unpublish_at_hint' => 'Opcional. Al llegar, el proyecto desaparece solo de la web.',
'published_at_hint' => 'Vacío = no visible en la web pública.',
'technologies' => 'Tecnologías',
'lead' => 'Responsable',
'members' => 'Participantes',
'client' => 'Para quién',
'client_hint' => 'La ONG, asociación o entidad destinataria. Si no está en la lista, puedes crearla aquí mismo.',
'services' => 'Servicios',
'demo_url' => 'Demo',
'cover_image' => 'Imagen de portada',
'cover_image_alt' => 'Texto alternativo',
'cover_image_alt_hint' => 'Qué se ve en la portada, para quien no puede verla. Si es puramente decorativa, déjalo vacío.',
'started_at' => 'Inicio',
'ended_at' => 'Fin',
'is_featured' => 'Destacado',
'needs_help' => 'Busca gente',
'needs_help_hint' => 'Lo muestra en la sección de colaboración de la web.',
],
'filters' => ['unpublished' => 'Sin publicar'],
'actions' => ['publish' => 'Publicar'],
],
'members' => [
'label' => 'Miembro',
'plural' => 'Miembros',
'sections' => [
'profile' => 'Perfil público',
'profile_hint' => 'Es el escaparate personal de cada uno: la moneda con la que se paga el trabajo voluntario.',
'membership' => 'Pertenencia',
],
'fields' => [
'name' => 'Nombre',
'slug' => 'Slug',
'headline' => 'Titular',
'bio' => 'Biografía',
'avatar' => 'Foto',
'avatar_hint' => 'El texto alternativo es el nombre de la persona, así que no hay que escribirlo.',
'github_username' => 'Usuario de GitHub',
'user' => 'Cuenta del panel',
'user_hint' => 'Opcional. La mayoría de miembros no necesita acceso al admin.',
'technologies' => 'Tecnologías',
'projects' => 'Proyectos',
'is_public' => 'Visible en la web',
'is_founder' => 'Fundador/a',
'position' => 'Orden',
'joined_at' => 'Se unió',
'left_at' => 'Se fue',
'left_at_hint' => 'Sale del listado actual pero conserva su historial.',
],
'filters' => ['current' => 'Solo actuales'],
],
'technologies' => [
'label' => 'Tecnología',
'plural' => 'Tecnologías',
'off_radar' => 'Fuera del radar',
'sections' => ['prose' => 'Descripción y nota del radar'],
'fields' => [
'name' => 'Nombre',
'slug' => 'Slug',
'category' => 'Categoría',
'radar_ring' => 'Anillo del radar',
'radar_ring_hint' => 'Vacío = se puede usar como etiqueta pero no sale en el radar.',
'radar_note' => 'Nota del radar',
'radar_note_hint' => 'Por qué está en ese anillo. Es la parte que la gente lee.',
'description' => 'Descripción',
'color' => 'Color',
'logo' => 'Logo',
'logo_hint' => 'Preferiblemente SVG o PNG con fondo transparente. Sale en el radar y en las fichas.',
'website' => 'Web',
'position' => 'Orden',
'projects' => 'Proyectos',
'members' => 'Miembros',
],
],
'calls' => [
'label' => 'Convocatoria',
'plural' => 'Convocatorias',
'no_project' => 'General',
'sections' => [
'commitment' => 'Compromiso',
'commitment_hint' => 'Lo escaso aquí es el tiempo, no el dinero. Ser concreto es lo que hace que alguien se decida.',
],
'fields' => [
'title' => 'Título',
'slug' => 'Slug',
'description' => 'Descripción',
'what_you_get' => 'Qué te llevas',
'what_you_get_hint' => 'Aprendizaje, portfolio, referencias, mentoría. Decirlo abiertamente suma.',
'status' => 'Estado',
'project' => 'Proyecto',
'project_hint' => 'Vacío = convocatoria general del colectivo.',
'technologies' => 'Tecnologías',
'hours_per_week' => 'Horas por semana',
'duration_weeks' => 'Semanas',
'seniority' => 'Nivel',
'commitment' => 'Dedicación',
'opens_at' => 'Abre',
'closes_at' => 'Cierra',
],
'seniority' => ['any' => 'Cualquiera', 'junior' => 'Junior', 'mid' => 'Intermedio', 'senior' => 'Senior'],
'commitment_summary' => '{0}:hoursh/semana|{1}:hoursh/semana · :weeks semana|[2,*]:hoursh/semana · :weeks semanas',
],
'applications' => [
'label' => 'Solicitud',
'plural' => 'Buzón',
'general_enquiry' => 'Mensaje general',
'badge_tooltip' => 'Personas esperando respuesta',
'saved' => 'Notas guardadas',
'reply_subject' => 'Re: :subject',
'sections' => [
'message' => 'Lo que nos han escrito',
'internal' => 'Seguimiento interno',
'internal_hint' => 'Solo lo veis vosotros. Quien escribió no ve nada de esto.',
],
'fields' => [
'name' => 'Nombre',
'email' => 'Email',
'organisation' => 'Entidad',
'kind' => 'Tipo',
'subject' => 'Sobre',
'call' => 'Convocatoria',
'hours_per_week' => 'Horas/semana',
'hours_asked' => 'La convocatoria pedía :hours h/semana',
'message' => 'Mensaje',
'links' => 'Enlaces',
'link_name' => 'Nombre',
'link_url' => 'URL',
'status' => 'Estado',
'received_at' => 'Recibida',
'handled_by' => 'Atendida por',
'handled_at' => 'Atendida el',
'locale' => 'Escribió en',
'notes' => 'Notas',
'notes_empty' => 'Sin notas',
'notes_hint' => 'Para el resto del equipo: qué habéis hablado, en qué quedó.',
],
'actions' => [
'group' => 'Marcar como',
'open' => 'Abrir solicitud',
'reply' => 'Responder',
'notes' => 'Notas',
'contacted' => 'Contactada',
'accepted' => 'Aceptada',
'declined' => 'Descartada',
'spam' => 'Spam',
],
'tabs' => [
'pending' => 'Sin responder',
'contribute' => 'Quieren ayudar',
'request' => 'Piden ayuda',
'all' => 'Todas',
'spam' => 'Spam',
],
'empty' => [
'heading' => 'No hay nada que responder',
'description' => 'Aquí llega lo que la gente escribe desde la web pública.',
'call_heading' => 'Todavía no ha escrito nadie',
],
'notification' => [
'contribute' => ':name quiere echar una mano',
'request' => ':name pide ayuda para un proyecto',
],
'mail' => [
'greeting' => 'Hay alguien esperando respuesta.',
'from' => 'De :name (:email)',
],
],
'publishing' => [
'published_count' => '{0}No había nada que publicar: ya estaba en la web.|{1}Publicada 1 ficha.|[2,*]Publicadas :count fichas.',
'scheduled' => 'Programada',
'expired' => 'Caducada',
'expired_at' => 'Caducó el :time',
'expires_in' => 'Caduca :time',
'live' => 'En la web',
'unpublished' => 'Sin publicar',
],
'gallery' => [
'title' => 'Galería',
'missing_alt' => 'Sin describir',
'pending' => 'Procesando',
'fields' => [
'image' => 'Imagen',
'alt' => 'Texto alternativo',
'alt_hint' => 'Qué se ve, para quien no puede verlo.',
'caption' => 'Pie de foto',
'caption_hint' => 'Se muestra a todo el mundo. Aquí van los «antes» y «después».',
'size' => 'Tamaño',
],
'actions' => [
'add' => 'Añadir imagen',
],
'empty' => [
'heading' => 'Sin imágenes todavía',
'description' => 'Capturas, antes y después, lo que haga falta para que se entienda el proyecto. Se pueden reordenar arrastrando.',
],
],
'services' => [
'label' => 'Servicio',
'plural' => 'Servicios',
'no_projects' => 'Sin ningún proyecto detrás: es una promesa, no una oferta.',
'sections' => [
'evidence' => 'Lo que lo respalda',
'evidence_hint' => 'Un servicio que no puede señalar trabajo real es una promesa. Enlaza los proyectos que lo demuestran.',
'seo' => 'SEO',
],
'fields' => [
'title' => 'Título',
'slug' => 'Slug',
'tagline' => 'Frase resumen',
'tagline_hint' => 'Una línea. Es lo que se lee en la tarjeta de la portada.',
'description' => 'Descripción',
'projects' => 'Proyectos',
'technologies' => 'Tecnologías',
'icon' => 'Icono',
'icon_hint' => 'Nombre de un icono de Heroicons, por ejemplo heroicon-o-code-bracket.',
'position' => 'Orden',
'is_published' => 'Publicado',
'is_featured' => 'Destacado',
'is_featured_hint' => 'Para que la portada pueda elegir unos pocos.',
'published_at' => 'Publicar el',
'published_at_hint' => 'Con una fecha futura, no sale en la web hasta que llegue.',
'unpublish_at' => 'Retirar el',
'unpublish_at_hint' => 'Opcional. Al llegar, desaparece solo de la web.',
'meta_title' => 'Meta título',
'meta_description' => 'Meta descripción',
'translations' => 'Traducciones',
],
'actions' => [
'publish' => 'Publicar',
],
],
'clients' => [
'label' => 'Cliente',
'plural' => 'Clientes',
'fields' => [
'name' => 'Nombre',
'slug' => 'Slug',
'sector' => 'Sector',
'logo' => 'Logo',
'logo_hint' => 'Preferiblemente en SVG o PNG con fondo transparente.',
'url' => 'Web',
'projects' => 'Proyectos',
'is_public' => 'Se puede mostrar',
'is_public_hint' => 'Desmárcalo si la entidad prefiere no aparecer en la web.',
'position' => 'Orden',
],
'filters' => [
'without_logo' => 'Sin logo',
],
],
'testimonials' => [
'label' => 'Testimonio',
'plural' => 'Testimonios',
'sections' => [
'quote' => 'La cita',
'quote_hint' => 'Escribe en el idioma original lo que dijeron de verdad. Las otras pestañas son traducciones vuestras, y la web lo indicará.',
'author' => 'Quién lo dijo',
'about' => 'De qué habla',
'about_hint' => 'Enlázalo a un cliente, un proyecto o un servicio: así la web pide los que tocan en cada página en vez de tener una lista suelta.',
],
'fields' => [
'quote' => 'Cita',
'original_locale' => 'Idioma original',
'original_locale_hint' => 'En qué idioma lo dijeron. Traducir una cita es ponerle palabras en la boca a alguien, así que la web lo avisa.',
'author_name' => 'Nombre',
'author_role' => 'Cargo',
'avatar' => 'Foto',
'client' => 'Cliente',
'project' => 'Proyecto',
'service' => 'Servicio',
'is_public' => 'Visible',
'position' => 'Orden',
'given_at' => 'Fecha',
],
],
'talks' => [
'label' => 'Charla',
'plural' => 'Charlas',
'fields' => [
'title' => 'Título',
'title_hint' => 'No se traduce: es el nombre de una charla que se dio una vez y en un idioma.',
'language' => 'Idioma',
'summary' => 'Resumen',
'event' => 'Evento',
'city' => 'Ciudad',
'held_at' => 'Fecha',
'video_url' => 'Vídeo',
'slides_url' => 'Diapositivas',
'member' => 'Ponente',
'member_hint' => 'Aparecerá también en su perfil, sin escribirlo dos veces.',
'project' => 'Proyecto',
'is_public' => 'Visible',
],
],
'repositories' => [
'label' => 'Repositorio',
'plural' => 'Repositorios',
'never_synced' => 'Nunca',
'fields' => [
'provider' => 'Proveedor',
'full_name' => 'Repositorio',
'full_name_hint' => 'Formato «owner/repo». Todo lo demás se trae solo.',
'project' => 'Proyecto',
'is_primary' => 'Principal',
'is_primary_hint' => 'El que representa al proyecto cuando hay varios.',
'show_publicly' => 'Visible en la web',
'language' => 'Lenguaje',
'contributors' => 'Contribuidores',
'good_first_issues' => 'Tareas para empezar',
'pushed_at' => 'Último push',
'last_synced_at' => 'Sincronizado',
],
'filters' => ['failing' => 'Con errores', 'dormant' => 'Sin actividad'],
'actions' => ['sync' => 'Sincronizar', 'sync_selected' => 'Sincronizar seleccionados'],
'notifications' => [
'synced' => 'Repositorio sincronizado',
'synced_body' => ':stars★ · :issues tareas para empezar',
'sync_failed' => 'No se pudo sincronizar',
'queued' => ':count repositorios en cola',
],
],
'revisions' => [
'title' => 'Historial',
'system' => 'El sistema',
'before' => 'Antes',
'after' => 'Después',
'no_changes' => 'Esta entrada no registra cambios de campos.',
'restored' => 'Valores restaurados',
'restore_confirm' => 'Se devolverán los campos a como estaban en ese momento. La restauración queda registrada también, así que siempre se puede deshacer.',
'diff_heading' => 'Cambio de :author · :when',
'fields' => [
'event' => 'Qué pasó',
'author' => 'Quién',
'fields' => 'Campos',
'when' => 'Cuándo',
],
'events' => [
'created' => 'Creado',
'updated' => 'Editado',
'published' => 'Publicado',
'unpublished' => 'Despublicado',
'deleted' => 'Borrado',
'restored' => 'Recuperado',
'erased' => 'Eliminado del todo',
],
'actions' => [
'diff' => 'Ver cambio',
'restore' => 'Restaurar estos valores',
],
],
'media' => [
'label' => 'Archivo',
'plural' => 'Medios',
'subheading' => ':count archivos · :size MB en disco, contando las versiones derivadas.',
'pending' => 'Sin procesar',
'in_use' => 'En uso',
'orphan' => 'Sin usar',
'fields' => [
'file' => 'Archivo',
'size' => 'Medidas',
'versions' => 'Versiones',
'weight' => 'Peso',
'used' => 'Uso',
'error' => 'Error',
],
'filters' => [
'pending' => 'Sin procesar',
'failed' => 'Con error',
'orphans' => 'Que no usa nadie',
'missing' => 'Sin archivo en disco',
],
'actions' => [
'open' => 'Abrir',
'reprocess' => 'Reprocesar',
'reprocess_all' => 'Reprocesar todo',
'reprocess_all_hint' => 'Vuelve a generar medidas, versiones y placeholders de todas las imágenes. Es lo que hay que hacer tras cambiar los anchos o añadir un formato.',
'reprocess_queued' => 'Encolado. Se procesa en cuanto corra la cola.',
],
'empty' => [
'heading' => 'Todavía no hay archivos',
'description' => 'Aparecen aquí solos según se suben imágenes en proyectos, páginas, miembros o la vitrina.',
],
],
'redirects' => [
'label' => 'Redirección',
'plural' => 'Redirecciones',
'hint' => 'Rutas tal y como las ve la web, empezando por barra. Al renombrar un slug se crea una sola.',
'every_locale' => 'Todos los idiomas',
'automatic' => 'Automática',
'manual' => 'A mano',
'fields' => [
'from' => 'De',
'from_hint' => 'La dirección que dejó de funcionar.',
'to' => 'A',
'status' => 'Tipo',
'status_hint' => 'Permanente es lo normal: le dice a Google que actualice el enlace.',
'locale' => 'Idioma',
'locale_hint' => 'Déjalo vacío para que valga en los tres.',
'is_enabled' => 'Activa',
'hits' => 'Usos',
'origin' => 'Origen',
],
'statuses' => [
'301' => 'Permanente (301)',
'302' => 'Temporal (302)',
],
'filters' => [
'unused' => 'Sin usar todavía',
],
'empty' => [
'heading' => 'Todavía no hay redirecciones',
'description' => 'Se crean solas al cambiar el slug de algo publicado. Aquí puedes añadir a mano las de enlaces anteriores a esta web.',
],
],
'translations' => [
'filters' => [
'stale' => 'Traducción desactualizada',
],
],
'views' => [
'column' => 'Visitas',
'column_hint' => 'Lecturas de los últimos 30 días, sumando todos los idiomas. Vacío mientras el frontend no las reporte.',
'in_days' => 'en :days días',
'filters' => [
'unread' => 'Publicado y sin visitas',
],
],
'reviews' => [
'title' => 'Revisión',
'column' => 'Revisión',
'waiting' => 'Esperando',
'waiting_for_you' => 'Esperan tu revisión',
'waiting_for_you_hint' => 'Alguien terminó algo y no puede publicarlo.',
'anyone' => 'Cualquiera que pueda publicar',
'requested' => 'Pedida la revisión. Avisamos a quien puede publicarlo.',
'requested_count' => '{0}No había nada que pedir: ya estaba en revisión o publicado.|{1}Pedida la revisión de 1 ficha.|[2,*]Pedida la revisión de :count fichas.',
'returned' => 'Devuelto a quien lo escribió, con tu motivo.',
'fields' => [
'reviewer' => 'Se lo pides a',
'reviewer_hint' => 'Déjalo vacío y lo verá todo el que pueda publicar esto.',
'note' => 'Nota',
'note_hint' => 'Opcional. Lo que quien revise necesita saber antes de mirarlo.',
'reason' => 'Qué hay que cambiar',
'reason_hint' => 'Obligatorio: devolver algo sin decir por qué es lo que hace que nadie use la revisión.',
'event' => 'Qué pasó',
'who' => 'Quién',
'when' => 'Cuándo',
],
'filters' => [
'mine' => 'Esperando mi revisión',
],
'actions' => [
'request' => 'Pedir revisión',
'request_bulk' => 'Pedir revisión (selección)',
'request_heading' => 'Decir que esto ya está',
'request_hint' => 'Tú no puedes publicarlo, así que esto avisa a quien sí puede.',
'return' => 'Devolver',
'return_heading' => 'Devolverlo a quien lo escribió',
'comment' => 'Comentar',
'open' => 'Abrir',
],
'notification' => [
'title' => ':name pide que revises algo',
'returned' => ':name te ha devuelto algo',
],
'empty' => [
'heading' => 'Nada que comentar todavía',
'description' => 'Aquí queda lo que se pidió, lo que se devolvió y por qué. Es lo que el historial de cambios no puede guardar.',
],
],
'missing_urls' => [
'label' => 'URL no encontrada',
'plural' => 'URLs no encontradas',
'linked_from_us' => 'Enlazada desde nuestra propia web',
'no_referrer' => 'Sin procedencia',
'fields' => [
'path' => 'Dirección',
'hits' => 'Visitas',
'locale' => 'Idioma',
'status' => 'Estado',
'referrer' => 'Venían de',
'last_seen' => 'Última vez',
],
'filters' => [
'internal' => 'Enlazadas desde nuestra web',
'repeated' => 'Más de una visita',
],
'actions' => [
'redirect' => 'Crear redirección',
'redirect_heading' => 'Mandar esta dirección a otro sitio',
'redirect_hint' => 'La dirección que falla ya está puesta. Solo hace falta decir a dónde debería llevar.',
'redirected' => 'Redirección creada. Esta dirección deja de dar 404.',
'locale_hint' => 'Viene del idioma en que se pidió. Vacío para que valga en todos.',
'ignore' => 'Ignorar',
'unignore' => 'Dejar de ignorar',
],
'empty' => [
'heading' => 'Nadie se ha topado con un 404',
'description' => 'Aquí aparecen las direcciones que la web no supo resolver, para poder redirigirlas. Las reporta el frontend, así que hace falta configurar SITE_INGEST_TOKEN.',
],
],
'settings' => [
'label' => 'Configuración',
'plural' => 'Configuraciones',
'sections' => [
'general' => 'General',
],
'fields' => [
'key' => 'Clave',
'value' => 'Valor',
'value_hint' => 'El valor tal cual, en JSON. Si no es JSON válido no se guarda.',
],
'actions' => [
'add_setting' => 'Agregar configuración',
'delete_setting' => 'Eliminar configuración',
],
],
'issues' => [
'label' => 'Tarea',
'plural' => 'Tareas',
'sections' => [
'details' => 'Detalles',
'classification' => 'Clasificación',
'metadata' => 'Metadatos',
],
'fields' => [
'number' => 'Número',
'title' => 'Título',
'repository' => 'Repositorio',
'author' => 'Autor',
'assignee' => 'Asignado a',
'assignee_hint' => 'Usuario de GitHub o vacío para marcar sin asignar',
'url' => 'URL',
'is_good_first_issue' => 'Tarea para empezar',
'is_good_first_issue_hint' => 'Recomendada para nuevos colaboradores del proyecto',
'is_help_wanted' => 'Ayuda buscada',
'is_help_wanted_hint' => 'Abierta a contribuciones de la comunidad',
'comments' => 'Comentarios',
'issue_created_at' => 'Creada',
'issue_updated_at' => 'Actualizada',
'labels' => 'Etiquetas',
'unassigned' => 'Sin asignar',
],
'filters' => [
'repository' => 'Repositorio',
'good_first_issue' => 'Tareas para empezar',
'help_wanted' => 'Ayuda buscada',
'unclaimed' => 'Sin asignar',
'claimed' => 'Asignadas',
],
],
];

11
lang/es/passwords.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
return [
'reset' => 'Su contraseña ha sido restablecida.',
'sent' => 'Le hemos enviado por correo electrónico el enlace para restablecer su contraseña.',
'throttled' => 'Por favor espere antes de intentar de nuevo.',
'token' => 'El token de restablecimiento de contraseña es inválido.',
'user' => 'No encontramos ningún usuario con ese correo electrónico.',
];

27
lang/es/pireon.php Normal file
View File

@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
return [
'sign_in' => 'Entrar',
'sign_in_intro' => 'Accede con tu email y tu contraseña.',
'signing_in' => 'Comprobando tus credenciales…',
'password_grant_disabled' => 'El acceso con contraseña está desactivado en esta instalación. Avisa a un administrador.',
'server_unavailable' => 'El servidor de identidad no está respondiendo. No es cosa de tus credenciales; avisa a un administrador.',
'sign_out' => 'Cerrar sesión',
'denied' => 'No se completó el acceso: :reason',
'inactive' => 'Tu cuenta está desactivada. Contacta con un administrador.',
'pending_approval' => 'Tu registro todavía está pendiente de aprobación por un administrador.',
'no_permission' => 'Tu cuenta no tiene permiso para acceder a este panel. Pídele a un administrador que te asigne un rol.',
'cannot_grant_super_admin' => 'Solo un super administrador puede conceder el rol de super administrador.',
'not_configured_title' => 'El cliente OAuth no está configurado',
'not_configured_body' => 'Registra esta aplicación en :server y rellena PIREON_CLIENT_ID y PIREON_CLIENT_SECRET en el fichero .env.',
'account' => [
'remote_roles' => 'Roles en el servidor de identidad',
'remote_roles_hint' => 'Informativos: los permisos de esta aplicación se gestionan aquí, no en el servidor OAuth.',
'managed_remotely' => 'Este campo se gestiona en :server y se actualiza en cada inicio de sesión.',
],
];

31
lang/es/rules.php Normal file
View File

@@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
return [
'translatable' => [
'type' => 'El campo :attribute debe ser un texto o un objeto de traducciones (idioma => texto).',
'unsupported_locale' => 'El idioma «:locale» no está soportado en :attribute. Idiomas disponibles: :supported.',
'max' => 'La traducción de :attribute en «:locale» no puede superar los :max caracteres.',
'default_required' => 'Falta la traducción de :attribute en el idioma principal («:locale»).',
],
'slug' => [
'unique' => 'El slug «:slug» ya está en uso en el idioma «:locale».',
],
'applications' => [
'attributes' => [
'name' => 'nombre',
'email' => 'email',
'message' => 'mensaje',
'organisation' => 'entidad',
'hours_per_week' => 'horas por semana',
'consent' => 'consentimiento',
],
],
'pages' => [
'cannot_publish' => 'No tienes permiso para publicar páginas.',
],
];

20
lang/es/site.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
/*
* Texts the public API returns to the public frontend, in the language the
* visitor is browsing in. They are rendered by the frontend as-is.
*/
return [
'telemetry' => [
'disabled' => 'El reporte de URLs no encontradas está desactivado en este servidor.',
'forbidden' => 'Token de ingesta no válido.',
],
'applications' => [
'received' => 'Hemos recibido tu mensaje. Te contestamos en cuanto podamos.',
'closed' => 'Ahora mismo no estamos aceptando mensajes. Vuelve a intentarlo en un rato.',
],
];

290
lang/es/validation.php Normal file
View File

@@ -0,0 +1,290 @@
<?php
declare(strict_types=1);
return [
'accepted' => 'El campo :attribute debe ser aceptado.',
'accepted_if' => 'El campo :attribute debe ser aceptado cuando :other sea :value.',
'active_url' => 'El campo :attribute debe ser una URL válida.',
'after' => 'El campo :attribute debe ser una fecha posterior a :date.',
'after_or_equal' => 'El campo :attribute debe ser una fecha posterior o igual a :date.',
'alpha' => 'El campo :attribute sólo debe contener letras.',
'alpha_dash' => 'El campo :attribute sólo debe contener letras, números, guiones y guiones bajos.',
'alpha_num' => 'El campo :attribute sólo debe contener letras y números.',
'any_of' => 'El campo :attribute no es válido.',
'array' => 'El campo :attribute debe ser un conjunto.',
'array_keys' => 'El campo :attribute solo debe contener las siguientes claves: :values.',
'ascii' => 'El campo :attribute solo debe contener caracteres alfanuméricos y símbolos de un solo byte.',
'base64' => 'El campo :attribute debe ser una cadena Base64 válida.',
'before' => 'El campo :attribute debe ser una fecha anterior a :date.',
'before_or_equal' => 'El campo :attribute debe ser una fecha anterior o igual a :date.',
'between' => [
'array' => 'El campo :attribute tiene que tener entre :min - :max elementos.',
'file' => 'El campo :attribute debe pesar entre :min - :max kilobytes.',
'numeric' => 'El campo :attribute tiene que estar entre :min - :max.',
'string' => 'El campo :attribute tiene que tener entre :min - :max caracteres.',
],
'boolean' => 'El campo :attribute debe tener un valor verdadero o falso.',
'can' => 'El campo :attribute contiene un valor no autorizado.',
'confirmed' => 'La confirmación de :attribute no coincide.',
'contains' => 'Al campo :attribute le falta un valor obligatorio.',
'current_password' => 'La contraseña es incorrecta.',
'date' => 'El campo :attribute debe ser una fecha válida.',
'date_equals' => 'El campo :attribute debe ser una fecha igual a :date.',
'date_format' => 'El campo :attribute debe coincidir con el formato :format.',
'decimal' => 'El campo :attribute debe tener :decimal cifras decimales.',
'declined' => 'El campo :attribute debe ser rechazado.',
'declined_if' => 'El campo :attribute debe ser rechazado cuando :other sea :value.',
'different' => 'El campo :attribute y :other deben ser diferentes.',
'digits' => 'El campo :attribute debe tener :digits dígitos.',
'digits_between' => 'El campo :attribute debe tener entre :min y :max dígitos.',
'dimensions' => 'El campo :attribute tiene dimensiones de imagen no válidas.',
'distinct' => 'El campo :attribute contiene un valor duplicado.',
'doesnt_contain' => 'El campo :attribute no debe contener ninguno de los siguientes valores: :values.',
'doesnt_end_with' => 'El campo :attribute no debe finalizar con uno de los siguientes: :values.',
'doesnt_start_with' => 'El campo :attribute no debe comenzar con uno de los siguientes: :values.',
'email' => 'El campo :attribute no es un correo válido.',
'encoding' => 'El campo :attribute debe estar codificado en :encoding.',
'ends_with' => 'El campo :attribute debe finalizar con uno de los siguientes valores: :values',
'enum' => 'El campo :attribute no está en la lista de valores permitidos.',
'exists' => 'El campo :attribute no existe.',
'extensions' => 'El campo :attribute debe tener una de las siguientes extensiones: :values.',
'file' => 'El campo :attribute debe ser un archivo.',
'filled' => 'El campo :attribute es obligatorio.',
'gt' => [
'array' => 'El campo :attribute debe tener más de :value elementos.',
'file' => 'El campo :attribute debe tener más de :value kilobytes.',
'numeric' => 'El campo :attribute debe ser mayor que :value.',
'string' => 'El campo :attribute debe tener más de :value caracteres.',
],
'gte' => [
'array' => 'El campo :attribute debe tener como mínimo :value elementos.',
'file' => 'El campo :attribute debe tener como mínimo :value kilobytes.',
'numeric' => 'El campo :attribute debe ser como mínimo :value.',
'string' => 'El campo :attribute debe tener como mínimo :value caracteres.',
],
'hex_color' => 'El campo :attribute debe tener un color hexadecimal válido.',
'image' => 'El campo :attribute debe ser una imagen.',
'in' => 'El campo :attribute no está en la lista de valores permitidos.',
'in_array' => 'El campo :attribute debe existir en :other.',
'in_array_keys' => 'El campo :attribute debe contener al menos una de las siguientes claves: :values.',
'integer' => 'El campo :attribute debe ser un número entero.',
'ip' => 'El campo :attribute debe ser una dirección IP válida.',
'ipv4' => 'El campo :attribute debe ser una dirección IPv4 válida.',
'ipv6' => 'El campo :attribute debe ser una dirección IPv6 válida.',
'json' => 'El campo :attribute debe ser una cadena JSON válida.',
'list' => 'El campo :attribute debe ser una lista.',
'lowercase' => 'El campo :attribute debe estar en minúscula.',
'lt' => [
'array' => 'El campo :attribute debe tener menos de :value elementos.',
'file' => 'El campo :attribute debe tener menos de :value kilobytes.',
'numeric' => 'El campo :attribute debe ser menor que :value.',
'string' => 'El campo :attribute debe tener menos de :value caracteres.',
],
'lte' => [
'array' => 'El campo :attribute debe tener como máximo :value elementos.',
'file' => 'El campo :attribute debe tener como máximo :value kilobytes.',
'numeric' => 'El campo :attribute debe ser como máximo :value.',
'string' => 'El campo :attribute debe tener como máximo :value caracteres.',
],
'mac_address' => 'El campo :attribute debe ser una dirección MAC válida.',
'max' => [
'array' => 'El campo :attribute no debe tener más de :max elementos.',
'file' => 'El campo :attribute no debe ser mayor que :max kilobytes.',
'numeric' => 'El campo :attribute no debe ser mayor que :max.',
'string' => 'El campo :attribute no debe ser mayor que :max caracteres.',
],
'max_digits' => 'El campo :attribute no debe tener más de :max dígitos.',
'mimes' => 'El campo :attribute debe ser un archivo con formato: :values.',
'mimetypes' => 'El campo :attribute debe ser un archivo con formato: :values.',
'min' => [
'array' => 'El campo :attribute debe tener al menos :min elementos.',
'file' => 'El tamaño de :attribute debe ser de al menos :min kilobytes.',
'numeric' => 'El tamaño de :attribute debe ser de al menos :min.',
'string' => 'El campo :attribute debe contener al menos :min caracteres.',
],
'min_digits' => 'El campo :attribute debe tener al menos :min dígitos.',
'missing' => 'El campo :attribute no debe estar presente.',
'missing_if' => 'El campo :attribute no debe estar presente cuando :other sea :value.',
'missing_unless' => 'El campo :attribute no debe estar presente a menos que :other sea :value.',
'missing_with' => 'El campo :attribute no debe estar presente si alguno de los campos :values está presente.',
'missing_with_all' => 'El campo :attribute no debe estar presente cuando los campos :values estén presentes.',
'multiple_of' => 'El campo :attribute debe ser múltiplo de :value',
'not_in' => 'El campo :attribute no debe estar en la lista.',
'not_regex' => 'El formato del campo :attribute no es válido.',
'numeric' => 'El campo :attribute debe ser numérico.',
'password' => [
'letters' => 'La :attribute debe contener al menos una letra.',
'mixed' => 'La :attribute debe contener al menos una letra mayúscula y una minúscula.',
'numbers' => 'La :attribute debe contener al menos un número.',
'symbols' => 'La :attribute debe contener al menos un símbolo.',
'uncompromised' => 'La :attribute proporcionada se ha visto comprometida en una filtración de datos (data leak). Elija una :attribute diferente.',
],
'present' => 'El campo :attribute debe estar presente.',
'present_if' => 'El campo :attribute debe estar presente cuando :other es :value.',
'present_unless' => 'El campo :attribute debe estar presente a menos que :other sea :value.',
'present_with' => 'El campo :attribute debe estar presente cuando :values esté presente.',
'present_with_all' => 'El campo :attribute debe estar presente cuando :values estén presentes.',
'prohibited' => 'El campo :attribute está prohibido.',
'prohibited_if' => 'El campo :attribute está prohibido cuando :other es :value.',
'prohibited_if_accepted' => 'El campo :attribute está prohibido cuando se acepta :other.',
'prohibited_if_declined' => 'El campo :attribute está prohibido cuando se rechaza :other.',
'prohibited_unless' => 'El campo :attribute está prohibido a menos que :other sea :values.',
'prohibits' => 'El campo :attribute prohibe que :other esté presente.',
'regex' => 'El formato del campo :attribute no es válido.',
'required' => 'El campo :attribute es obligatorio.',
'required_array_keys' => 'El campo :attribute debe contener entradas para: :values.',
'required_if' => 'El campo :attribute es obligatorio cuando :other es :value.',
'required_if_accepted' => 'El campo :attribute es obligatorio si :other es aceptado.',
'required_if_declined' => 'El campo :attribute es obligatorio si :other es rechazado.',
'required_unless' => 'El campo :attribute es obligatorio a menos que :other esté en :values.',
'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.',
'required_with_all' => 'El campo :attribute es obligatorio cuando :values están presentes.',
'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.',
'required_without_all' => 'El campo :attribute es obligatorio cuando ninguno de :values está presente.',
'same' => 'Los campos :attribute y :other deben coincidir.',
'size' => [
'array' => 'El campo :attribute debe contener :size elementos.',
'file' => 'El tamaño de :attribute debe ser :size kilobytes.',
'numeric' => 'El tamaño de :attribute debe ser :size.',
'string' => 'El campo :attribute debe contener :size caracteres.',
],
'starts_with' => 'El campo :attribute debe comenzar con uno de los siguientes valores: :values',
'string' => 'El campo :attribute debe ser una cadena de caracteres.',
'timezone' => 'El campo :attribute debe ser una zona horaria válida.',
'ulid' => 'El campo :attribute debe ser un ULID válido.',
'unique' => 'El campo :attribute ya ha sido registrado.',
'uploaded' => 'Subir :attribute ha fallado.',
'uppercase' => 'El campo :attribute debe estar en mayúscula.',
'url' => 'El campo :attribute debe ser una URL válida.',
'uuid' => 'El campo :attribute debe ser un UUID válido.',
'attributes' => [
'address' => 'dirección',
'affiliate_url' => 'URL de afiliado',
'age' => 'edad',
'amount' => 'cantidad',
'announcement' => 'anuncio',
'area' => 'área',
'audience_prize' => 'premio del público',
'audience_winner' => 'ganador del público',
'available' => 'disponible',
'birthday' => 'cumpleaños',
'body' => 'contenido',
'city' => 'ciudad',
'color' => 'color',
'company' => 'compañía',
'compilation' => 'compilación',
'concept' => 'concepto',
'conditions' => 'condiciones',
'content' => 'contenido',
'contest' => 'concurso',
'country' => 'país',
'cover' => 'portada',
'created_at' => 'creado el',
'creator' => 'creador',
'currency' => 'moneda',
'current_password' => 'contraseña actual',
'customer' => 'cliente',
'date' => 'fecha',
'date_of_birth' => 'fecha de nacimiento',
'dates' => 'fechas',
'day' => 'día',
'deleted_at' => 'eliminado el',
'description' => 'descripción',
'display_type' => 'tipo de visualización',
'district' => 'distrito',
'duration' => 'duración',
'email' => 'correo electrónico',
'excerpt' => 'extracto',
'filter' => 'filtro',
'finished_at' => 'terminado el',
'first_name' => 'nombre',
'gender' => 'género',
'grand_prize' => 'gran Premio',
'group' => 'grupo',
'hour' => 'hora',
'image' => 'imagen',
'image_desktop' => 'imagen de escritorio',
'image_main' => 'imagen principal',
'image_mobile' => 'imagen móvil',
'images' => 'imágenes',
'is_audience_winner' => 'es ganador de audiencia',
'is_hidden' => 'está oculto',
'is_subscribed' => 'está suscrito',
'is_visible' => 'es visible',
'is_winner' => 'es ganador',
'items' => 'elementos',
'key' => 'clave',
'last_name' => 'apellidos',
'lesson' => 'lección',
'line_address_1' => 'línea de dirección 1',
'line_address_2' => 'línea de dirección 2',
'login' => 'acceso',
'message' => 'mensaje',
'middle_name' => 'segundo nombre',
'minute' => 'minuto',
'mobile' => 'móvil',
'month' => 'mes',
'name' => 'nombre',
'national_code' => 'código nacional',
'number' => 'número',
'password' => 'contraseña',
'password_confirmation' => 'confirmación de la contraseña',
'phone' => 'teléfono',
'photo' => 'foto',
'portfolio' => 'portafolio',
'postal_code' => 'código postal',
'preview' => 'vista preliminar',
'price' => 'precio',
'product_id' => 'ID del producto',
'product_uid' => 'UID del producto',
'product_uuid' => 'UUID del producto',
'promo_code' => 'código promocional',
'province' => 'provincia',
'quantity' => 'cantidad',
'reason' => 'razón',
'recaptcha_response_field' => 'respuesta del recaptcha',
'referee' => 'árbitro',
'referees' => 'árbitros',
'region' => 'región',
'reject_reason' => 'motivo de rechazo',
'remember' => 'recordar',
'restored_at' => 'restaurado el',
'result_text_under_image' => 'texto bajo la imagen',
'role' => 'rol',
'rule' => 'regla',
'rules' => 'reglas',
'second' => 'segundo',
'sex' => 'sexo',
'shipment' => 'envío',
'short_text' => 'texto corto',
'size' => 'tamaño',
'skills' => 'habilidades',
'slug' => 'slug',
'specialization' => 'especialización',
'started_at' => 'comenzado el',
'state' => 'estado',
'status' => 'estado',
'street' => 'calle',
'student' => 'estudiante',
'subject' => 'asunto',
'tag' => 'etiqueta',
'tags' => 'etiquetas',
'teacher' => 'profesor',
'terms' => 'términos',
'test_description' => 'descripción de prueba',
'test_locale' => 'idioma de prueba',
'test_name' => 'nombre de prueba',
'text' => 'texto',
'time' => 'hora',
'title' => 'título',
'type' => 'tipo',
'updated_at' => 'actualizado el',
'user' => 'usuario',
'username' => 'usuario',
'value' => 'valor',
'winner' => 'ganador',
'work' => 'trabajo',
'year' => 'año',
],
];