Merge branch 'develop' into feat/2091-improve-visuals
This commit is contained in:
		
						commit
						75e1e91786
					
				|  | @ -175,7 +175,7 @@ lint_api: | |||
|     - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ | ||||
|     - changes: [api/**/*] | ||||
| 
 | ||||
|   image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.11 | ||||
|   image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.13 | ||||
|   cache: *api_cache | ||||
|   before_script: | ||||
|     - cd api | ||||
|  | @ -339,7 +339,7 @@ build_api_schema: | |||
|     # Add build_docs rules because it depends on the build_api_schema artifact | ||||
|     - changes: [docs/**/*] | ||||
| 
 | ||||
|   image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.11 | ||||
|   image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.13 | ||||
|   services: | ||||
|     - postgres:15-alpine | ||||
|     - redis:7-alpine | ||||
|  | @ -357,6 +357,11 @@ build_api_schema: | |||
|     - poetry run funkwhale-manage migrate | ||||
|   script: | ||||
|     - poetry run funkwhale-manage spectacular --file ../docs/schema.yml | ||||
|     - diff ../docs/schema.yml ./funkwhale_api/common/schema.yml || ( | ||||
|       echo "Schema files do not match! run sudo docker compose run --rm | ||||
|       api funkwhale-manage spectacular > ./api/funkwhale_api/common/schema.yml" && | ||||
|       exit 1 | ||||
|       ) | ||||
|   artifacts: | ||||
|     expire_in: 2 weeks | ||||
|     paths: | ||||
|  |  | |||
|  | @ -6,7 +6,8 @@ repos: | |||
|     rev: v4.4.0 | ||||
|     hooks: | ||||
|       - id: check-added-large-files | ||||
|         args: ['--maxkb=1000'] | ||||
|         exclude: 'api/funkwhale_api/common/schema.yml' | ||||
| 
 | ||||
|       - id: check-case-conflict | ||||
|       - id: check-executables-have-shebangs | ||||
|       - id: check-shebang-scripts-are-executable | ||||
|  | @ -63,6 +64,7 @@ repos: | |||
|     hooks: | ||||
|       - id: prettier | ||||
|         files: \.(md|yml|yaml|json)$ | ||||
|         exclude: 'api/funkwhale_api/common/schema.yml' | ||||
| 
 | ||||
|   - repo: https://github.com/codespell-project/codespell | ||||
|     rev: v2.2.6 | ||||
|  |  | |||
|  | @ -9291,25 +9291,16 @@ paths: | |||
|         content: | ||||
|           application/json: | ||||
|             schema: | ||||
|               type: array | ||||
|               items: | ||||
|                 $ref: '#/components/schemas/UploadBulkUpdateRequest' | ||||
|               $ref: '#/components/schemas/PatchedUploadForOwnerRequest' | ||||
|           application/x-www-form-urlencoded: | ||||
|             schema: | ||||
|               type: array | ||||
|               items: | ||||
|                 $ref: '#/components/schemas/UploadBulkUpdateRequest' | ||||
|               $ref: '#/components/schemas/PatchedUploadForOwnerRequest' | ||||
|           multipart/form-data: | ||||
|             schema: | ||||
|               type: array | ||||
|               items: | ||||
|                 $ref: '#/components/schemas/UploadBulkUpdateRequest' | ||||
|               $ref: '#/components/schemas/PatchedUploadForOwnerRequest' | ||||
|           application/activity+json: | ||||
|             schema: | ||||
|               type: array | ||||
|               items: | ||||
|                 $ref: '#/components/schemas/UploadBulkUpdateRequest' | ||||
|         required: true | ||||
|               $ref: '#/components/schemas/PatchedUploadForOwnerRequest' | ||||
|       security: | ||||
|       - oauth2: [] | ||||
|       - ApplicationToken: [] | ||||
|  | @ -12936,7 +12927,7 @@ paths: | |||
|           description: '' | ||||
|   /api/v2/instance/nodeinfo/2.1/: | ||||
|     get: | ||||
|       operationId: getNodeInfo21 | ||||
|       operationId: getNodeInfo20_2 | ||||
|       tags: | ||||
|       - instance | ||||
|       responses: | ||||
|  | @ -12944,7 +12935,7 @@ paths: | |||
|           content: | ||||
|             application/json: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/NodeInfo21' | ||||
|                 $ref: '#/components/schemas/NodeInfo20' | ||||
|           description: '' | ||||
|   /api/v2/instance/settings/: | ||||
|     get: | ||||
|  | @ -18966,25 +18957,16 @@ paths: | |||
|         content: | ||||
|           application/json: | ||||
|             schema: | ||||
|               type: array | ||||
|               items: | ||||
|                 $ref: '#/components/schemas/UploadBulkUpdateRequest' | ||||
|               $ref: '#/components/schemas/PatchedUploadForOwnerRequest' | ||||
|           application/x-www-form-urlencoded: | ||||
|             schema: | ||||
|               type: array | ||||
|               items: | ||||
|                 $ref: '#/components/schemas/UploadBulkUpdateRequest' | ||||
|               $ref: '#/components/schemas/PatchedUploadForOwnerRequest' | ||||
|           multipart/form-data: | ||||
|             schema: | ||||
|               type: array | ||||
|               items: | ||||
|                 $ref: '#/components/schemas/UploadBulkUpdateRequest' | ||||
|               $ref: '#/components/schemas/PatchedUploadForOwnerRequest' | ||||
|           application/activity+json: | ||||
|             schema: | ||||
|               type: array | ||||
|               items: | ||||
|                 $ref: '#/components/schemas/UploadBulkUpdateRequest' | ||||
|         required: true | ||||
|               $ref: '#/components/schemas/PatchedUploadForOwnerRequest' | ||||
|       security: | ||||
|       - oauth2: [] | ||||
|       - ApplicationToken: [] | ||||
|  | @ -20288,16 +20270,12 @@ components: | |||
|         downloads_count: | ||||
|           type: integer | ||||
|           readOnly: true | ||||
|         subscriptions_count: | ||||
|           type: integer | ||||
|           readOnly: true | ||||
|       required: | ||||
|       - actor | ||||
|       - artist | ||||
|       - attributed_to | ||||
|       - downloads_count | ||||
|       - rss_url | ||||
|         - subscriptions_count | ||||
|       - url | ||||
|     ChannelCreate: | ||||
|       type: object | ||||
|  | @ -23146,124 +23124,6 @@ components: | |||
|       - shortDescription | ||||
|       - supportedUploadExtensions | ||||
|       - terms | ||||
|     Metadata21: | ||||
|       type: object | ||||
|       properties: | ||||
|         actorId: | ||||
|           type: string | ||||
|         private: | ||||
|           type: boolean | ||||
|           readOnly: true | ||||
|         shortDescription: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|         longDescription: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|         contactEmail: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|         nodeName: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|         banner: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|         defaultUploadQuota: | ||||
|           type: integer | ||||
|           readOnly: true | ||||
|         supportedUploadExtensions: | ||||
|           type: array | ||||
|           items: | ||||
|             type: string | ||||
|         allowList: | ||||
|           allOf: | ||||
|             - $ref: '#/components/schemas/AllowListStat' | ||||
|           readOnly: true | ||||
|         funkwhaleSupportMessageEnabled: | ||||
|           type: boolean | ||||
|           readOnly: true | ||||
|         instanceSupportMessage: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|         usage: | ||||
|           $ref: '#/components/schemas/MetadataUsage' | ||||
|         languages: | ||||
|           type: array | ||||
|           items: | ||||
|             type: string | ||||
|         location: | ||||
|           type: string | ||||
|         content: | ||||
|           $ref: '#/components/schemas/MetadataContent' | ||||
|         features: | ||||
|           type: array | ||||
|           items: | ||||
|             type: string | ||||
|         codeOfConduct: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|       required: | ||||
|         - actorId | ||||
|         - allowList | ||||
|         - banner | ||||
|         - codeOfConduct | ||||
|         - contactEmail | ||||
|         - content | ||||
|         - defaultUploadQuota | ||||
|         - features | ||||
|         - funkwhaleSupportMessageEnabled | ||||
|         - instanceSupportMessage | ||||
|         - languages | ||||
|         - location | ||||
|         - longDescription | ||||
|         - nodeName | ||||
|         - private | ||||
|         - shortDescription | ||||
|         - supportedUploadExtensions | ||||
|     MetadataContent: | ||||
|       type: object | ||||
|       properties: | ||||
|         local: | ||||
|           $ref: '#/components/schemas/MetadataContentLocal' | ||||
|         topMusicCategories: | ||||
|           type: array | ||||
|           items: | ||||
|             $ref: '#/components/schemas/MetadataContentCategory' | ||||
|         topPodcastCategories: | ||||
|           type: array | ||||
|           items: | ||||
|             $ref: '#/components/schemas/MetadataContentCategory' | ||||
|       required: | ||||
|         - local | ||||
|         - topMusicCategories | ||||
|         - topPodcastCategories | ||||
|     MetadataContentCategory: | ||||
|       type: object | ||||
|       properties: | ||||
|         name: | ||||
|           type: string | ||||
|         count: | ||||
|           type: integer | ||||
|       required: | ||||
|         - count | ||||
|         - name | ||||
|     MetadataContentLocal: | ||||
|       type: object | ||||
|       properties: | ||||
|         artists: | ||||
|           type: integer | ||||
|         releases: | ||||
|           type: integer | ||||
|         recordings: | ||||
|           type: integer | ||||
|         hoursOfContent: | ||||
|           type: integer | ||||
|       required: | ||||
|         - artists | ||||
|         - hoursOfContent | ||||
|         - recordings | ||||
|         - releases | ||||
|     MetadataUsage: | ||||
|       type: object | ||||
|       properties: | ||||
|  | @ -23388,42 +23248,6 @@ components: | |||
|       - software | ||||
|       - usage | ||||
|       - version | ||||
|     NodeInfo21: | ||||
|       type: object | ||||
|       properties: | ||||
|         version: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|         software: | ||||
|           $ref: '#/components/schemas/SoftwareSerializer_v2' | ||||
|         protocols: | ||||
|           type: array | ||||
|           items: {} | ||||
|           readOnly: true | ||||
|         services: | ||||
|           allOf: | ||||
|             - $ref: '#/components/schemas/Services' | ||||
|           default: | ||||
|             inbound: [] | ||||
|             outbound: [] | ||||
|         openRegistrations: | ||||
|           type: boolean | ||||
|           readOnly: true | ||||
|         usage: | ||||
|           allOf: | ||||
|             - $ref: '#/components/schemas/Usage' | ||||
|           readOnly: true | ||||
|         metadata: | ||||
|           allOf: | ||||
|             - $ref: '#/components/schemas/Metadata21' | ||||
|           readOnly: true | ||||
|       required: | ||||
|         - metadata | ||||
|         - openRegistrations | ||||
|         - protocols | ||||
|         - software | ||||
|         - usage | ||||
|         - version | ||||
|     NodeInfoLibrary: | ||||
|       type: object | ||||
|       properties: | ||||
|  | @ -24631,8 +24455,6 @@ components: | |||
|           allOf: | ||||
|           - $ref: '#/components/schemas/ImportStatusEnum' | ||||
|           default: pending | ||||
|         privacy_level: | ||||
|           $ref: '#/components/schemas/LibraryPrivacyLevelEnum' | ||||
|         import_metadata: {} | ||||
|         import_reference: | ||||
|           type: string | ||||
|  | @ -25234,25 +25056,6 @@ components: | |||
|       required: | ||||
|       - name | ||||
|       - version | ||||
|     SoftwareSerializer_v2: | ||||
|       type: object | ||||
|       properties: | ||||
|         name: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|         version: | ||||
|           type: string | ||||
|         repository: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|         homepage: | ||||
|           type: string | ||||
|           readOnly: true | ||||
|       required: | ||||
|         - homepage | ||||
|         - name | ||||
|         - repository | ||||
|         - version | ||||
|     SpaManifest: | ||||
|       type: object | ||||
|       properties: | ||||
|  | @ -25691,17 +25494,6 @@ components: | |||
|       - mimetype | ||||
|       - size | ||||
|       - uuid | ||||
|     UploadBulkUpdateRequest: | ||||
|       type: object | ||||
|       properties: | ||||
|         uuid: | ||||
|           type: string | ||||
|           format: uuid | ||||
|         privacy_level: | ||||
|           $ref: '#/components/schemas/LibraryPrivacyLevelEnum' | ||||
|       required: | ||||
|         - privacy_level | ||||
|         - uuid | ||||
|     UploadForOwner: | ||||
|       type: object | ||||
|       properties: | ||||
|  | @ -25748,8 +25540,6 @@ components: | |||
|           allOf: | ||||
|           - $ref: '#/components/schemas/ImportStatusEnum' | ||||
|           default: pending | ||||
|         privacy_level: | ||||
|           $ref: '#/components/schemas/LibraryPrivacyLevelEnum' | ||||
|         import_details: | ||||
|           readOnly: true | ||||
|         import_metadata: {} | ||||
|  | @ -25790,8 +25580,6 @@ components: | |||
|           allOf: | ||||
|           - $ref: '#/components/schemas/ImportStatusEnum' | ||||
|           default: pending | ||||
|         privacy_level: | ||||
|           $ref: '#/components/schemas/LibraryPrivacyLevelEnum' | ||||
|         import_metadata: {} | ||||
|         import_reference: | ||||
|           type: string | ||||
|  | @ -26119,11 +25907,11 @@ components: | |||
|             write:instance:requests: '' | ||||
|             write:instance:notes: '' | ||||
| servers: | ||||
|   - url: https://demo.funkwhale.audio | ||||
| - url: https://demo.funkwhale.audio | ||||
|   description: Demo Server | ||||
|   - url: https://funkwhale.audio | ||||
| - url: https://funkwhale.audio | ||||
|   description: Read server with real content | ||||
|   - url: '{protocol}://{domain}' | ||||
| - url: '{protocol}://{domain}' | ||||
|   description: Custom server | ||||
|   variables: | ||||
|     domain: | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| # OpenApi schema | ||||
| 
 | ||||
| The frontend need up to date schemas ! If you change the api you need to upgrade the schema by running : `docker compose run --rm api funkwhale-manage spectacular > ./api/funkwhale_api/common/schema.yml`. | ||||
| 
 | ||||
| Then you need to upgrade the frontend schema has well by running `yarn generate-types-from-local-schema`. | ||||
| 
 | ||||
| Be aware that `get_signup_form_additional_fields_serializer` can tweak the schema generation. | ||||
|  | @ -2802,7 +2802,11 @@ | |||
|           "libraryAcceptFollow": "{ username } ha acceptat el seguiment de la biblioteca \"{ library }\"", | ||||
|           "libraryFollow": "{ username } ha seguit la teva biblioteca \"{ library }\"", | ||||
|           "libraryPendingFollow": "{ username } vol seguir la teva biblioteca \"{ library }\"", | ||||
|           "libraryReject": "Has rebutjat la petició de {username} per seguir \"{library}\"" | ||||
|           "libraryReject": "Has rebutjat la petició de {username} per seguir \"{library}\"", | ||||
|           "userAcceptFollow": "{username} ha acceptat que el seguiu", | ||||
|           "userFollow": "{username} et segueix", | ||||
|           "userPendingFollow": "{username} vol seguir-vos", | ||||
|           "userReject": "Heu rebutjat la sol·licitud de {username} per seguir-vos" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|  | @ -2865,6 +2869,19 @@ | |||
|           "name": "La meva impressionant llista de reproducció" | ||||
|         } | ||||
|       }, | ||||
|       "PlaylistDropdown": { | ||||
|         "button": { | ||||
|           "export": { | ||||
|             "description": "Això proporcionarà un fitxer xspf amb les dades de la llista de reproducció", | ||||
|             "header": "Descàrrega la llista de reproducció" | ||||
|           }, | ||||
|           "import": { | ||||
|             "description": "Això actualitzarà la llista de reproducció amb el contingut del fitxer xspf. Se suprimiran les pistes existents a la llista de reproducció", | ||||
|             "header": "Reconstrueix la llista de reproducció" | ||||
|           } | ||||
|         }, | ||||
|         "more": "Més" | ||||
|       }, | ||||
|       "PlaylistModal": { | ||||
|         "button": { | ||||
|           "addDuplicate": "Afegeix de totes maneres", | ||||
|  | @ -3395,6 +3412,7 @@ | |||
|           "moderation": "Moderació", | ||||
|           "music": "Música", | ||||
|           "playlists": "Llistes de reproducció", | ||||
|           "qualityFilters": "Explora els filtres de qualitat de la pàgina", | ||||
|           "sections": "Seccions", | ||||
|           "security": "Seguretat", | ||||
|           "settings": "Paràmetres de la instància", | ||||
|  | @ -4412,7 +4430,7 @@ | |||
|           }, | ||||
|           "meta": { | ||||
|             "failedTracks": "Pistes fallides: {tracks}", | ||||
|             "lastUpdate": "Última actualització: · ", | ||||
|             "lastUpdate": "Última actualització:", | ||||
|             "tracks": "{ n } pista | { n } pistes" | ||||
|           }, | ||||
|           "modal": { | ||||
|  |  | |||
|  | @ -395,7 +395,8 @@ | |||
|         "help": { | ||||
|           "discography": "Publica la música que haces como una bonita discografía de álbumes y sencillos.", | ||||
|           "podcast": "Aloja tus episodios y mantén a tu comunidad actualizada.", | ||||
|           "podcastFields": "Usado para el campo itunes:email y itunes:name requerido por ciertas plataformas como Spotify o iTunes" | ||||
|           "podcastFields": "Usado para el campo itunes:email y itunes:name requerido por ciertas plataformas como Spotify o iTunes", | ||||
|           "username": "Usado en URL y para seguir este canal en el Fediverso. No puede ser cambiado luego." | ||||
|         }, | ||||
|         "label": { | ||||
|           "category": "Categoría", | ||||
|  | @ -407,8 +408,13 @@ | |||
|           "name": "Nombre", | ||||
|           "owner": "Propietario", | ||||
|           "podcast": "Podcasts", | ||||
|           "subcategory": "Subcategoría", | ||||
|           "tags": "Etiquetas", | ||||
|           "username": "Manejo de Fediverse" | ||||
|         }, | ||||
|         "legend": { | ||||
|           "purpose": "¿Para qué será usado este canal?" | ||||
|         }, | ||||
|         "loader": { | ||||
|           "loading": "Subiendo" | ||||
|         }, | ||||
|  | @ -454,6 +460,9 @@ | |||
|         }, | ||||
|         "message": { | ||||
|           "copy": "¡Texto copiado al portapapeles!" | ||||
|         }, | ||||
|         "warning": { | ||||
|           "anonymous": "Compartir no funcionará porque esta manada no permite a los usuarios anónimos acceder al contenido." | ||||
|         } | ||||
|       }, | ||||
|       "LibraryFollowButton": { | ||||
|  | @ -477,6 +486,7 @@ | |||
|           "playPlaylist": "Vaciar lista de reproducción", | ||||
|           "playTrack": "Reproducir canción", | ||||
|           "playTracks": "Reproducir canción", | ||||
|           "report": "Reportar…", | ||||
|           "startRadio": "Reproducir canciones similares", | ||||
|           "trackDetails": "Detalles" | ||||
|         }, | ||||
|  | @ -506,7 +516,17 @@ | |||
|           "unmute": "Activar sonido" | ||||
|         }, | ||||
|         "meta": { | ||||
|           "position": "{ index } de { length }" | ||||
|           "position": "{ index } de { length }", | ||||
|           "unknownAlbum": "Álbum desconocido", | ||||
|           "unknownArtist": "Artista desconocido" | ||||
|         } | ||||
|       }, | ||||
|       "PlayerControls": { | ||||
|         "labels": { | ||||
|           "next": "Pista siguiente", | ||||
|           "pause": "Pausa", | ||||
|           "play": "Reproducir", | ||||
|           "previous": "Pista anterior" | ||||
|         } | ||||
|       }, | ||||
|       "Search": { | ||||
|  | @ -524,6 +544,9 @@ | |||
|         } | ||||
|       }, | ||||
|       "SearchBar": { | ||||
|         "empty": { | ||||
|           "noResults": "Perdón, no hay resultados para esta búsqueda" | ||||
|         }, | ||||
|         "header": { | ||||
|           "noResults": "No se han encontrado coincidencias" | ||||
|         }, | ||||
|  | @ -535,11 +558,13 @@ | |||
|             "podcasts": "Podcasts" | ||||
|           }, | ||||
|           "search": "Buscar música", | ||||
|           "tag": "Etiqueta", | ||||
|           "track": "Canción" | ||||
|         }, | ||||
|         "link": { | ||||
|           "fediverse": "Buscar en Wikipedia", | ||||
|           "more": "Más resultados 🡒" | ||||
|           "more": "Más resultados 🡒", | ||||
|           "rss": "Suscribirse a este podcast vía RSS" | ||||
|         }, | ||||
|         "placeholder": { | ||||
|           "search": "Buscar artistas, álbumes, canciones…" | ||||
|  | @ -652,6 +677,7 @@ | |||
|         }, | ||||
|         "header": { | ||||
|           "appDetails": "Detalles de la aplicación", | ||||
|           "appSecretWarning": "Mantener una copia de este token en un lugar seguro.", | ||||
|           "editApp": "Error al aplicar la acción" | ||||
|         }, | ||||
|         "help": { | ||||
|  | @ -665,6 +691,9 @@ | |||
|         "link": { | ||||
|           "settings": "Volver a los ajustes" | ||||
|         }, | ||||
|         "message": { | ||||
|           "appSecretWarning": "No serás capaz de verlo de nuevo una vez que dejes esta pantalla." | ||||
|         }, | ||||
|         "title": "Error al aplicar la acción" | ||||
|       }, | ||||
|       "ApplicationForm": { | ||||
|  | @ -675,14 +704,22 @@ | |||
|         "header": { | ||||
|           "failure": "No podemos crear tu cuenta" | ||||
|         }, | ||||
|         "help": { | ||||
|           "redirectUri": "Usa \"urn:ietf:wg:oauth:2.0:oob\" como URI de redirección si tu aplicación no está alojada en la web." | ||||
|         }, | ||||
|         "label": { | ||||
|           "name": "Nombre", | ||||
|           "redirectUri": "Redireccionar URI", | ||||
|           "scopes": { | ||||
|             "description": "La comprobación de los ámbitos padre \"Lectura\" o \"Escritura\" implica el acceso a todos los ámbitos hijos correspondientes.", | ||||
|             "label": "Alcances", | ||||
|             "read": { | ||||
|               "description": "Acceso de sólo lectura a los datos del usuario", | ||||
|               "label": "Leer" | ||||
|             }, | ||||
|             "write": { | ||||
|               "description": "Acceso de solo lectura a datos de usuario", | ||||
|               "label": "Escritura" | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|  | @ -703,10 +740,16 @@ | |||
|           "authorize": "Autorizar la aplicación de terceros", | ||||
|           "authorizeFailure": "Error al aplicar la acción", | ||||
|           "fetchFailure": "Error al crear la invitación", | ||||
|           "readOnly": "Sólo lectura" | ||||
|           "readOnly": "Sólo lectura", | ||||
|           "writeOnly": "Solo escritura" | ||||
|         }, | ||||
|         "help": { | ||||
|           "pasteCode": "Copie y pegue el siguiente código en la aplicación:" | ||||
|           "copyCode": "Se te mostrará un código para copiar y pegar en la aplicación", | ||||
|           "pasteCode": "Copie y pegue el siguiente código en la aplicación:", | ||||
|           "redirect": "Serás redireccionado a { 0 }" | ||||
|         }, | ||||
|         "message": { | ||||
|           "unknownPermissions": "La aplicación también está solicitando los siguientes permisos desconocidos:" | ||||
|         }, | ||||
|         "title": "Autorizar la aplicación" | ||||
|       }, | ||||
|  | @ -729,6 +772,9 @@ | |||
|           "createAccount": "Crear una cuenta", | ||||
|           "resetPassword": "Restablecer tu contraseña" | ||||
|         }, | ||||
|         "message": { | ||||
|           "redirect": "Serás redireccionado a {domain} para autenticar" | ||||
|         }, | ||||
|         "placeholder": { | ||||
|           "username": "Introduce tu nombre de usuario o correo electrónico" | ||||
|         } | ||||
|  | @ -779,22 +825,29 @@ | |||
|           "refresh": "Recargar", | ||||
|           "remove": "Quitar", | ||||
|           "removeApp": "Borrar lista de reproducción", | ||||
|           "revoke": "Revocar", | ||||
|           "revokeAccess": "Revocar acceso", | ||||
|           "update": "Actualizar", | ||||
|           "updateSettings": "Actualizar ajustes" | ||||
|         }, | ||||
|         "description": { | ||||
|           "authorizedApps": "Esta es la lista de aplicaciones que tienen acceso a tus datos de la cuenta.", | ||||
|           "changeEmail": "Cambie la dirección de correo electrónico asociada a su cuenta. Le enviaremos una confirmación a la nueva dirección.", | ||||
|           "changePassword": { | ||||
|             "paragraph1": "Cambiar tu contraseña también cambiará la contraseña de la API de Subsonic, si pediste una.", | ||||
|             "paragraph2": "Tendrás que actualizar tu contraseña en los clientes que usan esta contraseña." | ||||
|           }, | ||||
|           "contentFilters": "Los filtros de contenido te ayudan a ocultar los contenidos que no quieres ver en el servicio." | ||||
|           "contentFilters": "Los filtros de contenido te ayudan a ocultar los contenidos que no quieres ver en el servicio.", | ||||
|           "deleteAccount": "Puedes eliminar permanentemente e irreversiblemente tu cuenta y todos los datos asociados usando el siguiente formulario. Se te pedirá confirmación.", | ||||
|           "plugins": "Usa plugins para extender Funkwhale y obtener características adicionales.", | ||||
|           "yourApps": "Esta es la lista de aplicaciones que tienes registradas." | ||||
|         }, | ||||
|         "header": { | ||||
|           "accountFailure": "No se puede iniciar la sesión", | ||||
|           "accountSettings": "Configuración de cuenta", | ||||
|           "authorizedApps": "Aplicaciones autorizadas", | ||||
|           "avatar": "Avatar", | ||||
|           "avatarFailure": "Tu avatar no puede ser guardado", | ||||
|           "changeEmail": "Confirma tu dirección de correo", | ||||
|           "changePassword": "Cambiar mi contraseña", | ||||
|           "contentFilters": "Filtros de contenido", | ||||
|  | @ -803,6 +856,7 @@ | |||
|           "hiddenArtists": "Explorando artistas", | ||||
|           "noApps": "No tienes ninguna regla para esta cuenta.", | ||||
|           "noPersonalApps": "No tienes ninguna regla para esta cuenta.", | ||||
|           "passwordFailure": "Tu contraseña no puede ser cambiada", | ||||
|           "plugins": "Plugins", | ||||
|           "settingsUpdated": "Ajustes actualizados", | ||||
|           "updateFailure": "Ajustes actualizados", | ||||
|  | @ -825,6 +879,7 @@ | |||
|           "newApp": "Crear una nueva lista de reproducción" | ||||
|         }, | ||||
|         "message": { | ||||
|           "confirmDelete": "Tu solicitud de eliminación fue enviada, tu cuenta y contenido serán borrados en breve", | ||||
|           "currentEmail": "Tienes iniciada actualmente sesión como { email }." | ||||
|         }, | ||||
|         "modal": { | ||||
|  | @ -837,12 +892,22 @@ | |||
|             "header": "¿Cambiar tu contraseña?" | ||||
|           }, | ||||
|           "deleteAccount": { | ||||
|             "content": { | ||||
|               "warning": "Esto es irreversible y borrará permanentemente tus datos de nuestros servidores. Se cerrará inmediatamente la sesión." | ||||
|             }, | ||||
|             "header": "¿Quieres restaurar tu cola de reproducción anterior?" | ||||
|           }, | ||||
|           "deleteApp": { | ||||
|             "content": { | ||||
|               "warning": "Esto borrará por completo esta lista de reproducción y no se podrá deshacer." | ||||
|             } | ||||
|             }, | ||||
|             "header": "¿Borrar aplicación {app}?" | ||||
|           }, | ||||
|           "revokeApp": { | ||||
|             "content": { | ||||
|               "warning": "Esto prevendrá que esta aplicación acceda al servicio en tu nombre." | ||||
|             }, | ||||
|             "header": "¿Revocar el acceso para la aplicación {app}?" | ||||
|           } | ||||
|         }, | ||||
|         "table": { | ||||
|  | @ -861,11 +926,15 @@ | |||
|           "yourApps": { | ||||
|             "header": { | ||||
|               "application": "Aplicación", | ||||
|               "creationDate": "Fecha de creación" | ||||
|               "creationDate": "Fecha de creación", | ||||
|               "scopes": "Alcances" | ||||
|             } | ||||
|           } | ||||
|         }, | ||||
|         "title": "Configuración de Cuenta" | ||||
|         "title": "Configuración de Cuenta", | ||||
|         "warning": { | ||||
|           "deleteAccount": "Tu cuneta será eliminada de nuestros servidores en unos minutos. También notificaremos a otros servidores que podrían copiar algunos de tus datos y así ellos procederán a la eliminación. Por favor tenga en cuenta que algunos de estos servidores podrían estar fuera de línea o no estar dispuestos a cumplir." | ||||
|         } | ||||
|       }, | ||||
|       "SignupForm": { | ||||
|         "button": { | ||||
|  | @ -877,10 +946,13 @@ | |||
|         }, | ||||
|         "label": { | ||||
|           "email": "Dirección de correo electrónico", | ||||
|           "invitation": "Código de invitación", | ||||
|           "password": "Contraseña", | ||||
|           "username": "Nombre de usuario" | ||||
|         }, | ||||
|         "message": { | ||||
|           "accountCreated": "Tu cuenta fue creada exitosamente. Por favor verifica tu dirección de correo electrónico antes de tratar de iniciar sesión.", | ||||
|           "awaitingReview": "Tu solicitud de datos fue enviada exitosamente. Se te notificará por correo electrónico cuando nuestro equipo de moderación halla revisado tu solicitud.", | ||||
|           "registrationClosed": "La inscripción a esta instancia está cerrada, necesitarás un código de invitación para inscribirte.", | ||||
|           "requiresReview": "Las inscripciones en este pod están abiertas, pero son revisadas por los moderadores antes de su aprobación." | ||||
|         }, | ||||
|  | @ -956,7 +1028,8 @@ | |||
|       }, | ||||
|       "AlbumSelect": { | ||||
|         "label": { | ||||
|           "album": "Álbum" | ||||
|           "album": "Álbum", | ||||
|           "series": "Series" | ||||
|         }, | ||||
|         "meta": { | ||||
|           "tracks": "{ n } canción | { n } canciones" | ||||
|  | @ -981,6 +1054,7 @@ | |||
|           "auth": "Si dejas de seguir esta biblioteca, perderás acceso a su contenido" | ||||
|         }, | ||||
|         "title": { | ||||
|           "subscribe": "Suscribirse", | ||||
|           "unsubscribe": "{ count } favorito" | ||||
|         } | ||||
|       }, | ||||
|  | @ -988,7 +1062,9 @@ | |||
|         "button": { | ||||
|           "edit": "Editar", | ||||
|           "ignore": "Ignorar", | ||||
|           "remove": "Quitar" | ||||
|           "remove": "Quitar", | ||||
|           "resume": "Resumen", | ||||
|           "retry": "Reintentar" | ||||
|         }, | ||||
|         "description": { | ||||
|           "extensions": "Extensiones soportadas: { extensions }" | ||||
|  | @ -1004,12 +1080,16 @@ | |||
|           "openBrowser": "Explorar…" | ||||
|         }, | ||||
|         "message": { | ||||
|           "dragAndDrop": "Arrastre y suelte sus archivos aquí o abra el navegador para cargar sus archivos" | ||||
|           "dragAndDrop": "Arrastre y suelte sus archivos aquí o abra el navegador para cargar sus archivos", | ||||
|           "pending": "Tienes algunas cargas de borradores pendientes de publicación." | ||||
|         }, | ||||
|         "status": { | ||||
|           "errored": "Error", | ||||
|           "pending": "En espera", | ||||
|           "uploading": "Subiendo" | ||||
|         }, | ||||
|         "warning": { | ||||
|           "quota": "No tienes espacio disponible para subir tus archivos. Por favor contacta a los moderadores." | ||||
|         } | ||||
|       }, | ||||
|       "UploadMetadataForm": { | ||||
|  | @ -1017,6 +1097,7 @@ | |||
|           "description": "Descripción", | ||||
|           "image": "Nombre", | ||||
|           "position": "Paginación", | ||||
|           "tags": "Etiquetas", | ||||
|           "title": "Título" | ||||
|         } | ||||
|       }, | ||||
|  | @ -1037,7 +1118,8 @@ | |||
|           "uploadFiles": "¿Eliminar la biblioteca?" | ||||
|         }, | ||||
|         "meta": { | ||||
|           "files": "{ n } archivo | { n } archivos" | ||||
|           "files": "{ n } archivo | { n } archivos", | ||||
|           "quota": "Almacenamiento restante: {space}" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|  | @ -1048,6 +1130,7 @@ | |||
|           "go": "Ir", | ||||
|           "launch": "Iniciar", | ||||
|           "refresh": "Actualiza el contenido de la tabla", | ||||
|           "select": "Seleccionar", | ||||
|           "selectAll": "Seleccionar un filtro", | ||||
|           "selectCurrentPage": "Seleccionar solo la página actual", | ||||
|           "selectElement": "Seleccionar { n } elemento | Seleccionar los { n } elementos", | ||||
|  | @ -1098,13 +1181,17 @@ | |||
|       }, | ||||
|       "ContentForm": { | ||||
|         "button": { | ||||
|           "preview": "Previsualización" | ||||
|           "preview": "Previsualización", | ||||
|           "write": "Escribir" | ||||
|         }, | ||||
|         "empty": { | ||||
|           "noContent": "Archivos pendientes." | ||||
|         }, | ||||
|         "help": { | ||||
|           "markdown": "La sintaxis Markdown es compatible." | ||||
|         }, | ||||
|         "placeholder": { | ||||
|           "input": "Escribe algunas palabras aquí…" | ||||
|         } | ||||
|       }, | ||||
|       "CopyInput": { | ||||
|  | @ -1140,6 +1227,7 @@ | |||
|       }, | ||||
|       "ExpandableDiv": { | ||||
|         "button": { | ||||
|           "less": "Mostrar menos", | ||||
|           "more": "Mostrar 1 álbum adicional" | ||||
|         } | ||||
|       }, | ||||
|  | @ -1155,6 +1243,12 @@ | |||
|         } | ||||
|       }, | ||||
|       "LoginModal": { | ||||
|         "description": { | ||||
|           "noAccess": "No tienes acceso" | ||||
|         }, | ||||
|         "header": { | ||||
|           "unauthenticated": "No autenticado" | ||||
|         }, | ||||
|         "link": { | ||||
|           "login": "Iniciar sesión", | ||||
|           "signup": "Inscripción" | ||||
|  | @ -1164,6 +1258,7 @@ | |||
|         "button": { | ||||
|           "cancel": "Cancelar", | ||||
|           "edit": "Editar", | ||||
|           "less": "Mostrar menos", | ||||
|           "more": "Mostrar 1 álbum adicional", | ||||
|           "update": "Mi descripción molona" | ||||
|         }, | ||||
|  | @ -1174,10 +1269,16 @@ | |||
|           "failure": "Error al aplicar la acción" | ||||
|         } | ||||
|       }, | ||||
|       "UserLink": { | ||||
|         "link": { | ||||
|           "username": "{'@'}{username}" | ||||
|         } | ||||
|       }, | ||||
|       "UserMenu": { | ||||
|         "label": { | ||||
|           "language": "Cambiar idioma", | ||||
|           "shortcuts": "Atajos de teclado" | ||||
|           "shortcuts": "Atajos de teclado", | ||||
|           "theme": "Cambiar tema" | ||||
|         }, | ||||
|         "link": { | ||||
|           "about": "Acerca de", | ||||
|  | @ -1203,11 +1304,13 @@ | |||
|         }, | ||||
|         "label": { | ||||
|           "language": "Cambiar idioma", | ||||
|           "shortcuts": "Atajos de teclado" | ||||
|           "shortcuts": "Atajos de teclado", | ||||
|           "theme": "Cambiar tema" | ||||
|         }, | ||||
|         "link": { | ||||
|           "about": "Acerca de", | ||||
|           "chat": "Sala de chat", | ||||
|           "docs": "Documentación", | ||||
|           "forum": "Foro", | ||||
|           "git": "Sistema de seguimiento de incidentes", | ||||
|           "login": "Iniciar sesión", | ||||
|  | @ -1265,6 +1368,8 @@ | |||
|         }, | ||||
|         "description": { | ||||
|           "failure": "Ocurrió un error al intentar actualizar los datos:", | ||||
|           "pending": "Nuestro servidor no procesó a tiempo la solicitud de actualización. Se procesará más tarde.", | ||||
|           "skipped": "El servidor remoto respondió, pero los datos devueltos no son compatibles con Funkwhale.", | ||||
|           "success": "Los datos se han actualizado con éxito desde el servidor remoto." | ||||
|         }, | ||||
|         "header": { | ||||
|  | @ -1276,7 +1381,8 @@ | |||
|           "success": "Actualización exitosa" | ||||
|         }, | ||||
|         "loader": { | ||||
|           "awaitingResult": "Cargando tus favoritos…" | ||||
|           "awaitingResult": "Cargando tus favoritos…", | ||||
|           "fetchRequest": "Solicitando una búsqueda…" | ||||
|         }, | ||||
|         "table": { | ||||
|           "error": { | ||||
|  | @ -1287,7 +1393,11 @@ | |||
|             "value": { | ||||
|               "connectionError": "Imposible conectar con el servidor remoto", | ||||
|               "httpError": "Ha ocurrido un error HTTP al contactar con el servidor remoto", | ||||
|               "invalidAttributesError": "Los datos devueltos por el servidor remoto tenían atributos inválidos o faltaban" | ||||
|               "httpStatus": "El servidor remoto respondió con HTTP {status}", | ||||
|               "invalidAttributesError": "Los datos devueltos por el servidor remoto tenían atributos inválidos o faltaban", | ||||
|               "invalidJsonError": "El servidor remoto devolvió datos JSON o JSON-LD no válidos", | ||||
|               "timeoutError": "El servidor remoto no respondió a tiempo", | ||||
|               "unknownError": "Error desconocido" | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|  | @ -1320,7 +1430,8 @@ | |||
|         "meta": { | ||||
|           "episodes": "{ n } episodio | { n } episodios", | ||||
|           "tracks": "{ n } canción | { n } canciones" | ||||
|         } | ||||
|         }, | ||||
|         "title": "Álbum" | ||||
|       }, | ||||
|       "AlbumDetail": { | ||||
|         "description": { | ||||
|  | @ -1345,6 +1456,7 @@ | |||
|         }, | ||||
|         "link": { | ||||
|           "discogs": "Buscar música", | ||||
|           "django": "Ver en el administrador de Django", | ||||
|           "domain": "Miembro desde { date }", | ||||
|           "moderation": "Actualizar regla de moderación", | ||||
|           "musicbrainz": "Ver en MusicBrainz" | ||||
|  | @ -1365,6 +1477,9 @@ | |||
|         "header": { | ||||
|           "edit": "Reproducir canción", | ||||
|           "suggest": "No podemos añadir la canción a una lista de reproducción" | ||||
|         }, | ||||
|         "message": { | ||||
|           "remote": "Este objeto es gestionado por otro servidor, no puedes editarlo." | ||||
|         } | ||||
|       }, | ||||
|       "Albums": { | ||||
|  | @ -1378,7 +1493,8 @@ | |||
|           "browse": "Explorando álbumes" | ||||
|         }, | ||||
|         "label": { | ||||
|           "search": "Buscar" | ||||
|           "search": "Buscar", | ||||
|           "tags": "Etiquetas" | ||||
|         }, | ||||
|         "link": { | ||||
|           "addMusic": "Añadir algo de música" | ||||
|  | @ -1409,6 +1525,7 @@ | |||
|         }, | ||||
|         "link": { | ||||
|           "discogs": "Buscar música", | ||||
|           "django": "Ver en el administrador de Django", | ||||
|           "domain": "Miembro desde { date }", | ||||
|           "moderation": "Actualizar regla de moderación", | ||||
|           "musicbrainz": "Ver en MusicBrainz", | ||||
|  | @ -1440,12 +1557,18 @@ | |||
|         }, | ||||
|         "link": { | ||||
|           "filter": "Ver archivos" | ||||
|         }, | ||||
|         "message": { | ||||
|           "filter": "Actualmente estás ocultando contenido relacionado a este artista." | ||||
|         } | ||||
|       }, | ||||
|       "ArtistEdit": { | ||||
|         "header": { | ||||
|           "edit": "Reproducir canción", | ||||
|           "suggest": "No podemos añadir la canción a una lista de reproducción" | ||||
|         }, | ||||
|         "message": { | ||||
|           "remote": "Este objeto está gestionado por otro servidor, no puedes editarlo." | ||||
|         } | ||||
|       }, | ||||
|       "Artists": { | ||||
|  | @ -1461,7 +1584,8 @@ | |||
|         }, | ||||
|         "label": { | ||||
|           "excludeCompilation": "Excluir recopilación de artistas", | ||||
|           "search": "Nombre del artista" | ||||
|           "search": "Nombre del artista", | ||||
|           "tags": "Etiquetas" | ||||
|         }, | ||||
|         "ordering": { | ||||
|           "direction": { | ||||
|  | @ -1488,7 +1612,13 @@ | |||
|         "header": { | ||||
|           "modification": "Fecha de modificación" | ||||
|         }, | ||||
|         "link": { | ||||
|           "track": "Pista #{id} - {name}" | ||||
|         }, | ||||
|         "modal": { | ||||
|           "content": { | ||||
|             "warning": "La sugerencia será borrada completamente, esta acción es irreversible." | ||||
|           }, | ||||
|           "delete": { | ||||
|             "header": "¿Borrar esta sugerencia?" | ||||
|           } | ||||
|  | @ -1513,13 +1643,29 @@ | |||
|       "EditForm": { | ||||
|         "button": { | ||||
|           "cancel": "Cancelar", | ||||
|           "clear": "Borrar" | ||||
|           "clear": "Borrar", | ||||
|           "new": "Enviar otra edición", | ||||
|           "reset": "Reiniciar al valor inicial", | ||||
|           "showAll": "Mostrar todas las ediciones", | ||||
|           "showUnreviewed": "Restringir las ediciones sin revición", | ||||
|           "submit": "Enviar y aplicar edición", | ||||
|           "suggest": "Enviar sugerencia" | ||||
|         }, | ||||
|         "empty": { | ||||
|           "suggestEdit": "Sugerir un cambio usando el siguiente formulario" | ||||
|         }, | ||||
|         "header": { | ||||
|           "failure": "Error al guardar los cambios", | ||||
|           "recentEdits": "Añadidos recientemente", | ||||
|           "success": "Tu edición fue enviada exitosamente.", | ||||
|           "unreviewed": "Ediciones recientes en espera de revisión" | ||||
|         }, | ||||
|         "label": { | ||||
|           "summary": "Resumen (opcional)" | ||||
|         }, | ||||
|         "message": { | ||||
|           "noPermission": "No tienes permiso para editar este objeto, pero puedes sugerir cambios. Una vez enviadas, las sugerencias serán revisadas antes de aprobarse." | ||||
|         }, | ||||
|         "notApplicable": "N/A", | ||||
|         "placeholder": { | ||||
|           "summary": "Ha ocurrido un error al guardar los cambios." | ||||
|  | @ -1531,15 +1677,21 @@ | |||
|           "retry": "Biblioteca actualizada" | ||||
|         }, | ||||
|         "description": { | ||||
|           "import": "Reiniciar importación" | ||||
|           "import": "Reiniciar importación", | ||||
|           "previousImport": "Resultados de tu importación previa:" | ||||
|         }, | ||||
|         "empty": { | ||||
|           "noFiles": "0" | ||||
|         }, | ||||
|         "header": { | ||||
|           "failure": "Error al guardar los cambios", | ||||
|           "local": "Subir música de '~/tu almacenamiento local", | ||||
|           "server": "Estado de la importación", | ||||
|           "status": "Estado de la importación" | ||||
|         }, | ||||
|         "label": { | ||||
|           "extensions": "Extensiones soportadas: { extensions }", | ||||
|           "remainingSpace": "Almacenamiento restante", | ||||
|           "uploadWidget": "Haga clic para seleccionar los archivos que desea cargar o arrastre y suelte los archivos o directorios" | ||||
|         }, | ||||
|         "link": { | ||||
|  | @ -1548,7 +1700,9 @@ | |||
|           "uploading": "Subiendo" | ||||
|         }, | ||||
|         "message": { | ||||
|           "listener": "Esta página está pidiendo que confirmes que quieres irte - los dato que has ingresado podrían no guardarse.", | ||||
|           "local": { | ||||
|             "copyright": "No subas contenido con copyright en una biblioteca pública, de otro modo, podrías estar infringiendo la ley", | ||||
|             "format": "Las canciones que estás subiendo estén etiquetadas correctamente:", | ||||
|             "message": "Estás a punto de subir música a tu biblioteca. Antes de continuar asegúrate que:", | ||||
|             "tag": "Las canciones que estás subiendo estén etiquetadas correctamente." | ||||
|  | @ -1562,6 +1716,7 @@ | |||
|               "size": "Tamaño", | ||||
|               "status": "Estado" | ||||
|             }, | ||||
|             "progress": "{percent}%", | ||||
|             "status": { | ||||
|               "pending": "En espera", | ||||
|               "uploaded": "Subido", | ||||
|  | @ -1573,6 +1728,7 @@ | |||
|           "denied": "Subida rechazada, asegúrate que el archivo no es demasiado grande y que no has alcanzado tu cuota", | ||||
|           "extension": "Tipo de archivo no válido, asegúrese de que está cargando un archivo de audio. Las extensiones de archivo admitidas son { extensions }", | ||||
|           "network": "Ha ocurrido un error de red al subir este archivo", | ||||
|           "retry": "Reintentar", | ||||
|           "size": "No es posible cargar este archivo, asegúrate que no es demasiado grande", | ||||
|           "timeout": "Timeout en la subida, intentalo de nuevo" | ||||
|         } | ||||
|  | @ -1604,9 +1760,11 @@ | |||
|         "error": { | ||||
|           "importFailure": "Ocurrió un error durante el proceso de carga. Encontrará más información abajo.", | ||||
|           "invalidMetadata": { | ||||
|             "label": "Metadatos inválidos" | ||||
|             "label": "Metadatos inválidos", | ||||
|             "message": "Los metadatos incluidos en el archivo no son válidos o faltan algunos campos obligatorios." | ||||
|           }, | ||||
|           "unknownError": { | ||||
|             "label": "Error desconocido", | ||||
|             "message": "Ha ocurrido un error desconocido" | ||||
|           } | ||||
|         }, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 jon r
						jon r