Merge commit 'c37bc5a8a94758e19b2d50db5e7816a96cec5cf4' into glitch-soc/merge-upstream

This commit is contained in:
Claire
2026-03-17 18:01:07 +01:00
65 changed files with 528 additions and 240 deletions

View File

@@ -190,7 +190,7 @@ GEM
irb (~> 1.10)
reline (>= 0.3.8)
debug_inspector (1.2.0)
devise (5.0.2)
devise (5.0.3)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 7.0)

View File

@@ -60,7 +60,7 @@ class Api::V1::DonationCampaignsController < Api::BaseController
return JSON.parse(res.body_with_limit) if res.code == 200
end
end
rescue *Mastodon::HTTP_CONNECTION_ERRORS, Oj::ParseError
rescue *Mastodon::HTTP_CONNECTION_ERRORS, JSON::ParserError
nil
end

View File

@@ -314,7 +314,7 @@ module JsonLdHelper
return if compare_id.present? && json['id'] != compare_id
json
rescue Oj::ParseError
rescue JSON::ParserError
nil
end

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "Samlede feltet \"{item}\" op.",
"account_edit.field_reorder_modal.handle_label": "Træk feltet \"{item}\"",
"account_edit.field_reorder_modal.title": "Omarrangér felter",
"account_edit.image_alt_modal.add_title": "Tilføj alt-tekst",
"account_edit.image_alt_modal.details_content": "GØR GERNE: <ul> <li>Beskriv dig selv som vist på billedet</li> <li>Brug tredje person (f.eks. “Alex“ i stedet for “mig“)</li> <li>Vær kortfattet et par ord er ofte nok</li> </ul> GØR IKKE: <ul> <li>Start ikke med “Foto af“ det er overflødigt for skærmlæsere</li> </ul> EKSEMPEL: <ul> <li>“Alex iført en grøn skjorte og briller”</li> </ul>",
"account_edit.image_alt_modal.details_title": "Tips: Alt-tekst til profilfotos",
"account_edit.image_alt_modal.edit_title": "Rediger alt-tekst",
"account_edit.image_alt_modal.text_hint": "Alt-tekst hjælper brugere af skærmlæsere med at forstå dit indhold.",
"account_edit.image_alt_modal.text_label": "Alt-tekst",
"account_edit.image_delete_modal.confirm": "Er du sikker på, at du vil slette dette billede? Denne handling kan ikke fortrydes.",
"account_edit.image_delete_modal.delete_button": "Slet",
"account_edit.image_delete_modal.title": "Slet billede?",
"account_edit.image_edit.add_button": "Tilføj billede",
"account_edit.image_edit.alt_add_button": "Tilføj alt-tekst",
"account_edit.image_edit.alt_edit_button": "Rediger alt-tekst",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "Tilpas fanerne på din profil og det, de viser.",
"account_edit.profile_tab.title": "Indstillinger for profil-fane",
"account_edit.save": "Gem",
"account_edit.upload_modal.back": "Tilbage",
"account_edit.upload_modal.done": "Færdig",
"account_edit.upload_modal.next": "Næste",
"account_edit.upload_modal.step_crop.zoom": "Zoom",
"account_edit.upload_modal.step_upload.button": "Gennemse filer",
"account_edit.upload_modal.step_upload.dragging": "Slip for at uploade",
"account_edit.upload_modal.step_upload.header": "Vælg et billede",
"account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF eller JPG-format, op til {limit} MB.{br}Billede vil blive skaleret til {width}x{height} px.",
"account_edit.upload_modal.title_add": "Tilføj profilfoto",
"account_edit.upload_modal.title_replace": "Erstat profilfoto",
"account_edit.verified_modal.details": "Øg troværdigheden af din Mastodon-profil ved at verificere links til personlige websteder. Sådan fungerer det:",
"account_edit.verified_modal.invisible_link.details": "Føj linket til din header. Det vigtige er rel=\"me\", som forhindrer imitatorer på websteder med brugergenereret indhold. Du kan endda bruge et link-tag i sidens header i stedet for {tag}, men HTML-koden skal være tilgængelig uden at afvikle JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Hvordan gør jeg linket usynligt?",

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "Das Feld „{item}“ wurde ausgewählt.",
"account_edit.field_reorder_modal.handle_label": "Das Feld „{item}“ verschieben",
"account_edit.field_reorder_modal.title": "Felder neu anordnen",
"account_edit.image_alt_modal.add_title": "Bildbeschreibung hinzufügen",
"account_edit.image_alt_modal.details_content": "Richtig: <ul> <li>Beschreibe dich selbst wie abgebildet</li> <li>Verwende beim Beschreiben die 3. Person (z. B. „Axel“ anstatt „ich“)</li> <li>Formuliere kurz und knackig ein paar Wörter sind ausreichend</li> </ul> Falsch: <ul> <li>Mit „Bild von“ beginnen bei Screenreadern überflüssig</li> </ul> Korrektes Beispiel: <ul> <li>„Axel trägt ein grünes T-Shirt und eine Brille.“</li> </ul>",
"account_edit.image_alt_modal.details_title": "Hinweis: Bildbeschreibung für Profilbilder",
"account_edit.image_alt_modal.edit_title": "Bildbeschreibung bearbeiten",
"account_edit.image_alt_modal.text_hint": "Bildbeschreibungen können von Screenreadern erfasst werden. Dadurch können Menschen, die darauf angewiesen sind, deine Medieninhalte besser wahrnehmen.",
"account_edit.image_alt_modal.text_label": "Bildbeschreibung",
"account_edit.image_delete_modal.confirm": "Möchtest du dieses Bild wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
"account_edit.image_delete_modal.delete_button": "Löschen",
"account_edit.image_delete_modal.title": "Bild löschen?",
"account_edit.image_edit.add_button": "Bild hinzufügen",
"account_edit.image_edit.alt_add_button": "Bildbeschreibung hinzufügen",
"account_edit.image_edit.alt_edit_button": "Bildbeschreibung bearbeiten",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "Passe die Tabs deines Profils und deren Inhalte an.",
"account_edit.profile_tab.title": "Profil-Tab-Einstellungen",
"account_edit.save": "Speichern",
"account_edit.upload_modal.back": "Zurück",
"account_edit.upload_modal.done": "Fertig",
"account_edit.upload_modal.next": "Weiter",
"account_edit.upload_modal.step_crop.zoom": "Vergrößern",
"account_edit.upload_modal.step_upload.button": "Datei hochladen",
"account_edit.upload_modal.step_upload.dragging": "Zum Hochladen hier ablegen",
"account_edit.upload_modal.step_upload.header": "Wähle ein Bild",
"account_edit.upload_modal.step_upload.hint": "WebP, PNG, GIF oder JPG. Höchstens {limit} MB groß.{br}Das Bild wird auf {width}x{height} px skaliert.",
"account_edit.upload_modal.title_add": "Profilbild hinzufügen",
"account_edit.upload_modal.title_replace": "Profilbild ändern",
"account_edit.verified_modal.details": "Beweise die Echtheit deines Mastodon-Profils, indem du verifizierte Links zu deinen persönlichen Websites ergänzt. So funktionierts:",
"account_edit.verified_modal.invisible_link.details": "Füge den Link in den Header ein. Der wichtige Teil ist rel=\"me\". Du kannst auch den Tag link im Header (statt {tag}) verwenden, jedoch muss die Internetseite ohne JavaScript abrufbar sein.",
"account_edit.verified_modal.invisible_link.summary": "Wie blende ich den Link aus?",

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "Το πεδίο \"{item}\" σηκώθηκε.",
"account_edit.field_reorder_modal.handle_label": "Μετακίνηση πεδίου \"{item}\"",
"account_edit.field_reorder_modal.title": "Αναδιάταξη πεδίων",
"account_edit.image_alt_modal.add_title": "Προσθήκη εναλλακτικού κειμένου",
"account_edit.image_alt_modal.details_content": "ΚΑΝΕΤΕ: <ul> <li>Να περιγράφετε τον εαυτό σας όπως απεικονίζεται</li> <li>Να χρησιμοποιείτε τρίτο πρόσωπο (Π.χ. “Άλεξ” αντί για “εγώ”)</li> <li>Να είστε σύντομοι και περιεκτικοί οι λίγες λέξεις μερικές φορές αρκούν</li> </ul> ΜΗΝ ΚΑΝΕΤΕ: <ul> <li>Να ξεκινάτε με “Φωτογραφία του” είναι περιττό για τους αναγνώστες οθόνης</li> </ul> ΠΑΡΑΔΕΙΓΜΑ: <ul> <li>“Ο Άλεξ με μια πράσινη μπλούζα και γυαλιά”</li> </ul>",
"account_edit.image_alt_modal.details_title": "Συμβουλές: Εναλλακτικό κείμενο για εικόνες προφίλ",
"account_edit.image_alt_modal.edit_title": "Επεξεργασία εναλλακτικού κειμένου",
"account_edit.image_alt_modal.text_hint": "Το εναλλακτικό κείμενο βοηθά τους χρήστες με αναγνώστη οθόνης να κατανοήσουν το περιεχόμενό σας.",
"account_edit.image_alt_modal.text_label": "Εναλλακτικό κείμενο",
"account_edit.image_delete_modal.confirm": "Σίγουρα θέλετε να διαγράψετε αυτήν την εικόνα; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.",
"account_edit.image_delete_modal.delete_button": "Διαγραφή",
"account_edit.image_delete_modal.title": "Διαγραφή εικόνας;",
"account_edit.image_edit.add_button": "Προσθήκη εικόνας",
"account_edit.image_edit.alt_add_button": "Προσθήκη εναλλακτικού κειμένου",
"account_edit.image_edit.alt_edit_button": "Επεξεργασία εναλλακτικού κειμένου",
@@ -203,6 +212,15 @@
"account_edit.profile_tab.subtitle": "Προσαρμόστε τις καρτέλες στο προφίλ σας και τι εμφανίζουν.",
"account_edit.profile_tab.title": "Ρυθμίσεις καρτέλας προφίλ",
"account_edit.save": "Αποθήκευση",
"account_edit.upload_modal.back": "Πίσω",
"account_edit.upload_modal.done": "Έγινε",
"account_edit.upload_modal.step_crop.zoom": "Μεγέθυνση",
"account_edit.upload_modal.step_upload.button": "Περιήγηση αρχείων",
"account_edit.upload_modal.step_upload.dragging": "Αποθέστε εδώ για ανέβασμα",
"account_edit.upload_modal.step_upload.header": "Επιλέξτε μια εικόνα",
"account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF ή JPG μορφή, μέχρι {limit}MB.{br}Η ανάλυση της εικόνας θα προσαρμοστεί στα {width}x{height}px.",
"account_edit.upload_modal.title_add": "Προσθήκη εικόνας προφίλ",
"account_edit.upload_modal.title_replace": "Αντικατάσταση εικόνας προφίλ",
"account_edit.verified_modal.details": "Πρόσθεσε αξιοπιστία στο Mastodon προφίλ σας επαληθεύοντας συνδέσμους σε προσωπικές ιστοσελίδες. Ορίστε πως δουλεύει:",
"account_edit.verified_modal.invisible_link.details": "Πρόσθεσε τον σύνδεσμο στην κεφαλίδα σου. Το σημαντικό μέρος είναι το rel=\"me\" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμα να χρησιμοποιήσεις μια ετικέτα link στην κεφαλίδα της σελίδας αντί για {tag}, αλλά η HTML πρέπει να είναι προσβάσιμη χωρίς την εκτέλεση JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Πώς κάνω αυτόν τον σύνδεσμο αόρατο;",

View File

@@ -163,7 +163,7 @@
"account_edit.featured_hashtags.item": "etiquetas",
"account_edit.featured_hashtags.placeholder": "Ayudá a otras personas a identificarte y a tener un rápido acceso a tus temas favoritos.",
"account_edit.featured_hashtags.title": "Etiquetas destacadas",
"account_edit.field_delete_modal.confirm": "¿Estás seguro de que querés eliminar este campo personalizado? Esta acción no se puede deshacer.",
"account_edit.field_delete_modal.confirm": "¿De verdad querés eliminar este campo personalizado? Esta acción no se puede deshacer.",
"account_edit.field_delete_modal.delete_button": "Eliminar",
"account_edit.field_delete_modal.title": "¿Eliminar campo personalizado?",
"account_edit.field_edit_modal.add_title": "Agregar campo personalizado",
@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "Campo elegido «{item}».",
"account_edit.field_reorder_modal.handle_label": "Arrastrá el campo «{item}»",
"account_edit.field_reorder_modal.title": "Reordená los campos",
"account_edit.image_alt_modal.add_title": "Agregar texto alternativo",
"account_edit.image_alt_modal.details_content": "LO QUE VA: <ul> <li>Describite como se te ve en la imagen</li> <li>Usá un idioma en tercera persona (por ejemplo: decí «Oliver», en lugar de, simplemente, «yo»)</li> <li>Sé breve: unas pocas palabras son suficientes</li> </ul> EVITÁ: <ul> <li>Comenzar con «Foto de…»: es redundante para lectores de pantalla</li> </ul> EJEMPLO DE UNA BUENA DESCRIPCIÓN: <ul> <li>«Oliver abrazando a su gato Dulce»</li> </ul>",
"account_edit.image_alt_modal.details_title": "Consejos: Texto alternativo para imágenes de perfil",
"account_edit.image_alt_modal.edit_title": "Editar texto alternativo",
"account_edit.image_alt_modal.text_hint": "El texto alternativo ayuda a los usuarios de lectores de pantalla a entender tu contenido.",
"account_edit.image_alt_modal.text_label": "Texto alternativo",
"account_edit.image_delete_modal.confirm": "¿De verdad querés eliminar esta imagen? Esta acción no se puede deshacer.",
"account_edit.image_delete_modal.delete_button": "Eliminar",
"account_edit.image_delete_modal.title": "¿Eliminar imagen?",
"account_edit.image_edit.add_button": "Agregar imagen",
"account_edit.image_edit.alt_add_button": "Agregar texto alternativo",
"account_edit.image_edit.alt_edit_button": "Editar texto alternativo",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "Personalizá las pestañas en tu perfil y qué van a mostrar.",
"account_edit.profile_tab.title": "Configuración de pestaña de perfil",
"account_edit.save": "Guardar",
"account_edit.upload_modal.back": "Volver",
"account_edit.upload_modal.done": "Listo",
"account_edit.upload_modal.next": "Siguiente",
"account_edit.upload_modal.step_crop.zoom": "Zoom",
"account_edit.upload_modal.step_upload.button": "Explorar archivos",
"account_edit.upload_modal.step_upload.dragging": "Arrastrá para subir",
"account_edit.upload_modal.step_upload.header": "Elegí una imagen",
"account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF o JPG, hasta {limit} MB.{br}La imagen será escalada a {width}x{height} píxeles.",
"account_edit.upload_modal.title_add": "Agregar imagen de perfil",
"account_edit.upload_modal.title_replace": "Reemplazar imagen de perfil",
"account_edit.verified_modal.details": "Agregá credibilidad a tu perfil de Mastodon verificando enlaces a sitios web personales. Así es cómo funciona:",
"account_edit.verified_modal.invisible_link.details": "Agregá el enlace a tu encabezado. La parte importante es rel=\"yo\" que evita la suplantación en sitios web con contenido generado por el usuario. Incluso podés usar una etiqueta de enlace en el encabezado de la página en lugar de {tag}, pero el código HTML debe ser accesible sin ejecutar JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "¿Cómo hago el enlace invisible?",
@@ -305,7 +324,7 @@
"bundle_column_error.network.title": "Error de red",
"bundle_column_error.retry": "Intentá de nuevo",
"bundle_column_error.return": "Volver al inicio",
"bundle_column_error.routing.body": "No se pudo encontrar la página solicitada. ¿Estás seguro que la dirección web es correcta?",
"bundle_column_error.routing.body": "No se pudo encontrar la página solicitada. ¿La dirección web es correcta?",
"bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Cerrar",
"bundle_modal_error.message": "Algo salió mal al cargar esta pantalla.",
@@ -333,7 +352,7 @@
"collections.collection_description": "Descripción",
"collections.collection_name": "Nombre",
"collections.collection_topic": "Tema",
"collections.confirm_account_removal": "¿Estás seguro de que querés eliminar esta cuenta de esta colección?",
"collections.confirm_account_removal": "¿De verdad querés eliminar esta cuenta de esta colección?",
"collections.content_warning": "Advertencia de contenido",
"collections.continue": "Continuar",
"collections.create.accounts_subtitle": "Solo las cuentas que seguís —las cuales optaron por ser descubiertas— pueden ser agregadas.",
@@ -417,9 +436,9 @@
"combobox.no_results_found": "No hay resultados para esta búsqueda",
"combobox.open_results": "Abrir resultados",
"combobox.results_available": "{count, plural, one {# sugerencia} other {# sugerencias}} disponible. Usá las teclas de flecha arriba y flecha abajo para navegar. Toca la tecla «Intro ⏎» para seleccionar.",
"community.column_settings.local_only": "Sólo local",
"community.column_settings.media_only": "Sólo medios",
"community.column_settings.remote_only": "Sólo remoto",
"community.column_settings.local_only": "Solo local",
"community.column_settings.media_only": "Solo medios",
"community.column_settings.remote_only": "Solo remoto",
"compose.error.blank_post": "El mensaje no puede estar en blanco.",
"compose.language.change": "Cambiar idioma",
"compose.language.search": "Buscar idiomas…",
@@ -428,7 +447,7 @@
"compose.saved.body": "Mensaje guardado.",
"compose_form.direct_message_warning_learn_more": "Aprendé más",
"compose_form.encryption_warning": "Los mensajes en Mastodon no están cifrados de extremo a extremo. No compartas ninguna información sensible al usar Mastodon.",
"compose_form.hashtag_warning": "Este mensaje no se mostrará bajo ninguna etiqueta porque no es público. Sólo los mensajes públicos se pueden buscar por etiquetas.",
"compose_form.hashtag_warning": "Este mensaje no se mostrará bajo ninguna etiqueta porque no es público. Solo los mensajes públicos se pueden buscar por etiquetas.",
"compose_form.lock_disclaimer": "Tu cuenta no es {locked}. Todos pueden seguirte para ver tus mensajes marcados como \"Sólo para seguidores\".",
"compose_form.lock_disclaimer.lock": "privada",
"compose_form.placeholder": "¿Qué onda?",
@@ -448,13 +467,13 @@
"confirmation_modal.cancel": "Cancelar",
"confirmations.block.confirm": "Bloquear",
"confirmations.delete.confirm": "Eliminar",
"confirmations.delete.message": "¿Estás seguro que querés eliminar este mensaje?",
"confirmations.delete.message": "¿De verdad querés eliminar este mensaje?",
"confirmations.delete.title": "¿Eliminar mensaje?",
"confirmations.delete_collection.confirm": "Eliminar",
"confirmations.delete_collection.message": "Esta acción no se puede deshacer.",
"confirmations.delete_collection.title": "¿Eliminar «{name}»?",
"confirmations.delete_list.confirm": "Eliminar",
"confirmations.delete_list.message": "¿Estás seguro que querés eliminar permanentemente esta lista?",
"confirmations.delete_list.message": "¿De verdad querés eliminar permanentemente esta lista?",
"confirmations.delete_list.title": "¿Eliminar lista?",
"confirmations.discard_draft.confirm": "Descartar y continuar",
"confirmations.discard_draft.edit.cancel": "Reanudar edición",
@@ -472,7 +491,7 @@
"confirmations.follow_to_list.message": "Necesitás seguir a {name} para agregarle a una lista.",
"confirmations.follow_to_list.title": "¿Querés seguirle?",
"confirmations.logout.confirm": "Cerrar sesión",
"confirmations.logout.message": "¿Estás seguro que querés cerrar la sesión?",
"confirmations.logout.message": "¿De verdad querés cerrar la sesión?",
"confirmations.logout.title": "¿Cerrar sesión?",
"confirmations.missing_alt_text.confirm": "Agregar texto alternativo",
"confirmations.missing_alt_text.message": "Tu mensaje contiene medios sin texto alternativo. Agregar descripciones ayuda a que tu contenido sea accesible para más personas.",
@@ -489,10 +508,10 @@
"confirmations.quiet_post_quote_info.message": "Al citar un mensaje público pero silencioso, tu mensaje se ocultará de las líneas temporales de tendencias.",
"confirmations.quiet_post_quote_info.title": "Citado de mensajes públicos pero silenciosos",
"confirmations.redraft.confirm": "Eliminar mensaje original y editarlo",
"confirmations.redraft.message": "¿Estás seguro que querés eliminar este mensaje y volver a editarlo? Se perderán las veces marcadas como favorito y sus adhesiones, y las respuestas al mensaje original quedarán huérfanas.",
"confirmations.redraft.message": "¿De verdad querés eliminar este mensaje y volver a editarlo? Se perderán las veces marcadas como favorito y sus adhesiones, y las respuestas al mensaje original quedarán huérfanas.",
"confirmations.redraft.title": "¿Eliminar y volver a redactar mensaje?",
"confirmations.remove_from_followers.confirm": "Quitar seguidor",
"confirmations.remove_from_followers.message": "{name} dejará de seguirte. ¿Estás seguro de que querés continuar?",
"confirmations.remove_from_followers.message": "{name} dejará de seguirte. ¿De verdad querés continuar?",
"confirmations.remove_from_followers.title": "¿Quitar seguidor?",
"confirmations.revoke_collection_inclusion.confirm": "Quitarme",
"confirmations.revoke_collection_inclusion.message": "Esta acción es permanente, y el autor no podrá volver a agregarte a la colección más adelante.",
@@ -518,7 +537,7 @@
"copypaste.copied": "Copiado",
"copypaste.copy_to_clipboard": "Copiar al portapapeles",
"directory.federated": "Desde fediverso conocido",
"directory.local": "Sólo de {domain}",
"directory.local": "Solo de {domain}",
"directory.new_arrivals": "Recién llegados",
"directory.recently_active": "Recientemente activos",
"disabled_account_banner.account_settings": "Config. de la cuenta",
@@ -893,10 +912,10 @@
"notification_requests.accept": "Aceptar",
"notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud…} other {Aceptar # solicitudes…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceptar solicitud} other {Aceptar solicitudes}}",
"notification_requests.confirm_accept_multiple.message": "Estás a punto de aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿Estás seguro de que querés continuar?",
"notification_requests.confirm_accept_multiple.message": "Estás a punto de aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿De verdad querés continuar?",
"notification_requests.confirm_accept_multiple.title": "¿Aceptar solicitudes de notificación?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Descartar solicitud} other {Descartar solicitudes}}",
"notification_requests.confirm_dismiss_multiple.message": "Estás a punto de descartar {count, plural, one {una solicitud} other {# solicitudes}}. No vas a poder acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿Estás seguro de que querés continuar?",
"notification_requests.confirm_dismiss_multiple.message": "Estás a punto de descartar {count, plural, one {una solicitud} other {# solicitudes}}. No vas a poder acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿De verdad querés continuar?",
"notification_requests.confirm_dismiss_multiple.title": "¿Descartar solicitudes de notificación?",
"notification_requests.dismiss": "Descartar",
"notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud…} other {Descartar # solicitudes…}}",
@@ -910,7 +929,7 @@
"notification_requests.title": "Notificaciones filtradas",
"notification_requests.view": "Ver notificaciones",
"notifications.clear": "Limpiar notificaciones",
"notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?",
"notifications.clear_confirmation": "¿De verdad querés limpiar todas tus notificaciones permanentemente?",
"notifications.clear_title": "¿Limpiar notificaciones?",
"notifications.column_settings.admin.report": "Nuevas denuncias:",
"notifications.column_settings.admin.sign_up": "Nuevos registros:",
@@ -1219,7 +1238,7 @@
"status.uncached_media_warning": "Previsualización no disponible",
"status.unmute_conversation": "Dejar de silenciar conversación",
"status.unpin": "Dejar de fijar",
"subscribed_languages.lead": "Después del cambio, sólo los mensajes en los idiomas seleccionados aparecerán en tu línea temporal Principal y en las líneas de tiempo de lista. No seleccionés ningún idioma para poder recibir mensajes en todos los idiomas.",
"subscribed_languages.lead": "Después del cambio, solo los mensajes en los idiomas seleccionados aparecerán en tu línea temporal Principal y en las líneas de tiempo de lista. No seleccionés ningún idioma para poder recibir mensajes en todos los idiomas.",
"subscribed_languages.save": "Guardar cambios",
"subscribed_languages.target": "Cambiar idiomas suscritos para {target}",
"tabs_bar.home": "Principal",

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "Recogido el campo «{item}».",
"account_edit.field_reorder_modal.handle_label": "Arrastra el campo «{item}»",
"account_edit.field_reorder_modal.title": "Reorganizar campos",
"account_edit.image_alt_modal.add_title": "Añadir texto alternativo",
"account_edit.image_alt_modal.details_content": "QUÉ HACER: <ul><li>Descríbete tal y como apareces en la imagen</li><li>Utiliza la tercera persona (p. ej., «Alex» en lugar de «yo»)</li><li>Sé conciso: unas pocas palabras suelen bastar</li></ul>QUÉ NO HACER: <ul><li>Empezar con «Foto de»: es redundante para los lectores de pantalla</li></ul> EJEMPLO: <ul><li>«Alex usando una camiseta verde y anteojos»</li></ul>",
"account_edit.image_alt_modal.details_title": "Consejo: Texto alternativo para las fotos de perfil",
"account_edit.image_alt_modal.edit_title": "Editar texto alternativo",
"account_edit.image_alt_modal.text_hint": "El texto alternativo ayuda a los usuarios de lectores de pantalla a entender tu contenido.",
"account_edit.image_alt_modal.text_label": "Texto alternativo",
"account_edit.image_delete_modal.confirm": "¿Estás seguro de que quieres eliminar esta imagen? Esta acción no se puede deshacer.",
"account_edit.image_delete_modal.delete_button": "Eliminar",
"account_edit.image_delete_modal.title": "¿Eliminar imagen?",
"account_edit.image_edit.add_button": "Añadir imagen",
"account_edit.image_edit.alt_add_button": "Añadir texto alternativo",
"account_edit.image_edit.alt_edit_button": "Editar texto alternativo",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "Personaliza las pestañas de tu perfil y lo que muestran.",
"account_edit.profile_tab.title": "Configuración de la pestaña de perfil",
"account_edit.save": "Guardar",
"account_edit.upload_modal.back": "Volver",
"account_edit.upload_modal.done": "Hecho",
"account_edit.upload_modal.next": "Siguiente",
"account_edit.upload_modal.step_crop.zoom": "Acercar",
"account_edit.upload_modal.step_upload.button": "Explorar archivos",
"account_edit.upload_modal.step_upload.dragging": "Arrastrar para subir",
"account_edit.upload_modal.step_upload.header": "Elegir una imagen",
"account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF o JPG, con un tamaño máximo de {limit} MB.{br}La imagen se redimensionará a {width} x {height} píxeles.",
"account_edit.upload_modal.title_add": "Agregar foto de perfil",
"account_edit.upload_modal.title_replace": "Reemplazar foto de perfil",
"account_edit.verified_modal.details": "Agrega credibilidad a tu perfil de Mastodon verificando los enlaces a sitios web personales. Así es como funciona:",
"account_edit.verified_modal.invisible_link.details": "Agrega el enlace a tu encabezado. La parte importante es rel=\"me\", que evita la suplantación de identidad en sitios web con contenido generado por los usuarios. Incluso puedes usar una etiqueta de enlace en el encabezado de la página en lugar de {tag}, pero el HTML debe ser accesible sin ejecutar JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "¿Cómo hago para que el enlace sea invisible?",

View File

@@ -184,6 +184,13 @@
"account_edit.field_reorder_modal.drag_start": "Valittu kenttä ”{item}”.",
"account_edit.field_reorder_modal.handle_label": "Siirrä kenttää ”{item}”",
"account_edit.field_reorder_modal.title": "Järjestele kenttiä",
"account_edit.image_alt_modal.add_title": "Lisää tekstivastine",
"account_edit.image_alt_modal.details_title": "Vinkkejä: profiilikuvien tekstivastineet",
"account_edit.image_alt_modal.edit_title": "Muokkaa tekstivastinetta",
"account_edit.image_alt_modal.text_label": "Tekstivastine",
"account_edit.image_delete_modal.confirm": "Haluatko varmasti poistaa tämän kuvan? Tätä toimea ei voi kumota.",
"account_edit.image_delete_modal.delete_button": "Poista",
"account_edit.image_delete_modal.title": "Poistetaanko kuva?",
"account_edit.image_edit.add_button": "Lisää kuva",
"account_edit.image_edit.alt_add_button": "Lisää tekstivastine",
"account_edit.image_edit.alt_edit_button": "Muokkaa tekstivastinetta",
@@ -203,6 +210,16 @@
"account_edit.profile_tab.subtitle": "Mukauta profiilisi välilehtiä ja sitä, mitä niissä näkyy.",
"account_edit.profile_tab.title": "Profiilin välilehtien asetukset",
"account_edit.save": "Tallenna",
"account_edit.upload_modal.back": "Takaisin",
"account_edit.upload_modal.done": "Valmis",
"account_edit.upload_modal.next": "Seuraava",
"account_edit.upload_modal.step_crop.zoom": "Lähennä/loitonna",
"account_edit.upload_modal.step_upload.button": "Selaa tiedostoja",
"account_edit.upload_modal.step_upload.dragging": "Lähetä pudottamalla",
"account_edit.upload_modal.step_upload.header": "Valitse kuva",
"account_edit.upload_modal.step_upload.hint": "WEBP-, PNG-, GIF- tai JPG-muotoinen, enintään {limit} Mt.{br}Kuva skaalautuu kokoon {width}×{height} px.",
"account_edit.upload_modal.title_add": "Lisää profiilikuva",
"account_edit.upload_modal.title_replace": "Korvaa profiilikuva",
"account_edit.verified_modal.details": "Lisää Mastodon-profiiliisi uskottavuutta vahvistamalla linkit henkilökohtaisiin verkkosivustoihin. Näin se toimii:",
"account_edit.verified_modal.invisible_link.details": "Lisää linkki HTML:n head-osaan. Tärkeä kohta on rel=\"me\", joka estää toiseksi tekeytymisen sivustoilla, joilla on käyttäjien luomaa sisältöä. Voit jopa käyttää link-tunnistetta sivun head-osassa {tag}-tunnisteen sijaan, mutta HTML:n tulee olla saatavilla suorittamatta JavaScriptia.",
"account_edit.verified_modal.invisible_link.summary": "Miten teen linkistä näkymättömän?",

View File

@@ -203,6 +203,8 @@
"account_edit.profile_tab.subtitle": "Personnaliser les onglets de votre profil et leur contenu.",
"account_edit.profile_tab.title": "Paramètres de l'onglet du profil",
"account_edit.save": "Enregistrer",
"account_edit.upload_modal.back": "Retour",
"account_edit.upload_modal.done": "Terminé",
"account_edit.verified_modal.details": "Ajouter de la crédibilité à votre profil Mastodon en vérifiant les liens vers vos sites Web personnels. Voici comment cela fonctionne :",
"account_edit.verified_modal.invisible_link.details": "Ajouter le lien dans votre en-tête. La partie importante est « rel=\"me\" » qui empêche l'usurpation d'identité sur des sites Web ayant du contenu généré par d'autres utilisateur·rice·s. Vous pouvez aussi utiliser une balise link dans l'en-tête de la page au lieu de {tag}, mais le code HTML doit être accessible sans avoir besoin d'exécuter du JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Comment rendre le lien invisible ?",

View File

@@ -203,6 +203,8 @@
"account_edit.profile_tab.subtitle": "Personnaliser les onglets de votre profil et leur contenu.",
"account_edit.profile_tab.title": "Paramètres de l'onglet du profil",
"account_edit.save": "Enregistrer",
"account_edit.upload_modal.back": "Retour",
"account_edit.upload_modal.done": "Terminé",
"account_edit.verified_modal.details": "Ajouter de la crédibilité à votre profil Mastodon en vérifiant les liens vers vos sites Web personnels. Voici comment cela fonctionne :",
"account_edit.verified_modal.invisible_link.details": "Ajouter le lien dans votre en-tête. La partie importante est « rel=\"me\" » qui empêche l'usurpation d'identité sur des sites Web ayant du contenu généré par d'autres utilisateur·rice·s. Vous pouvez aussi utiliser une balise link dans l'en-tête de la page au lieu de {tag}, mais le code HTML doit être accessible sans avoir besoin d'exécuter du JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Comment rendre le lien invisible ?",

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "Seleccionado o campo \"{item}\".",
"account_edit.field_reorder_modal.handle_label": "Arrastra o campo \"{item}\"",
"account_edit.field_reorder_modal.title": "Ordear campos",
"account_edit.image_alt_modal.add_title": "Engadir texto descritivo",
"account_edit.image_alt_modal.details_content": "COMO: <ul> <li>Descríbete como apareces na imaxe</li> <li>Usa a terceira persoa (ex. “Alex”, e non “eu”)</li> <li>Sé breve abondan poucas palabras</li> </ul> NON fagas: <ul> <li>Comezar con “Foto de” é redundante nos lectores de pantalla</li> </ul> EXEMPLO: <ul> <li>“Alex vestindo camisa verde e cos lentes postos”</li> </ul>",
"account_edit.image_alt_modal.details_title": "Consellos: Texto descritivo para fotos de perfil",
"account_edit.image_alt_modal.edit_title": "Editar descrición",
"account_edit.image_alt_modal.text_hint": "A descrición axuda ás persoas que usan lectores de pantalla a comprender o que publicas.",
"account_edit.image_alt_modal.text_label": "Texto descritivo",
"account_edit.image_delete_modal.confirm": "Tes certeza de querer eliminar esta imaxe? Non se poderá desfacer a acción.",
"account_edit.image_delete_modal.delete_button": "Eliminar",
"account_edit.image_delete_modal.title": "Eliminar imaxe?",
"account_edit.image_edit.add_button": "Engadir imaxe",
"account_edit.image_edit.alt_add_button": "Engadir descrición",
"account_edit.image_edit.alt_edit_button": "Editar descrición",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "Personaliza as pestanas e o seu contido no teu perfil.",
"account_edit.profile_tab.title": "Perfil e axustes das pestanas",
"account_edit.save": "Gardar",
"account_edit.upload_modal.back": "Volver",
"account_edit.upload_modal.done": "Feito",
"account_edit.upload_modal.next": "Seguinte",
"account_edit.upload_modal.step_crop.zoom": "Achegamento",
"account_edit.upload_modal.step_upload.button": "Explorar ficheiros",
"account_edit.upload_modal.step_upload.dragging": "Solta aquí para subir",
"account_edit.upload_modal.step_upload.header": "Escoller unha imaxe",
"account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF ou JPG, ata {limit}MB.{br}A imaxe será comprimida a {width}x{height}px.",
"account_edit.upload_modal.title_add": "Engadir foto do perfil",
"account_edit.upload_modal.title_replace": "Substituír foto do perfil",
"account_edit.verified_modal.details": "Engade maior credibilidade ao teu perfil Mastodon verificando as ligazóns ás túas páxinas web persoais. Funciona así:",
"account_edit.verified_modal.invisible_link.details": "Engade a ligazón ao «header» da páxina web. A parte importante é rel=\"me\", que evita a suplantación en sitios web con contido creado polas usuarias. Tamén podes usar a etiqueta «link» na cabeceira da páxina no lugar de {tag}, pero o HTML ten que ser accesible sen usar JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Como fago visible a ligazón?",

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "Náði reitnum \"{item}\".",
"account_edit.field_reorder_modal.handle_label": "Dragðu reitinn \"{item}\"",
"account_edit.field_reorder_modal.title": "Endurraða gagnasviðum",
"account_edit.image_alt_modal.add_title": "Bæta við hjálpartexta",
"account_edit.image_alt_modal.details_content": "GERÐU ÞETTA: <ul> <li>Lýstu þér eins og þú ert á myndinni</li> <li>Notaðu þriðjupersónu (t.d. “Nonni” í staðinn fyrir “ég”)</li> <li>Vertu stuttorð/ur fá orð eru oft nóg</li> </ul> EKKI GERA ÞETTA: <ul> <li>Byrja á “Mynd af” það er óþarft fyrir skjálesara</li> </ul> DÆMI: <ul> <li>“Nonni í grænni skyrtu og með gleraugu”</li> </ul>",
"account_edit.image_alt_modal.details_title": "Ábending: hjálpartexti fyrir auðkennismyndir",
"account_edit.image_alt_modal.edit_title": "Breyta hjálpartexta",
"account_edit.image_alt_modal.text_hint": "Hjálpartexti hjálpar fólki sem notar skjálesara að skilja efnið frá þér.",
"account_edit.image_alt_modal.text_label": "Hjálpartexti mynda",
"account_edit.image_delete_modal.confirm": "Ertu viss um að þú viljir eyða þessari mynd? Þessa aðgerð er ekki hægt að afturkalla.",
"account_edit.image_delete_modal.delete_button": "Eyða",
"account_edit.image_delete_modal.title": "Eyða mynd?",
"account_edit.image_edit.add_button": "Bæta við mynd",
"account_edit.image_edit.alt_add_button": "Bæta við hjálpartexta",
"account_edit.image_edit.alt_edit_button": "Breyta hjálpartexta",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "Sérsníddu flipana á notandasniðinu þínu og hvað þeir birta.",
"account_edit.profile_tab.title": "Stillingar notandasniðsflipa",
"account_edit.save": "Vista",
"account_edit.upload_modal.back": "Til baka",
"account_edit.upload_modal.done": "Lokið",
"account_edit.upload_modal.next": "Næsta",
"account_edit.upload_modal.step_crop.zoom": "Aðdráttur",
"account_edit.upload_modal.step_upload.button": "Skoða skrár",
"account_edit.upload_modal.step_upload.dragging": "Slepptu til að senda inn",
"account_edit.upload_modal.step_upload.header": "Veldu mynd",
"account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF eða JPG-snið, allt að {limit}MB.{br}Mynd verður kvörðuð í {width}x{height}px.",
"account_edit.upload_modal.title_add": "Bæta við auðkennismynd",
"account_edit.upload_modal.title_replace": "Skipta um auðkennismynd",
"account_edit.verified_modal.details": "Auktu trúverðugleika Mastodon-aðgangsins þíns með því að bæta við staðfestingartenglum sem vísa á vefsvæðin þín. Hérna sérðu hvernig það virkar:",
"account_edit.verified_modal.invisible_link.details": "Bættu tenglinum í hausinn hjá þér. Mikilvægi hlutinn er rel=\"me\" sem kemur í veg fyrir blekkingu verðandi persónuauðkenni á vefsvæðum með notandaframleiddu efni. Þú getur jafnvel notað tengimerkið í haus síðunnar í staðinn fyrir {tag}, en HTML-kóðinn verður samt að vera aðgengilegur án þess að keyra þurfi JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Hvernig geri ég tengilinn ósýnilegan?",

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "Campo \"{item}\" selezionato.",
"account_edit.field_reorder_modal.handle_label": "Trascina il campo \"{item}\"",
"account_edit.field_reorder_modal.title": "Riorganizza i campi",
"account_edit.image_alt_modal.add_title": "Aggiungi il testo alternativo",
"account_edit.image_alt_modal.details_content": "COSA FARE: <ul> <li>Descriviti come nella foto</li> <li>Usa la terza persona (es. “Alex” invece di “io”)</li> <li>Sii conciso/a poche parole spesso bastano</li> </ul> COSA NON FARE: <ul> <li>Iniziare con “Foto di” è ridondante per i lettori di schermo</li> </ul> ESEMPIO: <ul> <li>“Alex sta indossando una camicia verde e gli occhiali”</li> </ul>",
"account_edit.image_alt_modal.details_title": "Suggerimenti: testo alternativo per le foto del profilo",
"account_edit.image_alt_modal.edit_title": "Modifica il testo alternativo",
"account_edit.image_alt_modal.text_hint": "Il testo alternativo aiuta gli utenti che utilizzano i lettori di schermo a comprendere i tuoi contenuti.",
"account_edit.image_alt_modal.text_label": "Testo alternativo",
"account_edit.image_delete_modal.confirm": "Si è sicuri di voler eliminare questa immagine? Questa azione non può essere annullata.",
"account_edit.image_delete_modal.delete_button": "Elimina",
"account_edit.image_delete_modal.title": "Eliminare l'immagine?",
"account_edit.image_edit.add_button": "Aggiungi un'immagine",
"account_edit.image_edit.alt_add_button": "Aggiungi il testo alternativo",
"account_edit.image_edit.alt_edit_button": "Modifica il testo alternativo",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "Personalizza le schede del tuo profilo e ciò che mostrano.",
"account_edit.profile_tab.title": "Impostazioni della scheda del profilo",
"account_edit.save": "Salva",
"account_edit.upload_modal.back": "Indietro",
"account_edit.upload_modal.done": "Fatto",
"account_edit.upload_modal.next": "Avanti",
"account_edit.upload_modal.step_crop.zoom": "Ingrandimento",
"account_edit.upload_modal.step_upload.button": "Sfoglia i file",
"account_edit.upload_modal.step_upload.dragging": "Trascina per caricare",
"account_edit.upload_modal.step_upload.header": "Scegli un'immagine",
"account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF o JPG, fino a {limit}MB.{br}L'immagine verrà ridimensionata a {width}x{height}px.",
"account_edit.upload_modal.title_add": "Aggiungi la foto del profilo",
"account_edit.upload_modal.title_replace": "Sostituisci la foto del profilo",
"account_edit.verified_modal.details": "Aggiungi credibilità al tuo profilo Mastodon verificando i collegamenti ai siti web personali. Ecco come funziona:",
"account_edit.verified_modal.invisible_link.details": "Aggiungi il collegamento alla tua intestazione. La parte importante è rel=\"me\" che impedisce l'impersonificazione sui siti web con contenuti generati dagli utenti. Puoi anche utilizzare un link tag nell'intestazione della pagina al posto di {tag}, ma il codice HTML deve essere accessibile senza eseguire JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Come faccio a rendere il collegamento invisibile?",

View File

@@ -170,15 +170,15 @@
"account_edit.field_edit_modal.edit_title": "Aangepast veld bewerken",
"account_edit.field_edit_modal.limit_header": "Aanbevolen tekenlimiet overschreden",
"account_edit.field_edit_modal.limit_message": "Mobiele gebruikers zien mogelijk het veld niet volledig.",
"account_edit.field_edit_modal.link_emoji_warning": "We raden aan om aangepaste emoji in combinatie met urls te gebruiken. Aangepaste velden die beide bevatten worden alleen als tekst weergegeven in plaats van als een link, om verwarring van de gebruiker te voorkomen.",
"account_edit.field_edit_modal.link_emoji_warning": "We raden aan om geen lokale emoji in combinatie met URL's te gebruiken. Aangepaste velden die beide bevatten worden alleen als tekst weergegeven, in plaats van als een link. Dit om verwarring voor de gebruiker te voorkomen.",
"account_edit.field_edit_modal.name_hint": "Bijv. \"Persoonlijke website\"",
"account_edit.field_edit_modal.name_label": "Label",
"account_edit.field_edit_modal.url_warning": "Voeg {protocol} toe aan het begin om een link toe te voegen.",
"account_edit.field_edit_modal.url_warning": "Voeg {protocol} aan het begin toe om een link toe te voegen.",
"account_edit.field_edit_modal.value_hint": "Bijv. \"https://example.me\"",
"account_edit.field_edit_modal.value_label": "Waarde",
"account_edit.field_reorder_modal.drag_cancel": "Slepen is geannuleerd. Veld \"{item}\" is weggevallen.",
"account_edit.field_reorder_modal.drag_end": "Veld \"{item}\" was weggevallen.",
"account_edit.field_reorder_modal.drag_instructions": "Druk op spatie of enter om aangepaste velden te herschikken. Gebruik de pijltjestoetsen om het veld omhoog of omlaag te verplaatsen. Druk opnieuw op spatie of enter om het veld in zijn nieuwe positie te laten vallen, of druk op escape om te annuleren.",
"account_edit.field_reorder_modal.drag_cancel": "Slepen is geannuleerd. Veld \"{item}\" werd geschrapt.",
"account_edit.field_reorder_modal.drag_end": "Veld \"{item}\" werd geschrapt.",
"account_edit.field_reorder_modal.drag_instructions": "Druk op spatie of enter om de aangepaste velden te herschikken. Gebruik de pijltjestoetsen om het veld omhoog of omlaag te verplaatsen. Druk opnieuw op spatie of enter om het veld op diens nieuwe positie te laten vallen, of druk op escape om te annuleren.",
"account_edit.field_reorder_modal.drag_move": "Veld \"{item}\" is verplaatst.",
"account_edit.field_reorder_modal.drag_over": "Veld \"{item}\" is over \"{over} \" verplaatst.",
"account_edit.field_reorder_modal.drag_start": "Opgepakt veld \"{item}\".",
@@ -367,8 +367,8 @@
"collections.old_last_post_note": "Meer dan een week geleden voor het laatst een bericht geplaatst",
"collections.remove_account": "Dit account verwijderen",
"collections.report_collection": "Deze verzameling rapporteren",
"collections.revoke_collection_inclusion": "Verwijder mezelf uit deze collectie",
"collections.revoke_inclusion.confirmation": "Je bent verwijderd uit \"{collection}\"",
"collections.revoke_collection_inclusion": "Mezelf uit deze verzameling verwijderen",
"collections.revoke_inclusion.confirmation": "Je bent uit \"{collection}\" verwijderd",
"collections.revoke_inclusion.error": "Er is een fout opgetreden. Probeer het later opnieuw.",
"collections.search_accounts_label": "Naar accounts zoeken om toe te voegen…",
"collections.search_accounts_max_reached": "Je hebt het maximum aantal accounts toegevoegd",
@@ -496,7 +496,7 @@
"confirmations.remove_from_followers.title": "Volger verwijderen?",
"confirmations.revoke_collection_inclusion.confirm": "Verwijder mij",
"confirmations.revoke_collection_inclusion.message": "Deze actie is definitief en de curator kan je later niet opnieuw aan de verzameling toevoegen.",
"confirmations.revoke_collection_inclusion.title": "Verwijder jezelf van deze collectie?",
"confirmations.revoke_collection_inclusion.title": "Jezelf uit deze collectie verwijderen?",
"confirmations.revoke_quote.confirm": "Bericht verwijderen",
"confirmations.revoke_quote.message": "Deze actie kan niet ongedaan worden gemaakt.",
"confirmations.revoke_quote.title": "Bericht verwijderen?",
@@ -967,7 +967,7 @@
"notifications_permission_banner.title": "Mis nooit meer iets",
"onboarding.follows.back": "Terug",
"onboarding.follows.empty": "Helaas kunnen op dit moment geen resultaten worden getoond. Je kunt proberen te zoeken of op de verkenningspagina te bladeren om mensen te vinden die je kunt volgen, of probeer het later opnieuw.",
"onboarding.follows.next": "Volgende: stel je profiel in",
"onboarding.follows.next": "Volgende: je profiel instellen",
"onboarding.follows.search": "Zoeken",
"onboarding.follows.title": "Volg mensen om te beginnen",
"onboarding.profile.discoverable": "Maak mijn profiel vindbaar",

View File

@@ -183,6 +183,15 @@
"account_edit.field_reorder_modal.drag_start": "U mor fusha “{item}”.",
"account_edit.field_reorder_modal.handle_label": "Tërhiqni fushën “{item}”",
"account_edit.field_reorder_modal.title": "Risistemoni fusha",
"account_edit.image_alt_modal.add_title": "Shtoni tekst alternativ",
"account_edit.image_alt_modal.details_content": "MIRË: <ul> <li>Përshkruani veten si në figurë</li> <li>Përdorni gjuhë në vetën e tretë (p.sh., “Gimi”, në vend se “unë”)</li> <li>Jini konciz pak fjalë shpesh mjaftojnë</li> </ul> KEQ: <ul> <li>Tia filloni me “Foto e ” është përsëritje për lexues ekrani</li> </ul> SHEMBULL: <ul> <li>“Gimi me një këmishë të gjelbër dhe syze”</li> </ul>",
"account_edit.image_alt_modal.details_title": "Ndihmëza: Teskt alternativ për figura profilesh",
"account_edit.image_alt_modal.edit_title": "Përpunoni tekst alternativ",
"account_edit.image_alt_modal.text_hint": "Teskti alternativ ndihmon përdorue lexuesish ekrani të kuptojnë lëndën tuaj.",
"account_edit.image_alt_modal.text_label": "Tekst alternativ",
"account_edit.image_delete_modal.confirm": "Jeni i sigurt se doni të fshihet kjo figurë? Ky veprim smund të zhbëhet.",
"account_edit.image_delete_modal.delete_button": "Fshije",
"account_edit.image_delete_modal.title": "Të fshihet figura?",
"account_edit.image_edit.add_button": "Shtoni figurë",
"account_edit.image_edit.alt_add_button": "Shtoni tekst alternativ",
"account_edit.image_edit.alt_edit_button": "Përpunoni tekst alternativ",
@@ -202,6 +211,16 @@
"account_edit.profile_tab.subtitle": "Përshtatni skedat në profilin tuaj dhe ato çka shfaqet në to.",
"account_edit.profile_tab.title": "Rregullime skede profili",
"account_edit.save": "Ruaje",
"account_edit.upload_modal.back": "Mbrapsht",
"account_edit.upload_modal.done": "U bë",
"account_edit.upload_modal.next": "Pasuesja",
"account_edit.upload_modal.step_crop.zoom": "Zoom",
"account_edit.upload_modal.step_upload.button": "Shfletoni kartela",
"account_edit.upload_modal.step_upload.dragging": "Lëreni, që të ngarkohet",
"account_edit.upload_modal.step_upload.header": "Zgjidhni një figurë",
"account_edit.upload_modal.step_upload.hint": "Format WEBP, PNG, GIF ose JPG, deri në {limit}MB.{br}Figura do të ripërmasohet në {width}x{height}px.",
"account_edit.upload_modal.title_add": "Shtoni figurë profili",
"account_edit.upload_modal.title_replace": "Zëvendësoni figurë profili",
"account_edit.verified_modal.details": "Shtoni besueshmëri te profili juaj Mastodon duke verifikuar lidhje për te sajte personalë. Ja se si funksionon:",
"account_edit.verified_modal.invisible_link.details": "Shtojeni lidhjen te kryet tuaja. Pjesa e rëndësishme është rel=\"me\", e cila pengon imitime në sajte me lëndë të prodhuar nga përdoruesit. Mundeni madje të përdorni një etiketë lidhjeje te kryet e faqes në vend të {tag}, por HTML-ja duhet të jetë e përdorshme pa ekzekutim të JavaScript-it.",
"account_edit.verified_modal.invisible_link.summary": "Si ta bëj lidhjen të padukshme?",

View File

@@ -203,6 +203,16 @@
"account_edit.profile_tab.subtitle": "Profilinizdeki sekmeleri ve bunların görüntülediği bilgileri özelleştirin.",
"account_edit.profile_tab.title": "Profil sekme ayarları",
"account_edit.save": "Kaydet",
"account_edit.upload_modal.back": "Geri",
"account_edit.upload_modal.done": "Tamamlandı",
"account_edit.upload_modal.next": "İleri",
"account_edit.upload_modal.step_crop.zoom": "Yakınlaştır",
"account_edit.upload_modal.step_upload.button": "Dosyalara göz at",
"account_edit.upload_modal.step_upload.dragging": "Yüklemek için bırakın",
"account_edit.upload_modal.step_upload.header": "Bir resim seç",
"account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF veya JPG formatında, en fazla {limit} MB.{br}Görsel {width}x{height} piksel boyutuna getirilir.",
"account_edit.upload_modal.title_add": "Profil fotoğrafı ekle",
"account_edit.upload_modal.title_replace": "Profil fotoğrafını değiştir",
"account_edit.verified_modal.details": "Kişisel web sitelerine bağlantıları doğrulayarak Mastodon profilinize güvenilirlik katın. İşte böyle çalışıyor:",
"account_edit.verified_modal.invisible_link.details": "Bağlantıyı başlığınıza ekleyin. Önemli olan kısım, kullanıcı tarafından oluşturulan içeriğe sahip web sitelerinde kimlik sahtekarlığını önleyen rel=\"me\" özniteliğidir. {tag} yerine sayfanın başlığında bir bağlantı etiketi bile kullanabilirsiniz, ancak HTML, JavaScript çalıştırılmadan erişilebilir olmalıdır.",
"account_edit.verified_modal.invisible_link.summary": "Bağlantıyı nasıl görünmez hale getirebilirim?",
@@ -374,6 +384,7 @@
"collections.search_accounts_max_reached": "Maksimum hesabı eklediniz",
"collections.sensitive": "Hassas",
"collections.topic_hint": "Bu koleksiyonun ana konusunu başkalarının anlamasına yardımcı olacak bir etiket ekleyin.",
"collections.topic_special_chars_hint": "Kaydederken özel karakterler silinecektir",
"collections.view_collection": "Koleksiyonu görüntüle",
"collections.view_other_collections_by_user": "Bu kullanıcının diğer koleksiyonlarını görüntüle",
"collections.visibility_public": "Herkese açık",

View File

@@ -203,6 +203,16 @@
"account_edit.profile_tab.subtitle": "Tùy chỉnh tab trên hồ sơ của bạn và những gì chúng hiển thị.",
"account_edit.profile_tab.title": "Thiết lập tab hồ sơ",
"account_edit.save": "Lưu",
"account_edit.upload_modal.back": "Quay lại",
"account_edit.upload_modal.done": "Xong",
"account_edit.upload_modal.next": "Kế tiếp",
"account_edit.upload_modal.step_crop.zoom": "Phóng to",
"account_edit.upload_modal.step_upload.button": "Duyệt tệp",
"account_edit.upload_modal.step_upload.dragging": "Thả để tải lên",
"account_edit.upload_modal.step_upload.header": "Chọn ảnh",
"account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF hoặc JPG, tối đa {limit}MB.{br}Sẽ bị thu xuống {width}x{height}px.",
"account_edit.upload_modal.title_add": "Thêm ảnh đại diện",
"account_edit.upload_modal.title_replace": "Thay thế ảnh đại diện",
"account_edit.verified_modal.details": "Tăng độ tin cậy cho hồ sơ Mastodon của bạn bằng cách xác minh liên kết đến trang web cá nhân. Cách thức thực hiện như sau:",
"account_edit.verified_modal.invisible_link.details": "Thêm liên kết trên header của trang. Quan trọng là rel=\"me\" giúp ngăn chặn việc mạo danh trên các trang web có nội dung do người dùng tạo. Bạn cũng có thể sử dụng một thẻ link thay vì {tag}, nhưng HTML phải có thể truy cập được mà không cần thực thi JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Làm thế nào để ẩn liên kết?",

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "已选中字段“{item}”。",
"account_edit.field_reorder_modal.handle_label": "拖拽字段“{item}”",
"account_edit.field_reorder_modal.title": "重新排列字段",
"account_edit.image_alt_modal.add_title": "添加替代文本",
"account_edit.image_alt_modal.details_content": "建议这么做:<ul> <li>根据图片内容描述你自己的样子</li> <li>文本使用第三人称例如称呼自己为“Alex”而不是“我”</li> <li>保持简洁:通常只需要简单描述一下</li> </ul> 不建议这么做:<ul> <li>以“……的图片”开头或结尾:屏幕阅读器自己会说这是图片</li> </ul> 示例:<ul> <li>“穿绿色衬衫戴着眼镜的Alex”</li> </ul>",
"account_edit.image_alt_modal.details_title": "小贴士:为头像添加替代文本",
"account_edit.image_alt_modal.edit_title": "编辑替代文本",
"account_edit.image_alt_modal.text_hint": "替代文本可以帮助使用屏幕阅读器的用户理解你的内容。",
"account_edit.image_alt_modal.text_label": "替代文本",
"account_edit.image_delete_modal.confirm": "确定要删除此图片吗?此操作无法撤销。",
"account_edit.image_delete_modal.delete_button": "删除",
"account_edit.image_delete_modal.title": "删除图片吗?",
"account_edit.image_edit.add_button": "添加图片",
"account_edit.image_edit.alt_add_button": "添加替代文本",
"account_edit.image_edit.alt_edit_button": "编辑替代文本",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "自定义你个人资料的标签页及其显示的内容。",
"account_edit.profile_tab.title": "个人资料标签页设置",
"account_edit.save": "保存",
"account_edit.upload_modal.back": "返回",
"account_edit.upload_modal.done": "完成",
"account_edit.upload_modal.next": "下一步",
"account_edit.upload_modal.step_crop.zoom": "缩放",
"account_edit.upload_modal.step_upload.button": "浏览文件",
"account_edit.upload_modal.step_upload.dragging": "将文件拖放到此处开始上传",
"account_edit.upload_modal.step_upload.header": "选择图片",
"account_edit.upload_modal.step_upload.hint": "支持 WEBP、PNG、GIF 或 JPG 格式,最大 {limit} MB。{br}图片将被缩放至 {width}×{height}px。",
"account_edit.upload_modal.title_add": "添加头像",
"account_edit.upload_modal.title_replace": "替换头像",
"account_edit.verified_modal.details": "要增加 Mastodon 个人资料的可信度,可以验证指向个人网站的链接。运作方式如下:",
"account_edit.verified_modal.invisible_link.details": "将链接添加到标头header中。其中很重要的部分是 rel=\"me\",可以防止他人通过用户生成内容模仿。你甚至可以在页面标头中使用 link 标签而不是 {tag},但包含该部分的 HTML 必须在没有 JavaScript 执行环境下访问时依然存在。",
"account_edit.verified_modal.invisible_link.summary": "如何隐藏此链接?",

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "已選取欄位「{item}」。",
"account_edit.field_reorder_modal.handle_label": "拖放欄位「{item}」",
"account_edit.field_reorder_modal.title": "重新整理欄位",
"account_edit.image_alt_modal.add_title": "新增 ALT 說明文字",
"account_edit.image_alt_modal.details_content": "要:<ul> <li>根據圖片描述自己</li> <li>使用第三人稱(例如用「小明」代替「我」)</li> <li>言簡意賅,寥寥數語足矣</li> </ul> 不要:<ul> <li>從「照片」開頭,這對螢幕閱讀程式來說是多餘的</li> </ul> 範例:<ul> <li>「小明穿著綠色襯衫,戴著眼鏡」</li> </ul>",
"account_edit.image_alt_modal.details_title": "小撇步:個人檔案照片的 ALT 說明文字",
"account_edit.image_alt_modal.edit_title": "編輯 ALT 說明文字",
"account_edit.image_alt_modal.text_hint": "ALT 說明文字可協助螢幕閱讀程式使用者理解您的內容。",
"account_edit.image_alt_modal.text_label": "ALT 說明文字",
"account_edit.image_delete_modal.confirm": "您確定要刪除此圖片嗎?此動作無法復原。",
"account_edit.image_delete_modal.delete_button": "刪除",
"account_edit.image_delete_modal.title": "是否刪除圖片?",
"account_edit.image_edit.add_button": "新增圖片",
"account_edit.image_edit.alt_add_button": "新增 ALT 說明文字",
"account_edit.image_edit.alt_edit_button": "編輯 ALT 說明文字",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "自訂您個人檔案之分頁與內容。",
"account_edit.profile_tab.title": "個人檔案分頁設定",
"account_edit.save": "儲存",
"account_edit.upload_modal.back": "上一步",
"account_edit.upload_modal.done": "完成",
"account_edit.upload_modal.next": "下一步",
"account_edit.upload_modal.step_crop.zoom": "縮放",
"account_edit.upload_modal.step_upload.button": "瀏覽檔案",
"account_edit.upload_modal.step_upload.dragging": "拖曳以上傳",
"account_edit.upload_modal.step_upload.header": "選擇圖片",
"account_edit.upload_modal.step_upload.hint": "WEBP、PNG、GIF 或 JPG 格式,最大 {limit}MB。{br}圖片將會縮放至 {width}x{height} 像素。",
"account_edit.upload_modal.title_add": "新增個人檔案照片",
"account_edit.upload_modal.title_replace": "更換個人檔案照片",
"account_edit.verified_modal.details": "藉由驗證連結至個人網站增加您 Mastodon 個人檔案之可信度。運作方式如下:",
"account_edit.verified_modal.invisible_link.details": "新增連結至您的標頭 (header)。其重要的部分是 rel=\"me\" ,防止透過使用者產生內容模擬。您甚至能使用頁面標頭之 link 標籤取代頁面中的 {tag},但 HTML 必須能於不執行 JavaScript 情況下所存取。",
"account_edit.verified_modal.invisible_link.summary": "如何隱藏此連結?",

View File

@@ -440,7 +440,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def forward_for_reply
return unless @status.distributable? && @json['signature'].present? && reply_to_local?
ActivityPub::RawDistributionWorker.perform_async(Oj.dump(@json), replied_to_status.account_id, [@account.preferred_inbox_url])
ActivityPub::RawDistributionWorker.perform_async(JSON.generate(@json), replied_to_status.account_id, [@account.preferred_inbox_url])
end
def increment_voters_count!

View File

@@ -40,7 +40,7 @@ class ActivityPub::Activity::FeatureRequest < ActivityPub::Activity
end
def queue_delivery!(collection_item, serializer)
json = Oj.dump(serialize_payload(collection_item, serializer))
json = JSON.generate(serialize_payload(collection_item, serializer))
ActivityPub::DeliveryWorker.perform_async(json, @featured_account.id, @account.inbox_url)
end
end

View File

@@ -20,7 +20,7 @@ class ActivityPub::Forwarder
private
def payload
@payload ||= Oj.dump(@json)
@payload ||= JSON.generate(@json)
end
def reblogged_by_account_ids

View File

@@ -88,7 +88,7 @@ class Admin::Metrics::Dimension::SoftwareVersionsDimension < Admin::Metrics::Dim
value: version,
human_value: version,
}
rescue Terrapin::CommandNotFoundError, Terrapin::ExitStatusError, Oj::ParseError
rescue Terrapin::CommandNotFoundError, Terrapin::ExitStatusError, JSON::ParserError
nil
end
end

View File

@@ -78,7 +78,7 @@ class TranslationService::DeepL < TranslationService
provider: 'DeepL.com'
)
end
rescue Oj::ParseError
rescue JSON::ParserError
raise UnexpectedResponseError
end
end

View File

@@ -55,7 +55,7 @@ class TranslationService::LibreTranslate < TranslationService
provider: 'LibreTranslate'
)
end
rescue Oj::ParseError
rescue JSON::ParserError
raise UnexpectedResponseError
end
end

View File

@@ -9,7 +9,7 @@ class VideoMetadataExtractor
@metadata = JSON.parse(ffmpeg_command_output, symbolize_names: true)
parse_metadata
rescue Terrapin::ExitStatusError, Oj::ParseError
rescue Terrapin::ExitStatusError, JSON::ParserError
@invalid = true
rescue Terrapin::CommandNotFoundError
raise Paperclip::Errors::CommandNotFoundError, 'Could not run the `ffprobe` command. Please install ffmpeg.' # rubocop:disable I18n/RailsI18n/DecorateString -- This error is not user-facing

View File

@@ -57,7 +57,7 @@ class Webfinger
def perform
Response.new(@uri, body_from_webfinger)
rescue Oj::ParseError
rescue JSON::ParserError
raise Webfinger::Error, "Invalid JSON in response for #{@uri}"
rescue Addressable::URI::InvalidURIError
raise Webfinger::Error, "Invalid URI for #{@uri}"

View File

@@ -10,7 +10,7 @@ class Webhooks::PayloadRenderer
def get(path)
value = @document.dig(*parse_path(path))
string = Oj.dump(value)
string = JSON.generate(value)
# We want to make sure people can use the variable inside
# other strings, so it can't be wrapped in quotes.

View File

@@ -19,7 +19,7 @@ class ActivityPub::FetchRemoteActorService < BaseService
else
body_to_json(prefetched_body, compare_id: uri)
end
rescue Oj::ParseError
rescue JSON::ParserError
raise Error, "Error parsing JSON-LD document #{uri}"
end

View File

@@ -64,7 +64,7 @@ class ActivityPub::ProcessAccountService < BaseService
end
@account
rescue Oj::ParseError
rescue JSON::ParserError
nil
end

View File

@@ -38,7 +38,7 @@ class ActivityPub::ProcessCollectionService < BaseService
else
process_items [@json]
end
rescue Oj::ParseError
rescue JSON::ParserError
nil
end

View File

@@ -22,7 +22,7 @@ class SoftwareUpdateCheckService < BaseService
Request.new(:get, "#{api_url}?version=#{version}").add_headers('Accept' => 'application/json', 'User-Agent' => 'Mastodon update checker').perform do |res|
return JSON.parse(res.body_with_limit) if res.code == 200
end
rescue *Mastodon::HTTP_CONNECTION_ERRORS, Oj::ParseError
rescue *Mastodon::HTTP_CONNECTION_ERRORS, JSON::ParserError
nil
end

View File

@@ -61,7 +61,7 @@ class Scheduler::SelfDestructScheduler
adapter: ActivityPub::Adapter
).as_json
json = Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(account))
json = JSON.generate(ActivityPub::LinkedDataSignature.new(payload).sign!(account))
ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url|
[json, account.id, inbox_url]

View File

@@ -26,7 +26,7 @@ es-AR:
fields:
fields_with_values_missing_labels: contiene valores con etiquetas faltantes
username:
invalid: sólo letras, números y subguiones ("_")
invalid: solo letras, números y subguiones ("_")
reserved: está reservado
admin/webhook:
attributes:

View File

@@ -49,7 +49,7 @@ es-AR:
subject: 'Mastodon: instrucciones para cambiar la contraseña'
title: Cambiar contraseña
two_factor_disabled:
explanation: Ahora es posible iniciar sesión utilizando sólo la dirección de correo electrónico y la contraseña.
explanation: Ahora es posible iniciar sesión utilizando solo la dirección de correo electrónico y la contraseña.
subject: 'Mastodon: autenticación de dos factores, deshabilitada'
subtitle: Se deshabilitó la autenticación de dos factores para tu cuenta.
title: 2FA deshabilitada
@@ -76,7 +76,7 @@ es-AR:
title: Se eliminó una de tus llaves de seguridad
webauthn_disabled:
explanation: Se deshabilitó la autenticación con claves de seguridad para tu cuenta.
extra: Ahora es posible iniciar sesión utilizando sólo la clave numérica ("token") generada por la aplicación TOTP emparejada.
extra: Ahora es posible iniciar sesión utilizando solo la clave numérica ("token") generada por la aplicación TOTP emparejada.
subject: 'Mastodon: autenticación con llaves de seguridad, deshabilitada'
title: Llaves de seguridad deshabilitadas
webauthn_enabled:

View File

@@ -25,7 +25,7 @@ es-AR:
edit: Editar
submit: Enviar
confirmations:
destroy: "¿Estás seguro?"
destroy: "¿Continuar?"
edit:
title: Editar aplicación
form:
@@ -69,7 +69,7 @@ es-AR:
buttons:
revoke: Revocar
confirmations:
revoke: "¿Estás seguro?"
revoke: "¿Continuar?"
index:
authorized_at: Autorizado el %{date}
description_html: Estas son aplicaciones que pueden acceder a tu cuenta usando la API. Si hay aplicaciones que no reconocés acá, o que funcionan de forma sospechosa, podés revocar su acceso.
@@ -118,9 +118,9 @@ es-AR:
notice: Aplicación revocada.
grouped_scopes:
access:
read: Acceso de sólo lectura
read: Acceso de solo lectura
read/write: Acceso de lectura y escritura
write: Acceso de sólo escritura
write: Acceso de solo escritura
title:
accounts: Cuentas
admin/accounts: Administración de cuentas

View File

@@ -40,7 +40,7 @@ es-AR:
add_email_domain_block: Bloquear el dominio del correo electrónico
approve: Aprobar
approved_msg: Se aprobó exitosamente la solicitud de registro de %{username}
are_you_sure: "¿Estás seguro?"
are_you_sure: "¿Continuar?"
avatar: Avatar
by_domain: Dominio
change_email:
@@ -144,7 +144,7 @@ es-AR:
search_same_ip: Otros usuarios con la misma dirección IP
security: Seguridad
security_measures:
only_password: Sólo contraseña
only_password: Solo contraseña
password_and_2fa: Contraseña y 2FA
sensitive: Forzar como sensible
sensitized: Marcado como sensible
@@ -379,7 +379,7 @@ es-AR:
not_permitted: No tenés permiso para realizar esta acción
overwrite: Sobreescribir
shortcode: Código corto
shortcode_hint: Al menos 2 caracteres, sólo caracteres alfanuméricos y subguiones ("_")
shortcode_hint: Al menos 2 caracteres, solo caracteres alfanuméricos y subguiones ("_")
title: Emojis personalizados
uncategorized: Sin categoría
unlist: No listar
@@ -559,7 +559,7 @@ es-AR:
back_to_limited: Limitados
back_to_warning: Advertencia
by_domain: Dominio
confirm_purge: "¿Estás seguro que querés eliminar permanentemente los datos de este dominio?"
confirm_purge: "¿De verdad querés eliminar permanentemente los datos de este dominio?"
content_policies:
comment: Nota interna
description_html: Podés definir políticas de contenido que se aplicarán a todas las cuentas de este dominio y a cualquiera de sus subdominios.
@@ -675,16 +675,16 @@ es-AR:
mark_as_sensitive_description_html: Los archivos de medios en los mensajes denunciados se marcarán como sensibles y se registrará un incumplimiento para ayudarte a escalar las futuras infracciones de la misma cuenta.
other_description_html: Ver más opciones para controlar el comportamiento de la cuenta y personalizar la comunicación de la cuenta denunciada.
resolve_description_html: No se tomarán medidas contra la cuenta denunciada, no se registrará el incumplimiento, y se cerrará la denuncia.
silence_description_html: La cuenta será visible sólo para quienes ya la siguen o la busquen manualmente, limitando severamente su alcance. Siempre puede ser revertido. Esto cierra todas las denuncias contra esta cuenta.
silence_description_html: La cuenta será visible solo para quienes ya la siguen o la busquen manualmente, limitando severamente su alcance. Siempre puede ser revertido. Esto cierra todas las denuncias contra esta cuenta.
suspend_description_html: La cuenta y todos sus contenidos serán inaccesibles y finalmente eliminados, e interactuar con ella será imposible. Revertible en 30 días. Esto cierra todas las denuncias contra esta cuenta.
actions_description_html: Decidí qué medidas tomar para resolver esta denuncia. Si tomás una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría <strong>Spam</strong>.
actions_description_remote_html: Decidí qué medidas tomar para resolver esta denuncia. Esto sólo afectará la forma en que <strong>tu servidor</strong> se comunica con esta cuenta remota y maneja su contenido.
actions_description_remote_html: Decidí qué medidas tomar para resolver esta denuncia. Esto solo afectará la forma en que <strong>tu servidor</strong> se comunica con esta cuenta remota y maneja su contenido.
actions_no_posts: Esta denuncia no tiene ningún mensaje asociado para eliminar
add_to_report: Agregar más a la denuncia
already_suspended_badges:
local: Ya suspendido en este servidor
remote: Ya suspendido en su servidor
are_you_sure: "¿Estás seguro?"
are_you_sure: "¿Continuar?"
assign_to_self: Asignármela a mí
assigned: Moderador asignado
by_target_domain: Dominio de la cuenta denunciada
@@ -738,7 +738,7 @@ es-AR:
actions:
delete_html: Eliminar los mensajes ofensivos
mark_as_sensitive_html: Marcar los mensajes ofensivos como sensibles
silence_html: Limitar severamente el alcance de <strong>@%{acct}</strong> haciendo que su perfil y contenido sólo sean visibles para las personas que ya lo siguen o que busquen manualmente su perfil
silence_html: Limitar severamente el alcance de <strong>@%{acct}</strong> haciendo que su perfil y contenido solo sean visibles para las personas que ya lo siguen o que busquen manualmente su perfil
suspend_html: Suspender <strong>@%{acct}</strong>, haciendo su perfil y contenido inaccesibles, e imposibilitando la interacción con la cuenta
close_report: 'Marcar denuncia #%{id} como resuelta'
close_reports_html: Marcar <strong>todas</strong> las denuncias contra <strong>@%{acct}</strong> como resueltas
@@ -1054,16 +1054,16 @@ es-AR:
trends:
allow: Permitir
approved: Aprobadas
confirm_allow: "¿Estás seguro de que querés permitir las etiquetas seleccionadas?"
confirm_disallow: "¿Estás seguro de que no querés permitir las etiquetas seleccionadas?"
confirm_allow: "¿De verdad querés permitir las etiquetas seleccionadas?"
confirm_disallow: "¿De verdad no querés permitir las etiquetas seleccionadas?"
disallow: Rechazar
links:
allow: Permitir enlace
allow_provider: Permitir medio
confirm_allow: "¿Estás seguro de que querés permitir los enlaces seleccionados?"
confirm_allow_provider: "¿Estás seguro de que querés permitir los proveedores seleccionados?"
confirm_disallow: "¿Estás seguro de que no querés permitir los enlaces seleccionados?"
confirm_disallow_provider: "¿Estás seguro de que no querés permitir los proveedores seleccionados?"
confirm_allow: "¿De verdad querés permitir los enlaces seleccionados?"
confirm_allow_provider: "¿De verdad querés permitir los proveedores seleccionados?"
confirm_disallow: "¿De verdad no querés permitir los enlaces seleccionados?"
confirm_disallow_provider: "¿De verdad no querés permitir los proveedores seleccionados?"
description_html: Estos son enlaces que actualmente están siendo muy compartidos por cuentas desde las que tu servidor ve los mensajes. Esto puede ayudar a tus usuarios a averiguar qué está pasando en el mundo. No hay enlaces que se muestren públicamente hasta que autoricés al publicador. También podés permitir o rechazar enlaces individuales.
disallow: Rechazar enlace
disallow_provider: Rechazar medio
@@ -1076,7 +1076,7 @@ es-AR:
title: Enlaces en tendencia
usage_comparison: Compartido %{today} veces hoy, comparado con la/s %{yesterday} vez/veces de ayer
not_allowed_to_trend: No se permite la tendencia
only_allowed: Sólo permitidas
only_allowed: Solo permitidas
pending_review: Revisión pendiente
preview_card_providers:
allowed: Los enlaces de este medio pueden ser tendencia
@@ -1087,10 +1087,10 @@ es-AR:
statuses:
allow: Permitir mensaje
allow_account: Permitir autor
confirm_allow: "¿Estás seguro de que querés permitir los estados seleccionados?"
confirm_allow_account: "¿Estás seguro de que querés permitir las cuentas seleccionadas?"
confirm_disallow: "¿Estás seguro de que no querés permitir los estados seleccionados?"
confirm_disallow_account: "¿Estás seguro de que no querés permitir las cuentas seleccionadas?"
confirm_allow: "¿De verdad querés permitir los estados seleccionados?"
confirm_allow_account: "¿De verdad querés permitir las cuentas seleccionadas?"
confirm_disallow: "¿De verdad no querés permitir los estados seleccionados?"
confirm_disallow_account: "¿De verdad no querés permitir las cuentas seleccionadas?"
description_html: Estos son mensajes que tu servidor detecta que están siendo compartidos y marcados como favoritos muchas veces en este momento. Esto puede ayudar a tus usuarios nuevos y retornantes a encontrar más cuentas para seguir. No hay mensajes que se muestren públicamente hasta que aprobés al autor, y el autor permita que su cuenta sea sugerida a otros. También podés permitir o rechazar mensajes individuales.
disallow: Rechazar mensaje
disallow_account: Rechazar autor
@@ -1632,7 +1632,7 @@ es-AR:
author_html: Por %{name}
potentially_sensitive_content:
action: Clic para mostrar
confirm_visit: "¿Está seguro de que querés abrir este enlace?"
confirm_visit: "¿De verdad querés abrir este enlace?"
hide_button: Ocultar
label: Contenido potencialmente sensible
lists:
@@ -1820,9 +1820,9 @@ es-AR:
title: Estás dejando %{instance}.
relationships:
activity: Actividad de la cuenta
confirm_follow_selected_followers: "¿Estás seguro que querés seguir a los seguidores seleccionados?"
confirm_remove_selected_followers: "¿Estás seguro que querés quitar a los seguidores seleccionados?"
confirm_remove_selected_follows: "¿Estás seguro que querés quitar a las cuentas seguidas seleccionadas?"
confirm_follow_selected_followers: "¿De verdad querés seguir a los seguidores seleccionados?"
confirm_remove_selected_followers: "¿De verdad querés quitar a los seguidores seleccionados?"
confirm_remove_selected_follows: "¿De verdad querés quitar a las cuentas seguidas seleccionadas?"
dormant: Inactivas
follow_failure: No se pudieron seguir algunas de las cuentas seleccionadas.
follow_selected_followers: Seguir a los seguidores seleccionados
@@ -1965,7 +1965,7 @@ es-AR:
quoted_user_not_mentioned: No se puede citar a un usuario no mencionado en un mensaje de mención privada.
over_character_limit: se excedió el límite de %{max} caracteres
pin_errors:
direct: Los mensajes que sólo son visibles para los usuarios mencionados no pueden ser fijados
direct: Los mensajes que solo son visibles para los usuarios mencionados no pueden ser fijados
limit: Ya fijaste el número máximo de mensajes
ownership: No se puede fijar el mensaje de otra cuenta
reblog: No se puede fijar una adhesión
@@ -2118,7 +2118,7 @@ es-AR:
disable: Ya no podés usar tu cuenta, pero tu perfil y el resto de datos permanecen intactos. Podés solicitar una copia de seguridad de tus datos, cambiar la configuración de tu cuenta, o eliminarla.
mark_statuses_as_sensitive: Algunos de tus mensajes fueron marcados como sensibles por los moderadores de %{instance}. Esto significa que la gente tendrá que hacer clic o darle un toque a los medios en los mensajes antes de que se muestre una vista previa. Podés marcar los medios como sensibles vos mismo cuando publiqués en el futuro.
sensitive: A partir de ahora, todos tus archivos subidos serán marcados como sensibles y ocultos tras una advertencia en la que habrá que hacer clic.
silence: Todavía podés usar tu cuenta, pero sólo las personas que te están siguiendo verán tus publicaciones en este servidor, y podrías ser excluido de varias funciones de descubrimiento. Sin embargo, otras cuentas podrán seguirte manualmente.
silence: Todavía podés usar tu cuenta, pero solo las personas que te están siguiendo verán tus publicaciones en este servidor, y podrías ser excluido de varias funciones de descubrimiento. Sin embargo, otras cuentas podrán seguirte manualmente.
suspend: Ya no podés usar tu cuenta, y tu perfil y el resto de datos ya no son accesibles. Todavía podés iniciar sesión para solicitar una copia de seguridad de tus datos, hasta que estos sean eliminados por completo en unos 30 días, aunque conservaremos algunos datos básicos para impedir que esquivés la suspensión.
reason: 'Motivo:'
statuses: 'Mensajes citados:'
@@ -2200,7 +2200,7 @@ es-AR:
error: Hubo un problema al agregar tu llave de seguridad. Por favor, intentá de nuevo.
success: Se agregó exitosamente tu llave de seguridad.
delete: Eliminar
delete_confirmation: "¿Estás seguro que querés eliminar esta llave de seguridad?"
delete_confirmation: "¿De verdad querés eliminar esta llave de seguridad?"
description_html: Si habilitás la <strong>autenticación de llave de seguridad</strong>, entonces en el inicio de sesión se te pedirá que usés una de tus llaves de seguridad.
destroy:
error: Hubo un problema al eliminar tu llave de seguridad. Por favor, intentá de nuevo.

View File

@@ -31,13 +31,13 @@ es-AR:
suspend: Evitá cualquier interacción desde o hacia esta cuenta y eliminá su contenido. Revertible en 30 días. Esto cierra todas las denuncias contra esta cuenta.
warning_preset_id: Opcional. Todavía podés agregar texto personalizado al final del preajuste
announcement:
all_day: Cuando esté seleccionado, sólo se mostrarán las fechas del rango de tiempo
all_day: Cuando esté seleccionado, solo se mostrarán las fechas del rango de tiempo
ends_at: Opcional. El anuncio desaparecerá automáticamente en este momento
scheduled_at: Dejar en blanco para publicar el anuncio inmediatamente
starts_at: Opcional. En caso de que tu anuncio esté vinculado a un rango de tiempo específico
text: Podés usar sintaxis de mensajes. Por favor, tené en cuenta el espacio que ocupará el anuncio en la pantalla del usuario
appeal:
text: Sólo podés apelar un incumplimiento una vez
text: Solo podés apelar un incumplimiento una vez
defaults:
autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente
avatar: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
@@ -45,7 +45,7 @@ es-AR:
context: Uno o múltiples contextos en los que debe aplicarse el filtro
current_password: Por razones de seguridad, por favor, ingresá la contraseña de la cuenta actual
current_username: Para confirmar, por favor, ingresá el nombre de usuario de la cuenta actual
digest: Sólo enviado tras un largo periodo de inactividad, y sólo si recibiste mensajes personales en tu ausencia
digest: Solo enviado tras un largo periodo de inactividad, y solo si recibiste mensajes personales en tu ausencia
email: Se te enviará un correo electrónico de confirmación
header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
inbox_url: Copiá la dirección web desde la página principal del relé que querés usar
@@ -55,7 +55,7 @@ es-AR:
phrase: Se aplicará sin importar las mayúsculas o las advertencias de contenido de un mensaje
scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionás el alcance de nivel más alto, no necesitás seleccionar las individuales.
setting_advanced_layout: Mostrar Mastodon como una disposición de varias columnas, permitiéndote ver la línea temporal, las notificaciones y una tercera columna de tu elección. No recomendado para pantallas pequeñas.
setting_aggregate_reblogs: No mostrar nuevas adhesiones de los mensajes que fueron recientemente adheridos (sólo afecta a las adhesiones recibidas recientemente)
setting_aggregate_reblogs: No mostrar nuevas adhesiones de los mensajes que fueron recientemente adheridos (solo afecta a las adhesiones recibidas recientemente)
setting_always_send_emails: Normalmente las notificaciones por correo electrónico no se enviarán cuando estés usando Mastodon activamente
setting_boost_modal: Al estar activado, la adhesión abrirá primero un diálogo de confirmación en el que podés cambiar su visibilidad.
setting_default_quote_policy_private: Los mensajes solo para seguidores redactados en Mastodon no pueden ser citados por otras cuentas.
@@ -70,7 +70,7 @@ es-AR:
setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles
setting_use_pending_items: Ocultar actualizaciones de la línea temporal detrás de un clic en lugar de desplazar automáticamente el flujo
username: Podés usar letras, números y subguiones ("_")
whole_word: Cuando la palabra clave o frase es sólo alfanumérica, sólo será aplicado si coincide con toda la palabra
whole_word: Cuando la palabra clave o frase sea solo alfanumérica, solamente será aplicado si coincide con toda la palabra
domain_allow:
domain: Este dominio podrá recolectar datos de este servidor, y los datos entrantes serán procesados y archivados
email_domain_block:
@@ -97,7 +97,7 @@ es-AR:
mascot: Reemplaza la ilustración en la interface web avanzada.
media_cache_retention_period: Los archivos de medios de mensajes publicados por usuarios remotos se almacenan en la memoria caché en tu servidor. Cuando se establece un valor positivo, los medios se eliminarán después del número especificado de días. Si los datos multimedia se solicitan después de eliminarse, se volverán a descargar, si es que el contenido fuente todavía está disponible. Debido a restricciones en la frecuencia con la que las tarjetas de previsualización de enlace consultan a sitios web de terceros, se recomienda establecer este valor a, al menos, 14 días, o las tarjetas de previsualización de enlaces no se actualizarán a pedido antes de ese momento.
min_age: Se pedirá a los usuarios que confirmen su fecha de nacimiento durante el registro
peers_api_enabled: Una lista de nombres de dominio que este servidor ha encontrado en el Fediverso. Acá no se incluye ningún dato sobre si federás con un servidor determinado, sólo que tu servidor lo conoce. Esto es usado por los servicios que recopilan estadísticas sobre la federación en un sentido general.
peers_api_enabled: Una lista de nombres de dominio que este servidor ha encontrado en el Fediverso. Acá no se incluye ningún dato sobre si federás con un servidor determinado, solo que tu servidor lo conoce. Esto es usado por los servicios que recopilan estadísticas sobre la federación en un sentido general.
profile_directory: El directorio de perfiles lista a todos los usuarios que han optado a que su cuenta pueda ser descubierta.
require_invite_text: Cuando registros aprobación manual, hacé que la solicitud de invitación "¿Por qué querés unirte?" sea obligatoria, en vez de opcional
site_contact_email: Cómo la gente puede estar en contacto con vos para consultas legales o de ayuda.
@@ -137,7 +137,7 @@ es-AR:
indexable: Tu página de perfil podría aparecer en los resultados de búsqueda en Google, Bing y otros motores de búsqueda.
show_application: Sin embargo, siempre podrás ver desde qué aplicación se envió tu mensaje.
tag:
name: Sólo podés cambiar la capitalización de las letras, por ejemplo, para que sea más legible
name: Solo podés cambiar la capitalización de las letras, por ejemplo, para que sea más legible
terms_of_service:
changelog: Se puede estructurar con sintaxis Markdown.
effective_date: Un plazo razonable puede oscilar entre 10 y 30 días a partir de la fecha de notificación a tus usuarios.
@@ -153,7 +153,7 @@ es-AR:
jurisdiction: Listá el país donde vive quien paga las facturas. Si es una empresa u otra entidad, enumerá el país donde está basada y la ciudad, región, territorio o provincia/estado, según corresponda.
min_age: No debería estar por debajo de la edad mínima requerida por las leyes de su jurisdicción.
user:
chosen_languages: Cuando estén marcados, sólo se mostrarán los mensajes en los idiomas seleccionados en las líneas temporales públicas
chosen_languages: Cuando estén marcados, solo se mostrarán los mensajes en los idiomas seleccionados en las líneas temporales públicas
date_of_birth:
one: Tenemos que asegurarnos de que al menos tenés %{count} años de edad para usar %{domain}. No almacenaremos esta información.
other: Tenemos que asegurarnos de que al menos tenés %{count} años de edad para usar %{domain}. No almacenaremos esta información.
@@ -163,7 +163,7 @@ es-AR:
highlighted: Esto hace que el rol sea públicamente visible
name: Nombre público del rol, si el rol se establece para que se muestre como una insignia
permissions_as_keys: Los usuarios con este rol tendrán acceso a…
position: Un rol más alto decide la resolución de conflictos en ciertas situaciones. Ciertas acciones sólo pueden llevarse a cabo en roles con prioridad inferior
position: Un rol más alto decide la resolución de conflictos en ciertas situaciones. Ciertas acciones solo pueden llevarse a cabo en roles con prioridad inferior
require_2fa: Los usuarios con este rol serán requeridos para configurar la autenticación de dos factores para usar Mastodon
username_block:
allow_with_approval: En lugar de impedir el registro total, los registros coincidentes requerirán tu aprobación

View File

@@ -496,7 +496,7 @@ zh-CN:
debug:
callbacks:
created_at: 创建于
delete:
delete:
ip: IP 地址
request_body: 请求正文
title: 调试回调
@@ -504,7 +504,7 @@ zh-CN:
active: 有效
base_url: 基础 URL
callback: 回调
delete:
delete:
edit: 编辑提供商
finish_registration: 完成注册
name: 名称
@@ -930,7 +930,7 @@ zh-CN:
with_media: 含有媒体文件
strikes:
actions:
delete_statuses: "%{name} 除了 %{target} 的嘟文"
delete_statuses: "%{name} 除了 %{target} 的嘟文"
disable: "%{name} 冻结了用户 %{target}"
mark_statuses_as_sensitive: "%{name} 已将 %{target} 的嘟文标记为敏感内容"
none: "%{name} 向 %{target} 发送了警告"

View File

@@ -28,7 +28,7 @@ class RejectFollowingBlockedUsers < ActiveRecord::Migration[5.2]
next follow.destroy! if blocked_account.local?
reject_follow_json = Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(follow, serializer: ActivityPub::RejectFollowSerializer, adapter: ActivityPub::Adapter).as_json).sign!(followed_account))
reject_follow_json = JSON.generate(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(follow, serializer: ActivityPub::RejectFollowSerializer, adapter: ActivityPub::Adapter).as_json).sign!(followed_account))
ActivityPub::DeliveryWorker.perform_async(reject_follow_json, followed_account, blocked_account.inbox_url)

View File

@@ -90,7 +90,7 @@ class MoveUserSettings < ActiveRecord::Migration[6.1]
end
end
user.update_column('settings', Oj.dump(user_settings))
user.update_column('settings', JSON.generate(user_settings))
end
end
end

View File

@@ -21,7 +21,7 @@ class MigrateInteractionSettingsToPolicy < ActiveRecord::Migration[7.1]
private
def policy_for_user(user)
deserialized_settings = Oj.load(user.attributes_before_type_cast['settings'])
deserialized_settings = JSON.parse(user.attributes_before_type_cast['settings'])
return if deserialized_settings.nil?
requires_new_policy = false

View File

@@ -8,7 +8,7 @@ class FillDefaultQuotePolicySetting < ActiveRecord::Migration[8.0]
def up
User.where.not(settings: nil).find_each do |user|
settings = Oj.load(user.attributes_before_type_cast['settings'])
settings = JSON.parse(user.attributes_before_type_cast['settings'])
next if settings.nil?
should_update_settings = false
@@ -26,7 +26,7 @@ class FillDefaultQuotePolicySetting < ActiveRecord::Migration[8.0]
should_update_settings = true
end
user.update_column('settings', Oj.dump(settings)) if should_update_settings
user.update_column('settings', JSON.generate(settings)) if should_update_settings
end
end
end

View File

@@ -8,7 +8,7 @@ class MigrateUserTheme < ActiveRecord::Migration[8.0]
def up
User.where.not(settings: nil).find_each do |user|
settings = Oj.load(user.attributes_before_type_cast['settings'])
settings = JSON.parse(user.attributes_before_type_cast['settings'])
next if settings.nil? || settings['theme'].blank? || %w(system default mastodon-light contrast).exclude?(settings['theme'])
case settings['theme']
@@ -25,7 +25,7 @@ class MigrateUserTheme < ActiveRecord::Migration[8.0]
settings['theme'] = 'default'
user.update_column('settings', Oj.dump(settings))
user.update_column('settings', JSON.generate(settings))
end
end
end

View File

@@ -11,11 +11,11 @@ class FixKmrLocaleSettings < ActiveRecord::Migration[7.0]
MigrationUser.reset_column_information
MigrationUser.where.not(settings: [nil, '{}']).find_each do |user|
user_settings = Oj.load(user.settings)
user_settings = JSON.parse(user.settings)
next unless user_settings['default_language'] == 'kmr'
user_settings['default_language'] = 'ku'
user.update!(settings: Oj.dump(user_settings))
user.update!(settings: JSON.generate(user_settings))
end
MigrationUser.where.not(chosen_languages: nil).where('chosen_languages && ?', '{kmr}').find_each do |user|

View File

@@ -21,7 +21,7 @@ class MigrateInteractionSettingsToPolicyAgain < ActiveRecord::Migration[7.1]
private
def policy_for_user(user)
deserialized_settings = Oj.load(user.attributes_before_type_cast['settings'])
deserialized_settings = JSON.parse(user.attributes_before_type_cast['settings'])
return if deserialized_settings.nil?
return if user.notification_policy.present?

View File

@@ -99,7 +99,7 @@ namespace :emojis do
map = map.sort { |a, b| a[0].size <=> b[0].size }.to_h
File.write(dest, Oj.dump(map))
File.write(dest, JSON.dump(map))
puts "Wrote emojo to destination! (#{dest})"
end

View File

@@ -112,6 +112,11 @@ RSpec.describe JsonLdHelper do
expect(fetch_resource_without_id_validation('https://host.test/')).to be_nil
end
it 'returns nil if the body is not parsable' do
stub_request(:get, 'https://host.test/').to_return(status: 200, body: 'XXX', headers: { 'Content-Type': 'application/activity+json' })
expect(fetch_resource_without_id_validation('https://host.test/')).to be_nil
end
it 'returns hash' do
stub_request(:get, 'https://host.test/').to_return(status: 200, body: '{}', headers: { 'Content-Type': 'application/activity+json' })
expect(fetch_resource_without_id_validation('https://host.test/')).to eq({})

View File

@@ -19,6 +19,19 @@ RSpec.describe TranslationService::DeepL do
end
describe '#translate' do
context 'with invalid body response' do
before do
stub_request(:post, 'https://api.deepl.com/v2/translate')
.with(body: 'text=Hasta+la+vista&source_lang=ES&target_lang=en&tag_handling=html')
.to_return(body: 'XXX')
end
it 'handles error and re-raises' do
expect { service.translate(['Hasta la vista'], 'es', 'en') }
.to raise_error(TranslationService::UnexpectedResponseError)
end
end
it 'returns translation with specified source language' do
stub_request(:post, 'https://api.deepl.com/v2/translate')
.with(body: 'text=Hasta+la+vista&source_lang=ES&target_lang=en&tag_handling=html')

View File

@@ -29,6 +29,19 @@ RSpec.describe TranslationService::LibreTranslate do
end
describe '#translate' do
context 'with invalid body response' do
before do
stub_request(:post, 'https://libretranslate.example.com/translate')
.with(body: '{"q":["Hasta la vista"],"source":"es","target":"en","format":"html","api_key":"my-api-key"}')
.to_return(body: 'XXX')
end
it 'handles error and re-raises' do
expect { service.translate(['Hasta la vista'], 'es', 'en') }
.to raise_error(TranslationService::UnexpectedResponseError)
end
end
it 'returns translation with specified source language' do
stub_request(:post, 'https://libretranslate.example.com/translate')
.with(body: '{"q":["Hasta la vista"],"source":"es","target":"en","format":"html","api_key":"my-api-key"}')

View File

@@ -37,6 +37,16 @@ RSpec.describe Webfinger do
end
end
context 'when response body is not parsable' do
it 'raises an error' do
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com')
.to_return(body: 'XXX', headers: { 'Content-Type': 'application/jrd+json' })
expect { subject }
.to raise_error(Webfinger::Error)
end
end
context 'when webfinger fails and host meta is used' do
before { stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(status: 404) }

View File

@@ -1,24 +1,24 @@
# frozen_string_literal: true
RSpec.shared_examples 'AccountAvatar' do |fabricator|
RSpec.describe Account::Avatar do
describe 'static avatars', :attachment_processing do
describe 'with a square GIF' do
it 'creates a png static style' do
account = Fabricate(fabricator, avatar: attachment_fixture('avatar.gif'))
account = Fabricate(:account, avatar: attachment_fixture('avatar.gif'))
expect(account.avatar_static_url).to_not eq account.avatar_original_url
end
end
describe 'with a higher-than-wide GIF' do
it 'creates a png static style' do
account = Fabricate(fabricator, avatar: attachment_fixture('avatar-high.gif'))
account = Fabricate(:account, avatar: attachment_fixture('avatar-high.gif'))
expect(account.avatar_static_url).to_not eq account.avatar_original_url
end
end
describe 'when non-GIF' do
it 'does not create extra static style' do
account = Fabricate(fabricator, avatar: attachment_fixture('attachment.jpg'))
account = Fabricate(:account, avatar: attachment_fixture('attachment.jpg'))
expect(account.avatar_static_url).to eq account.avatar_original_url
end
end
@@ -26,7 +26,7 @@ RSpec.shared_examples 'AccountAvatar' do |fabricator|
describe 'base64-encoded files', :attachment_processing do
let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('attachment.jpg').read)}" }
let(:account) { Fabricate(fabricator, avatar: base64_attachment) }
let(:account) { Fabricate(:account, avatar: base64_attachment) }
it 'saves avatar' do
expect(account.persisted?).to be true

View File

@@ -1,9 +1,9 @@
# frozen_string_literal: true
RSpec.shared_examples 'AccountHeader' do |fabricator|
RSpec.describe Account::Header do
describe 'base64-encoded files', :attachment_processing do
let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('attachment.jpg').read)}" }
let(:account) { Fabricate(fabricator, header: base64_attachment) }
let(:account) { Fabricate(:account, header: base64_attachment) }
it 'saves header' do
expect(account.persisted?).to be true

View File

@@ -1,6 +1,6 @@
# frozen_string_literal: true
RSpec.shared_examples 'Account::Search' do
RSpec.describe Account::Search do
describe '.search_for' do
before do
_missing = Fabricate(
@@ -20,7 +20,7 @@ RSpec.shared_examples 'Account::Search' do
suspended: true
)
results = described_class.search_for('username')
results = Account.search_for('username')
expect(results).to eq []
end
@@ -33,7 +33,7 @@ RSpec.shared_examples 'Account::Search' do
match.user.update(approved: false)
results = described_class.search_for('username')
results = Account.search_for('username')
expect(results).to eq []
end
@@ -46,7 +46,7 @@ RSpec.shared_examples 'Account::Search' do
match.user.update(confirmed_at: nil)
results = described_class.search_for('username')
results = Account.search_for('username')
expect(results).to eq []
end
@@ -58,7 +58,7 @@ RSpec.shared_examples 'Account::Search' do
domain: 'example.com'
)
results = described_class.search_for('A?l\i:c e')
results = Account.search_for('A?l\i:c e')
expect(results).to eq [match]
end
@@ -70,7 +70,7 @@ RSpec.shared_examples 'Account::Search' do
domain: 'example.com'
)
results = described_class.search_for('display')
results = Account.search_for('display')
expect(results).to eq [match]
end
@@ -82,7 +82,7 @@ RSpec.shared_examples 'Account::Search' do
domain: 'example.com'
)
results = described_class.search_for('username')
results = Account.search_for('username')
expect(results).to eq [match]
end
@@ -94,20 +94,20 @@ RSpec.shared_examples 'Account::Search' do
domain: 'example.com'
)
results = described_class.search_for('example')
results = Account.search_for('example')
expect(results).to eq [match]
end
it 'limits via constant by default' do
stub_const('Account::Search::DEFAULT_LIMIT', 1)
2.times.each { Fabricate(:account, display_name: 'Display Name') }
results = described_class.search_for('display')
results = Account.search_for('display')
expect(results.size).to eq 1
end
it 'accepts arbitrary limits' do
2.times.each { Fabricate(:account, display_name: 'Display Name') }
results = described_class.search_for('display', limit: 1)
results = Account.search_for('display', limit: 1)
expect(results.size).to eq 1
end
@@ -117,7 +117,7 @@ RSpec.shared_examples 'Account::Search' do
{ display_name: 'Display Name', username: 'username', domain: 'example.com' },
].map(&method(:Fabricate).curry(2).call(:account))
results = described_class.search_for('username')
results = Account.search_for('username')
expect(results).to eq matches
end
end
@@ -135,7 +135,7 @@ RSpec.shared_examples 'Account::Search' do
)
account.follow!(match)
results = described_class.advanced_search_for('A?l\i:c e', account, limit: 10, following: true)
results = Account.advanced_search_for('A?l\i:c e', account, limit: 10, following: true)
expect(results).to eq [match]
end
@@ -147,7 +147,7 @@ RSpec.shared_examples 'Account::Search' do
domain: 'example.com'
)
results = described_class.advanced_search_for('A?l\i:c e', account, limit: 10, following: true)
results = Account.advanced_search_for('A?l\i:c e', account, limit: 10, following: true)
expect(results).to eq []
end
@@ -160,7 +160,7 @@ RSpec.shared_examples 'Account::Search' do
suspended: true
)
results = described_class.advanced_search_for('username', account, limit: 10, following: true)
results = Account.advanced_search_for('username', account, limit: 10, following: true)
expect(results).to eq []
end
@@ -173,7 +173,7 @@ RSpec.shared_examples 'Account::Search' do
match.user.update(approved: false)
results = described_class.advanced_search_for('username', account, limit: 10, following: true)
results = Account.advanced_search_for('username', account, limit: 10, following: true)
expect(results).to eq []
end
@@ -186,7 +186,7 @@ RSpec.shared_examples 'Account::Search' do
match.user.update(confirmed_at: nil)
results = described_class.advanced_search_for('username', account, limit: 10, following: true)
results = Account.advanced_search_for('username', account, limit: 10, following: true)
expect(results).to eq []
end
end
@@ -200,7 +200,7 @@ RSpec.shared_examples 'Account::Search' do
suspended: true
)
results = described_class.advanced_search_for('username', account)
results = Account.advanced_search_for('username', account)
expect(results).to eq []
end
@@ -213,7 +213,7 @@ RSpec.shared_examples 'Account::Search' do
match.user.update(approved: false)
results = described_class.advanced_search_for('username', account)
results = Account.advanced_search_for('username', account)
expect(results).to eq []
end
@@ -226,7 +226,7 @@ RSpec.shared_examples 'Account::Search' do
match.user.update(confirmed_at: nil)
results = described_class.advanced_search_for('username', account)
results = Account.advanced_search_for('username', account)
expect(results).to eq []
end
@@ -238,20 +238,20 @@ RSpec.shared_examples 'Account::Search' do
domain: 'example.com'
)
results = described_class.advanced_search_for('A?l\i:c e', account)
results = Account.advanced_search_for('A?l\i:c e', account)
expect(results).to eq [match]
end
it 'limits result count by default value' do
stub_const('Account::Search::DEFAULT_LIMIT', 1)
2.times { Fabricate(:account, display_name: 'Display Name') }
results = described_class.advanced_search_for('display', account)
results = Account.advanced_search_for('display', account)
expect(results.size).to eq 1
end
it 'accepts arbitrary limits' do
2.times { Fabricate(:account, display_name: 'Display Name') }
results = described_class.advanced_search_for('display', account, limit: 1)
results = Account.advanced_search_for('display', account, limit: 1)
expect(results.size).to eq 1
end
@@ -260,7 +260,7 @@ RSpec.shared_examples 'Account::Search' do
followed_match = Fabricate(:account, username: 'Matcher')
Fabricate(:follow, account: account, target_account: followed_match)
results = described_class.advanced_search_for('match', account)
results = Account.advanced_search_for('match', account)
expect(results).to eq [followed_match, match]
expect(results.first.rank).to be > results.last.rank
end

View File

@@ -3,7 +3,6 @@
require 'rails_helper'
RSpec.describe Account do
it_behaves_like 'Account::Search'
it_behaves_like 'Reviewable'
describe 'Associations' do
@@ -773,9 +772,6 @@ RSpec.describe Account do
end
end
it_behaves_like 'AccountAvatar', :account
it_behaves_like 'AccountHeader', :account
describe '#increment_count!' do
subject { Fabricate(:account) }

View File

@@ -2,7 +2,7 @@
require 'rails_helper'
RSpec.shared_examples 'Status::Visibility' do
RSpec.describe Status::Visibility do
describe 'Validations' do
context 'when status is a reblog' do
subject { Fabricate.build :status, reblog: Fabricate(:status) }

View File

@@ -9,8 +9,6 @@ RSpec.describe Status do
let(:bob) { Fabricate(:account, username: 'bob') }
let(:other) { Fabricate(:status, account: bob, text: 'Skulls for the skull god! The enemy\'s gates are sideways!') }
it_behaves_like 'Status::Visibility'
describe '#local?' do
it 'returns true when no remote URI is set' do
expect(subject.local?).to be true

View File

@@ -2,7 +2,7 @@
require 'rails_helper'
RSpec.shared_examples 'User::Activity' do
RSpec.describe User::Activity do
before { stub_const 'User::ACTIVE_DURATION', 7.days }
describe 'Scopes' do
@@ -11,14 +11,14 @@ RSpec.shared_examples 'User::Activity' do
describe '.signed_in_recently' do
it 'returns users who have signed in during the recent period' do
expect(described_class.signed_in_recently)
expect(User.signed_in_recently)
.to contain_exactly(recent_sign_in_user)
end
end
describe '.not_signed_in_recently' do
it 'returns users who have not signed in during the recent period' do
expect(described_class.not_signed_in_recently)
expect(User.not_signed_in_recently)
.to contain_exactly(no_recent_sign_in_user)
end
end

View File

@@ -2,21 +2,21 @@
require 'rails_helper'
RSpec.shared_examples 'User::Confirmation' do
RSpec.describe User::Confirmation do
describe 'Scopes' do
let!(:unconfirmed_user) { Fabricate :user, confirmed_at: nil }
let!(:confirmed_user) { Fabricate :user, confirmed_at: Time.now.utc }
describe '.confirmed' do
it 'returns users who are confirmed' do
expect(described_class.confirmed)
expect(User.confirmed)
.to contain_exactly(confirmed_user)
end
end
describe '.unconfirmed' do
it 'returns users who are not confirmed' do
expect(described_class.unconfirmed)
expect(User.unconfirmed)
.to contain_exactly(unconfirmed_user)
end
end

View File

@@ -10,8 +10,6 @@ RSpec.describe User do
let(:account) { Fabricate(:account, username: 'alice') }
it_behaves_like 'two_factor_backupable'
it_behaves_like 'User::Activity'
it_behaves_like 'User::Confirmation'
describe 'otp_secret' do
it 'encrypts the saved value' do

View File

@@ -52,6 +52,19 @@ RSpec.describe 'Donation campaigns' do
end
end
context 'when the donation campaign returns bad response' do
before do
stub_request(:get, "#{api_url}?platform=web&seed=#{seed}&locale=en").to_return(body: 'Cats & Dogs', status: 200)
end
it 'handles the error and returns http empty' do
get '/api/v1/donation_campaigns', headers: headers
expect(response)
.to have_http_status(204)
end
end
context 'when the donation campaign API returns a campaign' do
let(:campaign_json) do
{

View File

@@ -55,6 +55,16 @@ RSpec.describe SoftwareUpdateCheckService do
end
end
context 'when the update server returns invalid response body' do
before do
stub_request(:get, full_update_check_url).to_return(status: 200, body: 'XXX')
end
it 'handles the error and returns' do
expect(subject.call).to be_nil
end
end
context 'when the server returns new versions' do
let(:server_json) do
{

View File

@@ -21,7 +21,7 @@
"dotenv": "^17.0.0",
"express": "^5.1.0",
"ioredis": "^5.3.2",
"jsdom": "^28.0.0",
"jsdom": "^29.0.0",
"pg": "^8.5.0",
"pg-connection-string": "^2.6.0",
"pino": "^10.0.0",

172
yarn.lock
View File

@@ -12,13 +12,6 @@ __metadata:
languageName: node
linkType: hard
"@acemir/cssom@npm:^0.9.31":
version: 0.9.31
resolution: "@acemir/cssom@npm:0.9.31"
checksum: 10c0/cbfff98812642104ec3b37de1ad3a53f216ddc437e7b9276a23f46f2453844ea3c3f46c200bc4656a2f747fb26567560b3cc5183d549d119a758926551b5f566
languageName: node
linkType: hard
"@adobe/css-tools@npm:^4.4.0":
version: 4.4.3
resolution: "@adobe/css-tools@npm:4.4.3"
@@ -46,29 +39,29 @@ __metadata:
languageName: node
linkType: hard
"@asamuzakjp/css-color@npm:^4.1.2":
version: 4.1.2
resolution: "@asamuzakjp/css-color@npm:4.1.2"
"@asamuzakjp/css-color@npm:^5.0.1":
version: 5.0.1
resolution: "@asamuzakjp/css-color@npm:5.0.1"
dependencies:
"@csstools/css-calc": "npm:^3.0.0"
"@csstools/css-color-parser": "npm:^4.0.1"
"@csstools/css-calc": "npm:^3.1.1"
"@csstools/css-color-parser": "npm:^4.0.2"
"@csstools/css-parser-algorithms": "npm:^4.0.0"
"@csstools/css-tokenizer": "npm:^4.0.0"
lru-cache: "npm:^11.2.5"
checksum: 10c0/e432fdef978b37654a2ca31169a149b9173e708f70c82612acb123a36dbc7dd99913c48cbf2edd6fe3652cc627d4bc94bf87571463da0b788f15b973d4ce5b0f
lru-cache: "npm:^11.2.6"
checksum: 10c0/3e8d74a3b7f3005a325cb8e7f3da1aa32aeac4cd9ce387826dc25b16eaab4dc0e4a6faded8ccc1895959141f4a4a70e8bc38723347b89667b7b224990d16683c
languageName: node
linkType: hard
"@asamuzakjp/dom-selector@npm:^6.8.1":
version: 6.8.1
resolution: "@asamuzakjp/dom-selector@npm:6.8.1"
"@asamuzakjp/dom-selector@npm:^7.0.2":
version: 7.0.3
resolution: "@asamuzakjp/dom-selector@npm:7.0.3"
dependencies:
"@asamuzakjp/nwsapi": "npm:^2.3.9"
bidi-js: "npm:^1.0.3"
css-tree: "npm:^3.1.0"
css-tree: "npm:^3.2.1"
is-potential-custom-element-name: "npm:^1.0.1"
lru-cache: "npm:^11.2.6"
checksum: 10c0/635de2c3b11971c07e2d491fd2833d2499bafbab05b616f5d38041031718879c404456644f60c45e9ba4ca2423e5bb48bf3c46179b0c58a0ea68eaae8c61e85f
lru-cache: "npm:^11.2.7"
checksum: 10c0/c64b06a23479970ded4f38bec34069e98f4062b4ecb798b81b1fc37b5472ec6110d5bd9d8a267bfc431503f6ee3080c2e94eb3d99e30aaa1b6d9f83fbd2744fa
languageName: node
linkType: hard
@@ -1276,7 +1269,7 @@ __metadata:
languageName: node
linkType: hard
"@csstools/css-calc@npm:^3.0.0, @csstools/css-calc@npm:^3.1.1":
"@csstools/css-calc@npm:^3.1.1":
version: 3.1.1
resolution: "@csstools/css-calc@npm:3.1.1"
peerDependencies:
@@ -1286,7 +1279,7 @@ __metadata:
languageName: node
linkType: hard
"@csstools/css-color-parser@npm:^4.0.1, @csstools/css-color-parser@npm:^4.0.2":
"@csstools/css-color-parser@npm:^4.0.2":
version: 4.0.2
resolution: "@csstools/css-color-parser@npm:4.0.2"
dependencies:
@@ -1308,10 +1301,15 @@ __metadata:
languageName: node
linkType: hard
"@csstools/css-syntax-patches-for-csstree@npm:^1.0.25, @csstools/css-syntax-patches-for-csstree@npm:^1.0.26":
version: 1.0.27
resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.0.27"
checksum: 10c0/ef3f2a639109758c0f3c04520465800ca4c830174bd6f7979795083877c82ace51ab8353857b06a818cb6c0de6d4dc88f84a86fc3b021be47f11a0f1c4b74e7e
"@csstools/css-syntax-patches-for-csstree@npm:^1.0.25, @csstools/css-syntax-patches-for-csstree@npm:^1.1.1":
version: 1.1.1
resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.1.1"
peerDependencies:
css-tree: ^3.2.1
peerDependenciesMeta:
css-tree:
optional: true
checksum: 10c0/947f82e9e8af0512f1d6600f68da1bbe8d15112fa73435169608a68dcf20262ae517c799202c86a6c3bc889d0e9fab724ad5661a3aa98432390f8f9765b86ddc
languageName: node
linkType: hard
@@ -2396,15 +2394,15 @@ __metadata:
languageName: node
linkType: hard
"@exodus/bytes@npm:^1.11.0, @exodus/bytes@npm:^1.6.0":
version: 1.11.0
resolution: "@exodus/bytes@npm:1.11.0"
"@exodus/bytes@npm:^1.11.0, @exodus/bytes@npm:^1.15.0, @exodus/bytes@npm:^1.6.0":
version: 1.15.0
resolution: "@exodus/bytes@npm:1.15.0"
peerDependencies:
"@noble/hashes": ^1.8.0 || ^2.0.0
peerDependenciesMeta:
"@noble/hashes":
optional: true
checksum: 10c0/85d0b296cef91ee90f89f17b3a2cd23fa33bda4ae7b96545e9b8e2e68d64c0280eb3cefb77fc3f59f82377379ee7a52a5a5b3a9f99e45fca4166e5e2fa4c0939
checksum: 10c0/b48aad9729653385d6ed055c28cfcf0b1b1481cf5d83f4375c12abd7988f1d20f69c80b5f95d4a1cc24d9abe32b9efc352a812d53884c26efea172aca8b6356d
languageName: node
linkType: hard
@@ -2992,7 +2990,7 @@ __metadata:
express: "npm:^5.1.0"
globals: "npm:^17.3.0"
ioredis: "npm:^5.3.2"
jsdom: "npm:^28.0.0"
jsdom: "npm:^29.0.0"
pg: "npm:^8.5.0"
pg-connection-string: "npm:^2.6.0"
pino: "npm:^10.0.0"
@@ -6439,13 +6437,13 @@ __metadata:
languageName: node
linkType: hard
"css-tree@npm:^3.0.0, css-tree@npm:^3.0.1, css-tree@npm:^3.1.0":
version: 3.1.0
resolution: "css-tree@npm:3.1.0"
"css-tree@npm:^3.0.0, css-tree@npm:^3.0.1, css-tree@npm:^3.1.0, css-tree@npm:^3.2.1":
version: 3.2.1
resolution: "css-tree@npm:3.2.1"
dependencies:
mdn-data: "npm:2.12.2"
source-map-js: "npm:^1.0.1"
checksum: 10c0/b5715852c2f397c715ca00d56ec53fc83ea596295ae112eb1ba6a1bda3b31086380e596b1d8c4b980fe6da09e7d0fc99c64d5bb7313030dd0fba9c1415f30979
mdn-data: "npm:2.27.1"
source-map-js: "npm:^1.2.1"
checksum: 10c0/1f65e9ccaa56112a4706d6f003dd43d777f0dbcf848e66fd320f823192533581f8dd58daa906cb80622658332d50284d6be13b87a6ab4556cbbfe9ef535bbf7e
languageName: node
linkType: hard
@@ -6472,18 +6470,6 @@ __metadata:
languageName: node
linkType: hard
"cssstyle@npm:^6.0.1":
version: 6.0.1
resolution: "cssstyle@npm:6.0.1"
dependencies:
"@asamuzakjp/css-color": "npm:^4.1.2"
"@csstools/css-syntax-patches-for-csstree": "npm:^1.0.26"
css-tree: "npm:^3.1.0"
lru-cache: "npm:^11.2.5"
checksum: 10c0/92a8581bad4ce9f77d22761f1aabe72829f4457ac709f4fe1a5b45b431ba165368cd7f849b00454ee31cf0a4c838be583107883f14b6d546802cf3c76a88ca41
languageName: node
linkType: hard
"csstype@npm:^3.0.2, csstype@npm:^3.2.2":
version: 3.2.3
resolution: "csstype@npm:3.2.3"
@@ -8474,7 +8460,7 @@ __metadata:
languageName: node
linkType: hard
"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2":
"http-proxy-agent@npm:^7.0.0":
version: 7.0.2
resolution: "http-proxy-agent@npm:7.0.2"
dependencies:
@@ -8484,7 +8470,7 @@ __metadata:
languageName: node
linkType: hard
"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6":
"https-proxy-agent@npm:^7.0.1":
version: 7.0.6
resolution: "https-proxy-agent@npm:7.0.6"
dependencies:
@@ -9264,37 +9250,37 @@ __metadata:
languageName: node
linkType: hard
"jsdom@npm:^28.0.0":
version: 28.1.0
resolution: "jsdom@npm:28.1.0"
"jsdom@npm:^29.0.0":
version: 29.0.0
resolution: "jsdom@npm:29.0.0"
dependencies:
"@acemir/cssom": "npm:^0.9.31"
"@asamuzakjp/dom-selector": "npm:^6.8.1"
"@asamuzakjp/css-color": "npm:^5.0.1"
"@asamuzakjp/dom-selector": "npm:^7.0.2"
"@bramus/specificity": "npm:^2.4.2"
"@exodus/bytes": "npm:^1.11.0"
cssstyle: "npm:^6.0.1"
"@csstools/css-syntax-patches-for-csstree": "npm:^1.1.1"
"@exodus/bytes": "npm:^1.15.0"
css-tree: "npm:^3.2.1"
data-urls: "npm:^7.0.0"
decimal.js: "npm:^10.6.0"
html-encoding-sniffer: "npm:^6.0.0"
http-proxy-agent: "npm:^7.0.2"
https-proxy-agent: "npm:^7.0.6"
is-potential-custom-element-name: "npm:^1.0.1"
lru-cache: "npm:^11.2.7"
parse5: "npm:^8.0.0"
saxes: "npm:^6.0.0"
symbol-tree: "npm:^3.2.4"
tough-cookie: "npm:^6.0.0"
undici: "npm:^7.21.0"
tough-cookie: "npm:^6.0.1"
undici: "npm:^7.24.3"
w3c-xmlserializer: "npm:^5.0.0"
webidl-conversions: "npm:^8.0.1"
whatwg-mimetype: "npm:^5.0.0"
whatwg-url: "npm:^16.0.0"
whatwg-url: "npm:^16.0.1"
xml-name-validator: "npm:^5.0.0"
peerDependencies:
canvas: ^3.0.0
peerDependenciesMeta:
canvas:
optional: true
checksum: 10c0/341ecb4005be2dab3247dacc349a20285d7991b5cee3382301fcd69a4294b705b4147e7d9ae1ddfab466ba4b3aace97ded4f7b070de285262221cb2782965b25
checksum: 10c0/8bbb4f89bfb7013a729bf50419fa5878086b52068a5d3836b51b99be5faf7cf9f871818954d468ce1f2f1c6b86d16af6ed5167f4084f7df7de517b104b451454
languageName: node
linkType: hard
@@ -9694,10 +9680,10 @@ __metadata:
languageName: node
linkType: hard
"lru-cache@npm:^11.0.0, lru-cache@npm:^11.2.5, lru-cache@npm:^11.2.6":
version: 11.2.6
resolution: "lru-cache@npm:11.2.6"
checksum: 10c0/73bbffb298760e71b2bfe8ebc16a311c6a60ceddbba919cfedfd8635c2d125fbfb5a39b71818200e67973b11f8d59c5a9e31d6f90722e340e90393663a66e5cd
"lru-cache@npm:^11.0.0, lru-cache@npm:^11.2.6, lru-cache@npm:^11.2.7":
version: 11.2.7
resolution: "lru-cache@npm:11.2.7"
checksum: 10c0/549cdb59488baa617135fc12159cafb1a97f91079f35093bb3bcad72e849fc64ace636d244212c181dfdf1a99bbfa90757ff303f98561958ee4d0f885d9bd5f7
languageName: node
linkType: hard
@@ -9807,17 +9793,10 @@ __metadata:
languageName: node
linkType: hard
"mdn-data@npm:2.12.2":
version: 2.12.2
resolution: "mdn-data@npm:2.12.2"
checksum: 10c0/b22443b71d70f72ccc3c6ba1608035431a8fc18c3c8fc53523f06d20e05c2ac10f9b53092759a2ca85cf02f0d37036f310b581ce03e7b99ac74d388ef8152ade
languageName: node
linkType: hard
"mdn-data@npm:^2.25.0":
version: 2.26.0
resolution: "mdn-data@npm:2.26.0"
checksum: 10c0/e5f17f4dac247f3e260c081761628d371e23659a7ff13413f83f5bd7fd0f2d8317e72277bb77f0e13115041334ff728a5363db64aabaf376c0e1b0b31016d0b8
"mdn-data@npm:2.27.1, mdn-data@npm:^2.25.0":
version: 2.27.1
resolution: "mdn-data@npm:2.27.1"
checksum: 10c0/eb8abf5d22e4d1e090346f5e81b67d23cef14c83940e445da5c44541ad874dc8fb9f6ca236e8258c3a489d9fb5884188a4d7d58773adb9089ac2c0b966796393
languageName: node
linkType: hard
@@ -12385,11 +12364,14 @@ __metadata:
linkType: hard
"rollup-plugin-gzip@npm:^4.1.1":
version: 4.1.1
resolution: "rollup-plugin-gzip@npm:4.1.1"
version: 4.2.0
resolution: "rollup-plugin-gzip@npm:4.2.0"
peerDependencies:
rollup: ">=2.0.0"
checksum: 10c0/0ad79a6eb84bb8d88db15a184ca661f44aa6fb3412c98d6a97f1dec365db37945a84c3a2d0bf709ae605ae305a40a0021b2e6d5494c537b029759f3695d9ac96
peerDependenciesMeta:
rollup:
optional: true
checksum: 10c0/05aecd5cb96f5b40ef128d87ea15d86c07e416a1fb98eb5712911254ce1a09ddf60c0128edb7fc8dc7478cbca1f94d04ab07cf4437947f5ce330ce627f80bada
languageName: node
linkType: hard
@@ -12958,7 +12940,7 @@ __metadata:
languageName: node
linkType: hard
"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.1":
"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.1":
version: 1.2.1
resolution: "source-map-js@npm:1.2.1"
checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf
@@ -13824,12 +13806,12 @@ __metadata:
languageName: node
linkType: hard
"tough-cookie@npm:^6.0.0":
version: 6.0.0
resolution: "tough-cookie@npm:6.0.0"
"tough-cookie@npm:^6.0.0, tough-cookie@npm:^6.0.1":
version: 6.0.1
resolution: "tough-cookie@npm:6.0.1"
dependencies:
tldts: "npm:^7.0.5"
checksum: 10c0/7b17a461e9c2ac0d0bea13ab57b93b4346d0b8c00db174c963af1e46e4ea8d04148d2a55f2358fc857db0c0c65208a98e319d0c60693e32e0c559a9d9cf20cb5
checksum: 10c0/ec70bd6b1215efe4ed31a158f0be3e4c9088fcbd8620edc23a5860d4f3d85c757b77e274baaa700f7b25e409f4181552ed189603c2b2e1a9f88104da3a61a37d
languageName: node
linkType: hard
@@ -14135,10 +14117,10 @@ __metadata:
languageName: node
linkType: hard
"undici@npm:^7.21.0":
version: 7.22.0
resolution: "undici@npm:7.22.0"
checksum: 10c0/09777c06f3f18f761f03e3a4c9c04fd9fcca8ad02ccea43602ee4adf73fcba082806f1afb637f6ea714ef6279c5323c25b16d435814c63db720f63bfc20d316b
"undici@npm:^7.24.3":
version: 7.24.4
resolution: "undici@npm:7.24.4"
checksum: 10c0/cb302e81fadb7f0b7946ab77595715c0961b46a025ccecae79ba599432d0bc8d1e3da4dfe7ff66bc74f115c1b8ff0f099bc4e9bf313db4562da23995872c6d17
languageName: node
linkType: hard
@@ -14667,14 +14649,14 @@ __metadata:
languageName: node
linkType: hard
"whatwg-url@npm:^16.0.0":
version: 16.0.0
resolution: "whatwg-url@npm:16.0.0"
"whatwg-url@npm:^16.0.0, whatwg-url@npm:^16.0.1":
version: 16.0.1
resolution: "whatwg-url@npm:16.0.1"
dependencies:
"@exodus/bytes": "npm:^1.11.0"
tr46: "npm:^6.0.0"
webidl-conversions: "npm:^8.0.1"
checksum: 10c0/9b8cb392be244d0e9687ffe543f9ea63b7aa051a98547ea362a38d182d89bfbd96e13e7ed3f40df1f7566bb7c3581f6c081ddea950cf5382532716ce33000ff4
checksum: 10c0/e75565566abf3a2cdbd9f06c965dbcccee6ec4e9f0d3728ad5e08ceb9944279848bcaa211d35a29cb6d2df1e467dd05cfb59fbddf8a0adcd7d0bce9ffb703fd2
languageName: node
linkType: hard