Merge pull request #3447 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes up to c37bc5a8a9
This commit is contained in:
Claire
2026-03-17 18:50:00 +01:00
committed by GitHub
65 changed files with 528 additions and 240 deletions

View File

@@ -190,7 +190,7 @@ GEM
irb (~> 1.10) irb (~> 1.10)
reline (>= 0.3.8) reline (>= 0.3.8)
debug_inspector (1.2.0) debug_inspector (1.2.0)
devise (5.0.2) devise (5.0.3)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
railties (>= 7.0) 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 return JSON.parse(res.body_with_limit) if res.code == 200
end end
end end
rescue *Mastodon::HTTP_CONNECTION_ERRORS, Oj::ParseError rescue *Mastodon::HTTP_CONNECTION_ERRORS, JSON::ParserError
nil nil
end end

View File

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

View File

@@ -184,6 +184,15 @@
"account_edit.field_reorder_modal.drag_start": "Samlede feltet \"{item}\" op.", "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.handle_label": "Træk feltet \"{item}\"",
"account_edit.field_reorder_modal.title": "Omarrangér felter", "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.add_button": "Tilføj billede",
"account_edit.image_edit.alt_add_button": "Tilføj alt-tekst", "account_edit.image_edit.alt_add_button": "Tilføj alt-tekst",
"account_edit.image_edit.alt_edit_button": "Rediger 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.subtitle": "Tilpas fanerne på din profil og det, de viser.",
"account_edit.profile_tab.title": "Indstillinger for profil-fane", "account_edit.profile_tab.title": "Indstillinger for profil-fane",
"account_edit.save": "Gem", "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.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.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?", "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.drag_start": "Das Feld „{item}“ wurde ausgewählt.",
"account_edit.field_reorder_modal.handle_label": "Das Feld „{item}“ verschieben", "account_edit.field_reorder_modal.handle_label": "Das Feld „{item}“ verschieben",
"account_edit.field_reorder_modal.title": "Felder neu anordnen", "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.add_button": "Bild hinzufügen",
"account_edit.image_edit.alt_add_button": "Bildbeschreibung hinzufügen", "account_edit.image_edit.alt_add_button": "Bildbeschreibung hinzufügen",
"account_edit.image_edit.alt_edit_button": "Bildbeschreibung bearbeiten", "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.subtitle": "Passe die Tabs deines Profils und deren Inhalte an.",
"account_edit.profile_tab.title": "Profil-Tab-Einstellungen", "account_edit.profile_tab.title": "Profil-Tab-Einstellungen",
"account_edit.save": "Speichern", "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.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.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?", "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.drag_start": "Το πεδίο \"{item}\" σηκώθηκε.",
"account_edit.field_reorder_modal.handle_label": "Μετακίνηση πεδίου \"{item}\"", "account_edit.field_reorder_modal.handle_label": "Μετακίνηση πεδίου \"{item}\"",
"account_edit.field_reorder_modal.title": "Αναδιάταξη πεδίων", "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.add_button": "Προσθήκη εικόνας",
"account_edit.image_edit.alt_add_button": "Προσθήκη εναλλακτικού κειμένου", "account_edit.image_edit.alt_add_button": "Προσθήκη εναλλακτικού κειμένου",
"account_edit.image_edit.alt_edit_button": "Επεξεργασία εναλλακτικού κειμένου", "account_edit.image_edit.alt_edit_button": "Επεξεργασία εναλλακτικού κειμένου",
@@ -203,6 +212,15 @@
"account_edit.profile_tab.subtitle": "Προσαρμόστε τις καρτέλες στο προφίλ σας και τι εμφανίζουν.", "account_edit.profile_tab.subtitle": "Προσαρμόστε τις καρτέλες στο προφίλ σας και τι εμφανίζουν.",
"account_edit.profile_tab.title": "Ρυθμίσεις καρτέλας προφίλ", "account_edit.profile_tab.title": "Ρυθμίσεις καρτέλας προφίλ",
"account_edit.save": "Αποθήκευση", "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.details": "Πρόσθεσε αξιοπιστία στο Mastodon προφίλ σας επαληθεύοντας συνδέσμους σε προσωπικές ιστοσελίδες. Ορίστε πως δουλεύει:",
"account_edit.verified_modal.invisible_link.details": "Πρόσθεσε τον σύνδεσμο στην κεφαλίδα σου. Το σημαντικό μέρος είναι το rel=\"me\" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμα να χρησιμοποιήσεις μια ετικέτα link στην κεφαλίδα της σελίδας αντί για {tag}, αλλά η HTML πρέπει να είναι προσβάσιμη χωρίς την εκτέλεση JavaScript.", "account_edit.verified_modal.invisible_link.details": "Πρόσθεσε τον σύνδεσμο στην κεφαλίδα σου. Το σημαντικό μέρος είναι το rel=\"me\" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμα να χρησιμοποιήσεις μια ετικέτα link στην κεφαλίδα της σελίδας αντί για {tag}, αλλά η HTML πρέπει να είναι προσβάσιμη χωρίς την εκτέλεση JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Πώς κάνω αυτόν τον σύνδεσμο αόρατο;", "account_edit.verified_modal.invisible_link.summary": "Πώς κάνω αυτόν τον σύνδεσμο αόρατο;",

View File

@@ -163,7 +163,7 @@
"account_edit.featured_hashtags.item": "etiquetas", "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.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.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.delete_button": "Eliminar",
"account_edit.field_delete_modal.title": "¿Eliminar campo personalizado?", "account_edit.field_delete_modal.title": "¿Eliminar campo personalizado?",
"account_edit.field_edit_modal.add_title": "Agregar 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.drag_start": "Campo elegido «{item}».",
"account_edit.field_reorder_modal.handle_label": "Arrastrá el campo «{item}»", "account_edit.field_reorder_modal.handle_label": "Arrastrá el campo «{item}»",
"account_edit.field_reorder_modal.title": "Reordená los campos", "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.add_button": "Agregar imagen",
"account_edit.image_edit.alt_add_button": "Agregar texto alternativo", "account_edit.image_edit.alt_add_button": "Agregar texto alternativo",
"account_edit.image_edit.alt_edit_button": "Editar 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.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.profile_tab.title": "Configuración de pestaña de perfil",
"account_edit.save": "Guardar", "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.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.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?", "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.network.title": "Error de red",
"bundle_column_error.retry": "Intentá de nuevo", "bundle_column_error.retry": "Intentá de nuevo",
"bundle_column_error.return": "Volver al inicio", "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_column_error.routing.title": "404",
"bundle_modal_error.close": "Cerrar", "bundle_modal_error.close": "Cerrar",
"bundle_modal_error.message": "Algo salió mal al cargar esta pantalla.", "bundle_modal_error.message": "Algo salió mal al cargar esta pantalla.",
@@ -333,7 +352,7 @@
"collections.collection_description": "Descripción", "collections.collection_description": "Descripción",
"collections.collection_name": "Nombre", "collections.collection_name": "Nombre",
"collections.collection_topic": "Tema", "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.content_warning": "Advertencia de contenido",
"collections.continue": "Continuar", "collections.continue": "Continuar",
"collections.create.accounts_subtitle": "Solo las cuentas que seguís —las cuales optaron por ser descubiertas— pueden ser agregadas.", "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.no_results_found": "No hay resultados para esta búsqueda",
"combobox.open_results": "Abrir resultados", "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.", "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.local_only": "Solo local",
"community.column_settings.media_only": "Sólo medios", "community.column_settings.media_only": "Solo medios",
"community.column_settings.remote_only": "Sólo remoto", "community.column_settings.remote_only": "Solo remoto",
"compose.error.blank_post": "El mensaje no puede estar en blanco.", "compose.error.blank_post": "El mensaje no puede estar en blanco.",
"compose.language.change": "Cambiar idioma", "compose.language.change": "Cambiar idioma",
"compose.language.search": "Buscar idiomas…", "compose.language.search": "Buscar idiomas…",
@@ -428,7 +447,7 @@
"compose.saved.body": "Mensaje guardado.", "compose.saved.body": "Mensaje guardado.",
"compose_form.direct_message_warning_learn_more": "Aprendé más", "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.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": "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.lock_disclaimer.lock": "privada",
"compose_form.placeholder": "¿Qué onda?", "compose_form.placeholder": "¿Qué onda?",
@@ -448,13 +467,13 @@
"confirmation_modal.cancel": "Cancelar", "confirmation_modal.cancel": "Cancelar",
"confirmations.block.confirm": "Bloquear", "confirmations.block.confirm": "Bloquear",
"confirmations.delete.confirm": "Eliminar", "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.title": "¿Eliminar mensaje?",
"confirmations.delete_collection.confirm": "Eliminar", "confirmations.delete_collection.confirm": "Eliminar",
"confirmations.delete_collection.message": "Esta acción no se puede deshacer.", "confirmations.delete_collection.message": "Esta acción no se puede deshacer.",
"confirmations.delete_collection.title": "¿Eliminar «{name}»?", "confirmations.delete_collection.title": "¿Eliminar «{name}»?",
"confirmations.delete_list.confirm": "Eliminar", "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.delete_list.title": "¿Eliminar lista?",
"confirmations.discard_draft.confirm": "Descartar y continuar", "confirmations.discard_draft.confirm": "Descartar y continuar",
"confirmations.discard_draft.edit.cancel": "Reanudar edición", "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.message": "Necesitás seguir a {name} para agregarle a una lista.",
"confirmations.follow_to_list.title": "¿Querés seguirle?", "confirmations.follow_to_list.title": "¿Querés seguirle?",
"confirmations.logout.confirm": "Cerrar sesión", "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.logout.title": "¿Cerrar sesión?",
"confirmations.missing_alt_text.confirm": "Agregar texto alternativo", "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.", "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.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.quiet_post_quote_info.title": "Citado de mensajes públicos pero silenciosos",
"confirmations.redraft.confirm": "Eliminar mensaje original y editarlo", "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.redraft.title": "¿Eliminar y volver a redactar mensaje?",
"confirmations.remove_from_followers.confirm": "Quitar seguidor", "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.remove_from_followers.title": "¿Quitar seguidor?",
"confirmations.revoke_collection_inclusion.confirm": "Quitarme", "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.", "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.copied": "Copiado",
"copypaste.copy_to_clipboard": "Copiar al portapapeles", "copypaste.copy_to_clipboard": "Copiar al portapapeles",
"directory.federated": "Desde fediverso conocido", "directory.federated": "Desde fediverso conocido",
"directory.local": "Sólo de {domain}", "directory.local": "Solo de {domain}",
"directory.new_arrivals": "Recién llegados", "directory.new_arrivals": "Recién llegados",
"directory.recently_active": "Recientemente activos", "directory.recently_active": "Recientemente activos",
"disabled_account_banner.account_settings": "Config. de la cuenta", "disabled_account_banner.account_settings": "Config. de la cuenta",
@@ -893,10 +912,10 @@
"notification_requests.accept": "Aceptar", "notification_requests.accept": "Aceptar",
"notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud…} other {Aceptar # solicitudes…}}", "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.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_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.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.confirm_dismiss_multiple.title": "¿Descartar solicitudes de notificación?",
"notification_requests.dismiss": "Descartar", "notification_requests.dismiss": "Descartar",
"notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud…} other {Descartar # solicitudes…}}", "notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud…} other {Descartar # solicitudes…}}",
@@ -910,7 +929,7 @@
"notification_requests.title": "Notificaciones filtradas", "notification_requests.title": "Notificaciones filtradas",
"notification_requests.view": "Ver notificaciones", "notification_requests.view": "Ver notificaciones",
"notifications.clear": "Limpiar 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.clear_title": "¿Limpiar notificaciones?",
"notifications.column_settings.admin.report": "Nuevas denuncias:", "notifications.column_settings.admin.report": "Nuevas denuncias:",
"notifications.column_settings.admin.sign_up": "Nuevos registros:", "notifications.column_settings.admin.sign_up": "Nuevos registros:",
@@ -1219,7 +1238,7 @@
"status.uncached_media_warning": "Previsualización no disponible", "status.uncached_media_warning": "Previsualización no disponible",
"status.unmute_conversation": "Dejar de silenciar conversación", "status.unmute_conversation": "Dejar de silenciar conversación",
"status.unpin": "Dejar de fijar", "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.save": "Guardar cambios",
"subscribed_languages.target": "Cambiar idiomas suscritos para {target}", "subscribed_languages.target": "Cambiar idiomas suscritos para {target}",
"tabs_bar.home": "Principal", "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.drag_start": "Recogido el campo «{item}».",
"account_edit.field_reorder_modal.handle_label": "Arrastra el campo «{item}»", "account_edit.field_reorder_modal.handle_label": "Arrastra el campo «{item}»",
"account_edit.field_reorder_modal.title": "Reorganizar campos", "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.add_button": "Añadir imagen",
"account_edit.image_edit.alt_add_button": "Añadir texto alternativo", "account_edit.image_edit.alt_add_button": "Añadir texto alternativo",
"account_edit.image_edit.alt_edit_button": "Editar 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.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.profile_tab.title": "Configuración de la pestaña de perfil",
"account_edit.save": "Guardar", "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.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.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?", "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.drag_start": "Valittu kenttä ”{item}”.",
"account_edit.field_reorder_modal.handle_label": "Siirrä kenttää ”{item}”", "account_edit.field_reorder_modal.handle_label": "Siirrä kenttää ”{item}”",
"account_edit.field_reorder_modal.title": "Järjestele kenttiä", "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.add_button": "Lisää kuva",
"account_edit.image_edit.alt_add_button": "Lisää tekstivastine", "account_edit.image_edit.alt_add_button": "Lisää tekstivastine",
"account_edit.image_edit.alt_edit_button": "Muokkaa tekstivastinetta", "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.subtitle": "Mukauta profiilisi välilehtiä ja sitä, mitä niissä näkyy.",
"account_edit.profile_tab.title": "Profiilin välilehtien asetukset", "account_edit.profile_tab.title": "Profiilin välilehtien asetukset",
"account_edit.save": "Tallenna", "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.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.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?", "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.subtitle": "Personnaliser les onglets de votre profil et leur contenu.",
"account_edit.profile_tab.title": "Paramètres de l'onglet du profil", "account_edit.profile_tab.title": "Paramètres de l'onglet du profil",
"account_edit.save": "Enregistrer", "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.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.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 ?", "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.subtitle": "Personnaliser les onglets de votre profil et leur contenu.",
"account_edit.profile_tab.title": "Paramètres de l'onglet du profil", "account_edit.profile_tab.title": "Paramètres de l'onglet du profil",
"account_edit.save": "Enregistrer", "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.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.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 ?", "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.drag_start": "Seleccionado o campo \"{item}\".",
"account_edit.field_reorder_modal.handle_label": "Arrastra o campo \"{item}\"", "account_edit.field_reorder_modal.handle_label": "Arrastra o campo \"{item}\"",
"account_edit.field_reorder_modal.title": "Ordear campos", "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.add_button": "Engadir imaxe",
"account_edit.image_edit.alt_add_button": "Engadir descrición", "account_edit.image_edit.alt_add_button": "Engadir descrición",
"account_edit.image_edit.alt_edit_button": "Editar 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.subtitle": "Personaliza as pestanas e o seu contido no teu perfil.",
"account_edit.profile_tab.title": "Perfil e axustes das pestanas", "account_edit.profile_tab.title": "Perfil e axustes das pestanas",
"account_edit.save": "Gardar", "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.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.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?", "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.drag_start": "Náði reitnum \"{item}\".",
"account_edit.field_reorder_modal.handle_label": "Dragðu reitinn \"{item}\"", "account_edit.field_reorder_modal.handle_label": "Dragðu reitinn \"{item}\"",
"account_edit.field_reorder_modal.title": "Endurraða gagnasviðum", "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.add_button": "Bæta við mynd",
"account_edit.image_edit.alt_add_button": "Bæta við hjálpartexta", "account_edit.image_edit.alt_add_button": "Bæta við hjálpartexta",
"account_edit.image_edit.alt_edit_button": "Breyta 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.subtitle": "Sérsníddu flipana á notandasniðinu þínu og hvað þeir birta.",
"account_edit.profile_tab.title": "Stillingar notandasniðsflipa", "account_edit.profile_tab.title": "Stillingar notandasniðsflipa",
"account_edit.save": "Vista", "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.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.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?", "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.drag_start": "Campo \"{item}\" selezionato.",
"account_edit.field_reorder_modal.handle_label": "Trascina il campo \"{item}\"", "account_edit.field_reorder_modal.handle_label": "Trascina il campo \"{item}\"",
"account_edit.field_reorder_modal.title": "Riorganizza i campi", "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.add_button": "Aggiungi un'immagine",
"account_edit.image_edit.alt_add_button": "Aggiungi il testo alternativo", "account_edit.image_edit.alt_add_button": "Aggiungi il testo alternativo",
"account_edit.image_edit.alt_edit_button": "Modifica 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.subtitle": "Personalizza le schede del tuo profilo e ciò che mostrano.",
"account_edit.profile_tab.title": "Impostazioni della scheda del profilo", "account_edit.profile_tab.title": "Impostazioni della scheda del profilo",
"account_edit.save": "Salva", "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.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.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?", "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.edit_title": "Aangepast veld bewerken",
"account_edit.field_edit_modal.limit_header": "Aanbevolen tekenlimiet overschreden", "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.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_hint": "Bijv. \"Persoonlijke website\"",
"account_edit.field_edit_modal.name_label": "Label", "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_hint": "Bijv. \"https://example.me\"",
"account_edit.field_edit_modal.value_label": "Waarde", "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_cancel": "Slepen is geannuleerd. Veld \"{item}\" werd geschrapt.",
"account_edit.field_reorder_modal.drag_end": "Veld \"{item}\" was weggevallen.", "account_edit.field_reorder_modal.drag_end": "Veld \"{item}\" werd geschrapt.",
"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_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_move": "Veld \"{item}\" is verplaatst.",
"account_edit.field_reorder_modal.drag_over": "Veld \"{item}\" is over \"{over} \" verplaatst.", "account_edit.field_reorder_modal.drag_over": "Veld \"{item}\" is over \"{over} \" verplaatst.",
"account_edit.field_reorder_modal.drag_start": "Opgepakt veld \"{item}\".", "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.old_last_post_note": "Meer dan een week geleden voor het laatst een bericht geplaatst",
"collections.remove_account": "Dit account verwijderen", "collections.remove_account": "Dit account verwijderen",
"collections.report_collection": "Deze verzameling rapporteren", "collections.report_collection": "Deze verzameling rapporteren",
"collections.revoke_collection_inclusion": "Verwijder mezelf uit deze collectie", "collections.revoke_collection_inclusion": "Mezelf uit deze verzameling verwijderen",
"collections.revoke_inclusion.confirmation": "Je bent verwijderd uit \"{collection}\"", "collections.revoke_inclusion.confirmation": "Je bent uit \"{collection}\" verwijderd",
"collections.revoke_inclusion.error": "Er is een fout opgetreden. Probeer het later opnieuw.", "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_label": "Naar accounts zoeken om toe te voegen…",
"collections.search_accounts_max_reached": "Je hebt het maximum aantal accounts toegevoegd", "collections.search_accounts_max_reached": "Je hebt het maximum aantal accounts toegevoegd",
@@ -496,7 +496,7 @@
"confirmations.remove_from_followers.title": "Volger verwijderen?", "confirmations.remove_from_followers.title": "Volger verwijderen?",
"confirmations.revoke_collection_inclusion.confirm": "Verwijder mij", "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.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.confirm": "Bericht verwijderen",
"confirmations.revoke_quote.message": "Deze actie kan niet ongedaan worden gemaakt.", "confirmations.revoke_quote.message": "Deze actie kan niet ongedaan worden gemaakt.",
"confirmations.revoke_quote.title": "Bericht verwijderen?", "confirmations.revoke_quote.title": "Bericht verwijderen?",
@@ -967,7 +967,7 @@
"notifications_permission_banner.title": "Mis nooit meer iets", "notifications_permission_banner.title": "Mis nooit meer iets",
"onboarding.follows.back": "Terug", "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.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.search": "Zoeken",
"onboarding.follows.title": "Volg mensen om te beginnen", "onboarding.follows.title": "Volg mensen om te beginnen",
"onboarding.profile.discoverable": "Maak mijn profiel vindbaar", "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.drag_start": "U mor fusha “{item}”.",
"account_edit.field_reorder_modal.handle_label": "Tërhiqni fushën “{item}”", "account_edit.field_reorder_modal.handle_label": "Tërhiqni fushën “{item}”",
"account_edit.field_reorder_modal.title": "Risistemoni fusha", "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.add_button": "Shtoni figurë",
"account_edit.image_edit.alt_add_button": "Shtoni tekst alternativ", "account_edit.image_edit.alt_add_button": "Shtoni tekst alternativ",
"account_edit.image_edit.alt_edit_button": "Përpunoni 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.subtitle": "Përshtatni skedat në profilin tuaj dhe ato çka shfaqet në to.",
"account_edit.profile_tab.title": "Rregullime skede profili", "account_edit.profile_tab.title": "Rregullime skede profili",
"account_edit.save": "Ruaje", "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.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.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?", "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.subtitle": "Profilinizdeki sekmeleri ve bunların görüntülediği bilgileri özelleştirin.",
"account_edit.profile_tab.title": "Profil sekme ayarları", "account_edit.profile_tab.title": "Profil sekme ayarları",
"account_edit.save": "Kaydet", "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.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.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?", "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.search_accounts_max_reached": "Maksimum hesabı eklediniz",
"collections.sensitive": "Hassas", "collections.sensitive": "Hassas",
"collections.topic_hint": "Bu koleksiyonun ana konusunu başkalarının anlamasına yardımcı olacak bir etiket ekleyin.", "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_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.view_other_collections_by_user": "Bu kullanıcının diğer koleksiyonlarını görüntüle",
"collections.visibility_public": "Herkese açık", "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.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.profile_tab.title": "Thiết lập tab hồ sơ",
"account_edit.save": "Lưu", "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.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.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?", "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.drag_start": "已选中字段“{item}”。",
"account_edit.field_reorder_modal.handle_label": "拖拽字段“{item}”", "account_edit.field_reorder_modal.handle_label": "拖拽字段“{item}”",
"account_edit.field_reorder_modal.title": "重新排列字段", "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.add_button": "添加图片",
"account_edit.image_edit.alt_add_button": "添加替代文本", "account_edit.image_edit.alt_add_button": "添加替代文本",
"account_edit.image_edit.alt_edit_button": "编辑替代文本", "account_edit.image_edit.alt_edit_button": "编辑替代文本",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "自定义你个人资料的标签页及其显示的内容。", "account_edit.profile_tab.subtitle": "自定义你个人资料的标签页及其显示的内容。",
"account_edit.profile_tab.title": "个人资料标签页设置", "account_edit.profile_tab.title": "个人资料标签页设置",
"account_edit.save": "保存", "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.details": "要增加 Mastodon 个人资料的可信度,可以验证指向个人网站的链接。运作方式如下:",
"account_edit.verified_modal.invisible_link.details": "将链接添加到标头header中。其中很重要的部分是 rel=\"me\",可以防止他人通过用户生成内容模仿。你甚至可以在页面标头中使用 link 标签而不是 {tag},但包含该部分的 HTML 必须在没有 JavaScript 执行环境下访问时依然存在。", "account_edit.verified_modal.invisible_link.details": "将链接添加到标头header中。其中很重要的部分是 rel=\"me\",可以防止他人通过用户生成内容模仿。你甚至可以在页面标头中使用 link 标签而不是 {tag},但包含该部分的 HTML 必须在没有 JavaScript 执行环境下访问时依然存在。",
"account_edit.verified_modal.invisible_link.summary": "如何隐藏此链接?", "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.drag_start": "已選取欄位「{item}」。",
"account_edit.field_reorder_modal.handle_label": "拖放欄位「{item}」", "account_edit.field_reorder_modal.handle_label": "拖放欄位「{item}」",
"account_edit.field_reorder_modal.title": "重新整理欄位", "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.add_button": "新增圖片",
"account_edit.image_edit.alt_add_button": "新增 ALT 說明文字", "account_edit.image_edit.alt_add_button": "新增 ALT 說明文字",
"account_edit.image_edit.alt_edit_button": "編輯 ALT 說明文字", "account_edit.image_edit.alt_edit_button": "編輯 ALT 說明文字",
@@ -203,6 +212,16 @@
"account_edit.profile_tab.subtitle": "自訂您個人檔案之分頁與內容。", "account_edit.profile_tab.subtitle": "自訂您個人檔案之分頁與內容。",
"account_edit.profile_tab.title": "個人檔案分頁設定", "account_edit.profile_tab.title": "個人檔案分頁設定",
"account_edit.save": "儲存", "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.details": "藉由驗證連結至個人網站增加您 Mastodon 個人檔案之可信度。運作方式如下:",
"account_edit.verified_modal.invisible_link.details": "新增連結至您的標頭 (header)。其重要的部分是 rel=\"me\" ,防止透過使用者產生內容模擬。您甚至能使用頁面標頭之 link 標籤取代頁面中的 {tag},但 HTML 必須能於不執行 JavaScript 情況下所存取。", "account_edit.verified_modal.invisible_link.details": "新增連結至您的標頭 (header)。其重要的部分是 rel=\"me\" ,防止透過使用者產生內容模擬。您甚至能使用頁面標頭之 link 標籤取代頁面中的 {tag},但 HTML 必須能於不執行 JavaScript 情況下所存取。",
"account_edit.verified_modal.invisible_link.summary": "如何隱藏此連結?", "account_edit.verified_modal.invisible_link.summary": "如何隱藏此連結?",

View File

@@ -440,7 +440,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def forward_for_reply def forward_for_reply
return unless @status.distributable? && @json['signature'].present? && reply_to_local? 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 end
def increment_voters_count! def increment_voters_count!

View File

@@ -40,7 +40,7 @@ class ActivityPub::Activity::FeatureRequest < ActivityPub::Activity
end end
def queue_delivery!(collection_item, serializer) 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) ActivityPub::DeliveryWorker.perform_async(json, @featured_account.id, @account.inbox_url)
end end
end end

View File

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

View File

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

View File

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

View File

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

View File

@@ -9,7 +9,7 @@ class VideoMetadataExtractor
@metadata = JSON.parse(ffmpeg_command_output, symbolize_names: true) @metadata = JSON.parse(ffmpeg_command_output, symbolize_names: true)
parse_metadata parse_metadata
rescue Terrapin::ExitStatusError, Oj::ParseError rescue Terrapin::ExitStatusError, JSON::ParserError
@invalid = true @invalid = true
rescue Terrapin::CommandNotFoundError 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 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 def perform
Response.new(@uri, body_from_webfinger) Response.new(@uri, body_from_webfinger)
rescue Oj::ParseError rescue JSON::ParserError
raise Webfinger::Error, "Invalid JSON in response for #{@uri}" raise Webfinger::Error, "Invalid JSON in response for #{@uri}"
rescue Addressable::URI::InvalidURIError rescue Addressable::URI::InvalidURIError
raise Webfinger::Error, "Invalid URI for #{@uri}" raise Webfinger::Error, "Invalid URI for #{@uri}"

View File

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

View File

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

View File

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

View File

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

View File

@@ -61,7 +61,7 @@ class Scheduler::SelfDestructScheduler
adapter: ActivityPub::Adapter adapter: ActivityPub::Adapter
).as_json ).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| ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url|
[json, account.id, inbox_url] [json, account.id, inbox_url]

View File

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

View File

@@ -49,7 +49,7 @@ es-AR:
subject: 'Mastodon: instrucciones para cambiar la contraseña' subject: 'Mastodon: instrucciones para cambiar la contraseña'
title: Cambiar contraseña title: Cambiar contraseña
two_factor_disabled: 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' subject: 'Mastodon: autenticación de dos factores, deshabilitada'
subtitle: Se deshabilitó la autenticación de dos factores para tu cuenta. subtitle: Se deshabilitó la autenticación de dos factores para tu cuenta.
title: 2FA deshabilitada title: 2FA deshabilitada
@@ -76,7 +76,7 @@ es-AR:
title: Se eliminó una de tus llaves de seguridad title: Se eliminó una de tus llaves de seguridad
webauthn_disabled: webauthn_disabled:
explanation: Se deshabilitó la autenticación con claves de seguridad para tu cuenta. 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' subject: 'Mastodon: autenticación con llaves de seguridad, deshabilitada'
title: Llaves de seguridad deshabilitadas title: Llaves de seguridad deshabilitadas
webauthn_enabled: webauthn_enabled:

View File

@@ -25,7 +25,7 @@ es-AR:
edit: Editar edit: Editar
submit: Enviar submit: Enviar
confirmations: confirmations:
destroy: "¿Estás seguro?" destroy: "¿Continuar?"
edit: edit:
title: Editar aplicación title: Editar aplicación
form: form:
@@ -69,7 +69,7 @@ es-AR:
buttons: buttons:
revoke: Revocar revoke: Revocar
confirmations: confirmations:
revoke: "¿Estás seguro?" revoke: "¿Continuar?"
index: index:
authorized_at: Autorizado el %{date} 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. 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. notice: Aplicación revocada.
grouped_scopes: grouped_scopes:
access: access:
read: Acceso de sólo lectura read: Acceso de solo lectura
read/write: Acceso de lectura y escritura read/write: Acceso de lectura y escritura
write: Acceso de sólo escritura write: Acceso de solo escritura
title: title:
accounts: Cuentas accounts: Cuentas
admin/accounts: Administración de 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 add_email_domain_block: Bloquear el dominio del correo electrónico
approve: Aprobar approve: Aprobar
approved_msg: Se aprobó exitosamente la solicitud de registro de %{username} approved_msg: Se aprobó exitosamente la solicitud de registro de %{username}
are_you_sure: "¿Estás seguro?" are_you_sure: "¿Continuar?"
avatar: Avatar avatar: Avatar
by_domain: Dominio by_domain: Dominio
change_email: change_email:
@@ -144,7 +144,7 @@ es-AR:
search_same_ip: Otros usuarios con la misma dirección IP search_same_ip: Otros usuarios con la misma dirección IP
security: Seguridad security: Seguridad
security_measures: security_measures:
only_password: Sólo contraseña only_password: Solo contraseña
password_and_2fa: Contraseña y 2FA password_and_2fa: Contraseña y 2FA
sensitive: Forzar como sensible sensitive: Forzar como sensible
sensitized: Marcado como sensible sensitized: Marcado como sensible
@@ -379,7 +379,7 @@ es-AR:
not_permitted: No tenés permiso para realizar esta acción not_permitted: No tenés permiso para realizar esta acción
overwrite: Sobreescribir overwrite: Sobreescribir
shortcode: Código corto 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 title: Emojis personalizados
uncategorized: Sin categoría uncategorized: Sin categoría
unlist: No listar unlist: No listar
@@ -559,7 +559,7 @@ es-AR:
back_to_limited: Limitados back_to_limited: Limitados
back_to_warning: Advertencia back_to_warning: Advertencia
by_domain: Dominio 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: content_policies:
comment: Nota interna 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. 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. 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. 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. 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. 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_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 actions_no_posts: Esta denuncia no tiene ningún mensaje asociado para eliminar
add_to_report: Agregar más a la denuncia add_to_report: Agregar más a la denuncia
already_suspended_badges: already_suspended_badges:
local: Ya suspendido en este servidor local: Ya suspendido en este servidor
remote: Ya suspendido en su servidor remote: Ya suspendido en su servidor
are_you_sure: "¿Estás seguro?" are_you_sure: "¿Continuar?"
assign_to_self: Asignármela a mí assign_to_self: Asignármela a mí
assigned: Moderador asignado assigned: Moderador asignado
by_target_domain: Dominio de la cuenta denunciada by_target_domain: Dominio de la cuenta denunciada
@@ -738,7 +738,7 @@ es-AR:
actions: actions:
delete_html: Eliminar los mensajes ofensivos delete_html: Eliminar los mensajes ofensivos
mark_as_sensitive_html: Marcar los mensajes ofensivos como sensibles 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 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_report: 'Marcar denuncia #%{id} como resuelta'
close_reports_html: Marcar <strong>todas</strong> las denuncias contra <strong>@%{acct}</strong> como resueltas close_reports_html: Marcar <strong>todas</strong> las denuncias contra <strong>@%{acct}</strong> como resueltas
@@ -1054,16 +1054,16 @@ es-AR:
trends: trends:
allow: Permitir allow: Permitir
approved: Aprobadas approved: Aprobadas
confirm_allow: "¿Estás seguro de que querés permitir las etiquetas seleccionadas?" confirm_allow: "¿De verdad querés permitir las etiquetas seleccionadas?"
confirm_disallow: "¿Estás seguro de que no querés permitir las etiquetas seleccionadas?" confirm_disallow: "¿De verdad no querés permitir las etiquetas seleccionadas?"
disallow: Rechazar disallow: Rechazar
links: links:
allow: Permitir enlace allow: Permitir enlace
allow_provider: Permitir medio allow_provider: Permitir medio
confirm_allow: "¿Estás seguro de que querés permitir los enlaces seleccionados?" confirm_allow: "¿De verdad querés permitir los enlaces seleccionados?"
confirm_allow_provider: "¿Estás seguro de que querés permitir los proveedores seleccionados?" confirm_allow_provider: "¿De verdad querés permitir los proveedores seleccionados?"
confirm_disallow: "¿Estás seguro de que no querés permitir los enlaces seleccionados?" confirm_disallow: "¿De verdad no querés permitir los enlaces seleccionados?"
confirm_disallow_provider: "¿Estás seguro de que no querés permitir los proveedores 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. 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: Rechazar enlace
disallow_provider: Rechazar medio disallow_provider: Rechazar medio
@@ -1076,7 +1076,7 @@ es-AR:
title: Enlaces en tendencia title: Enlaces en tendencia
usage_comparison: Compartido %{today} veces hoy, comparado con la/s %{yesterday} vez/veces de ayer usage_comparison: Compartido %{today} veces hoy, comparado con la/s %{yesterday} vez/veces de ayer
not_allowed_to_trend: No se permite la tendencia not_allowed_to_trend: No se permite la tendencia
only_allowed: Sólo permitidas only_allowed: Solo permitidas
pending_review: Revisión pendiente pending_review: Revisión pendiente
preview_card_providers: preview_card_providers:
allowed: Los enlaces de este medio pueden ser tendencia allowed: Los enlaces de este medio pueden ser tendencia
@@ -1087,10 +1087,10 @@ es-AR:
statuses: statuses:
allow: Permitir mensaje allow: Permitir mensaje
allow_account: Permitir autor allow_account: Permitir autor
confirm_allow: "¿Estás seguro de que querés permitir los estados seleccionados?" confirm_allow: "¿De verdad querés permitir los estados seleccionados?"
confirm_allow_account: "¿Estás seguro de que querés permitir las cuentas seleccionadas?" confirm_allow_account: "¿De verdad querés permitir las cuentas seleccionadas?"
confirm_disallow: "¿Estás seguro de que no querés permitir los estados seleccionados?" confirm_disallow: "¿De verdad no querés permitir los estados seleccionados?"
confirm_disallow_account: "¿Estás seguro de que no querés permitir las cuentas seleccionadas?" 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. 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: Rechazar mensaje
disallow_account: Rechazar autor disallow_account: Rechazar autor
@@ -1632,7 +1632,7 @@ es-AR:
author_html: Por %{name} author_html: Por %{name}
potentially_sensitive_content: potentially_sensitive_content:
action: Clic para mostrar 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 hide_button: Ocultar
label: Contenido potencialmente sensible label: Contenido potencialmente sensible
lists: lists:
@@ -1820,9 +1820,9 @@ es-AR:
title: Estás dejando %{instance}. title: Estás dejando %{instance}.
relationships: relationships:
activity: Actividad de la cuenta activity: Actividad de la cuenta
confirm_follow_selected_followers: "¿Estás seguro que querés seguir a los seguidores seleccionados?" confirm_follow_selected_followers: "¿De verdad 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_followers: "¿De verdad querés quitar a los seguidores seleccionados?"
confirm_remove_selected_follows: "¿Estás seguro que querés quitar a las cuentas seguidas seleccionadas?" confirm_remove_selected_follows: "¿De verdad querés quitar a las cuentas seguidas seleccionadas?"
dormant: Inactivas dormant: Inactivas
follow_failure: No se pudieron seguir algunas de las cuentas seleccionadas. follow_failure: No se pudieron seguir algunas de las cuentas seleccionadas.
follow_selected_followers: Seguir a los seguidores seleccionados 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. 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 over_character_limit: se excedió el límite de %{max} caracteres
pin_errors: 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 limit: Ya fijaste el número máximo de mensajes
ownership: No se puede fijar el mensaje de otra cuenta ownership: No se puede fijar el mensaje de otra cuenta
reblog: No se puede fijar una adhesión 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. 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. 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. 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. 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:' reason: 'Motivo:'
statuses: 'Mensajes citados:' statuses: 'Mensajes citados:'
@@ -2200,7 +2200,7 @@ es-AR:
error: Hubo un problema al agregar tu llave de seguridad. Por favor, intentá de nuevo. error: Hubo un problema al agregar tu llave de seguridad. Por favor, intentá de nuevo.
success: Se agregó exitosamente tu llave de seguridad. success: Se agregó exitosamente tu llave de seguridad.
delete: Eliminar 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. 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: destroy:
error: Hubo un problema al eliminar tu llave de seguridad. Por favor, intentá de nuevo. 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. 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 warning_preset_id: Opcional. Todavía podés agregar texto personalizado al final del preajuste
announcement: 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 ends_at: Opcional. El anuncio desaparecerá automáticamente en este momento
scheduled_at: Dejar en blanco para publicar el anuncio inmediatamente 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 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 text: Podés usar sintaxis de mensajes. Por favor, tené en cuenta el espacio que ocupará el anuncio en la pantalla del usuario
appeal: appeal:
text: Sólo podés apelar un incumplimiento una vez text: Solo podés apelar un incumplimiento una vez
defaults: defaults:
autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente 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 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 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_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 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 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 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 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 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. 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_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_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_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. 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_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 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 ("_") 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_allow:
domain: Este dominio podrá recolectar datos de este servidor, y los datos entrantes serán procesados y archivados domain: Este dominio podrá recolectar datos de este servidor, y los datos entrantes serán procesados y archivados
email_domain_block: email_domain_block:
@@ -97,7 +97,7 @@ es-AR:
mascot: Reemplaza la ilustración en la interface web avanzada. 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. 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 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. 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 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. 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. 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. show_application: Sin embargo, siempre podrás ver desde qué aplicación se envió tu mensaje.
tag: 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: terms_of_service:
changelog: Se puede estructurar con sintaxis Markdown. 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. 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. 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. min_age: No debería estar por debajo de la edad mínima requerida por las leyes de su jurisdicción.
user: 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: 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. 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. 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 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 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… 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 require_2fa: Los usuarios con este rol serán requeridos para configurar la autenticación de dos factores para usar Mastodon
username_block: username_block:
allow_with_approval: En lugar de impedir el registro total, los registros coincidentes requerirán tu aprobación 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: debug:
callbacks: callbacks:
created_at: 创建于 created_at: 创建于
delete: delete:
ip: IP 地址 ip: IP 地址
request_body: 请求正文 request_body: 请求正文
title: 调试回调 title: 调试回调
@@ -504,7 +504,7 @@ zh-CN:
active: 有效 active: 有效
base_url: 基础 URL base_url: 基础 URL
callback: 回调 callback: 回调
delete: delete:
edit: 编辑提供商 edit: 编辑提供商
finish_registration: 完成注册 finish_registration: 完成注册
name: 名称 name: 名称
@@ -930,7 +930,7 @@ zh-CN:
with_media: 含有媒体文件 with_media: 含有媒体文件
strikes: strikes:
actions: actions:
delete_statuses: "%{name} 除了 %{target} 的嘟文" delete_statuses: "%{name} 除了 %{target} 的嘟文"
disable: "%{name} 冻结了用户 %{target}" disable: "%{name} 冻结了用户 %{target}"
mark_statuses_as_sensitive: "%{name} 已将 %{target} 的嘟文标记为敏感内容" mark_statuses_as_sensitive: "%{name} 已将 %{target} 的嘟文标记为敏感内容"
none: "%{name} 向 %{target} 发送了警告" none: "%{name} 向 %{target} 发送了警告"

View File

@@ -28,7 +28,7 @@ class RejectFollowingBlockedUsers < ActiveRecord::Migration[5.2]
next follow.destroy! if blocked_account.local? 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) 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
end end
user.update_column('settings', Oj.dump(user_settings)) user.update_column('settings', JSON.generate(user_settings))
end end
end end
end end

View File

@@ -21,7 +21,7 @@ class MigrateInteractionSettingsToPolicy < ActiveRecord::Migration[7.1]
private private
def policy_for_user(user) 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 deserialized_settings.nil?
requires_new_policy = false requires_new_policy = false

View File

@@ -8,7 +8,7 @@ class FillDefaultQuotePolicySetting < ActiveRecord::Migration[8.0]
def up def up
User.where.not(settings: nil).find_each do |user| 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? next if settings.nil?
should_update_settings = false should_update_settings = false
@@ -26,7 +26,7 @@ class FillDefaultQuotePolicySetting < ActiveRecord::Migration[8.0]
should_update_settings = true should_update_settings = true
end 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 end
end end

View File

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

View File

@@ -11,11 +11,11 @@ class FixKmrLocaleSettings < ActiveRecord::Migration[7.0]
MigrationUser.reset_column_information MigrationUser.reset_column_information
MigrationUser.where.not(settings: [nil, '{}']).find_each do |user| 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' next unless user_settings['default_language'] == 'kmr'
user_settings['default_language'] = 'ku' user_settings['default_language'] = 'ku'
user.update!(settings: Oj.dump(user_settings)) user.update!(settings: JSON.generate(user_settings))
end end
MigrationUser.where.not(chosen_languages: nil).where('chosen_languages && ?', '{kmr}').find_each do |user| 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 private
def policy_for_user(user) 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 deserialized_settings.nil?
return if user.notification_policy.present? 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 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})" puts "Wrote emojo to destination! (#{dest})"
end end

View File

@@ -112,6 +112,11 @@ RSpec.describe JsonLdHelper do
expect(fetch_resource_without_id_validation('https://host.test/')).to be_nil expect(fetch_resource_without_id_validation('https://host.test/')).to be_nil
end 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 it 'returns hash' do
stub_request(:get, 'https://host.test/').to_return(status: 200, body: '{}', headers: { 'Content-Type': 'application/activity+json' }) 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({}) expect(fetch_resource_without_id_validation('https://host.test/')).to eq({})

View File

@@ -19,6 +19,19 @@ RSpec.describe TranslationService::DeepL do
end end
describe '#translate' do 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 it 'returns translation with specified source language' do
stub_request(:post, 'https://api.deepl.com/v2/translate') stub_request(:post, 'https://api.deepl.com/v2/translate')
.with(body: 'text=Hasta+la+vista&source_lang=ES&target_lang=en&tag_handling=html') .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 end
describe '#translate' do 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 it 'returns translation with specified source language' do
stub_request(:post, 'https://libretranslate.example.com/translate') 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"}') .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
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 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) } 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 # frozen_string_literal: true
RSpec.shared_examples 'AccountAvatar' do |fabricator| RSpec.describe Account::Avatar do
describe 'static avatars', :attachment_processing do describe 'static avatars', :attachment_processing do
describe 'with a square GIF' do describe 'with a square GIF' do
it 'creates a png static style' 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 expect(account.avatar_static_url).to_not eq account.avatar_original_url
end end
end end
describe 'with a higher-than-wide GIF' do describe 'with a higher-than-wide GIF' do
it 'creates a png static style' 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 expect(account.avatar_static_url).to_not eq account.avatar_original_url
end end
end end
describe 'when non-GIF' do describe 'when non-GIF' do
it 'does not create extra static style' 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 expect(account.avatar_static_url).to eq account.avatar_original_url
end end
end end
@@ -26,7 +26,7 @@ RSpec.shared_examples 'AccountAvatar' do |fabricator|
describe 'base64-encoded files', :attachment_processing do describe 'base64-encoded files', :attachment_processing do
let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('attachment.jpg').read)}" } 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 it 'saves avatar' do
expect(account.persisted?).to be true expect(account.persisted?).to be true

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -52,6 +52,19 @@ RSpec.describe 'Donation campaigns' do
end end
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 context 'when the donation campaign API returns a campaign' do
let(:campaign_json) do let(:campaign_json) do
{ {

View File

@@ -55,6 +55,16 @@ RSpec.describe SoftwareUpdateCheckService do
end end
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 context 'when the server returns new versions' do
let(:server_json) do let(:server_json) do
{ {

View File

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

172
yarn.lock
View File

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