mirror of
https://github.com/glitch-soc/mastodon.git
synced 2026-03-29 03:00:33 +02:00
Merge commit '2774e0fbfa045e883ec94e873e657e9e8fefa98b' into glitch-soc/merge-upstream
This commit is contained in:
3
.github/workflows/check-i18n.yml
vendored
3
.github/workflows/check-i18n.yml
vendored
@@ -42,8 +42,7 @@ jobs:
|
||||
|
||||
- name: Check for missing strings in English YML
|
||||
run: |
|
||||
bin/i18n-tasks add-missing -l en
|
||||
git diff --exit-code
|
||||
bin/i18n-tasks missing -t used -l en
|
||||
|
||||
- name: Check for wrong string interpolations
|
||||
run: bin/i18n-tasks check-consistent-interpolations
|
||||
|
||||
2
.github/workflows/lint-ruby.yml
vendored
2
.github/workflows/lint-ruby.yml
vendored
@@ -43,7 +43,7 @@ jobs:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Set-up RuboCop Problem Matcher
|
||||
uses: r7kamura/rubocop-problem-matchers-action@59f1a0759f50cc2649849fd850b8487594bb5a81 # v1
|
||||
uses: r7kamura/rubocop-problem-matchers-action@59f1a0759f50cc2649849fd850b8487594bb5a81 # v1.2.2
|
||||
|
||||
- name: Run rubocop
|
||||
run: bin/rubocop
|
||||
|
||||
@@ -51,7 +51,7 @@ class Api::V1Alpha::CollectionsController < Api::BaseController
|
||||
def update
|
||||
authorize @collection, :update?
|
||||
|
||||
@collection.update!(collection_update_params) # TODO: Create a service for this to federate changes
|
||||
UpdateCollectionService.new.call(@collection, collection_update_params)
|
||||
|
||||
render json: @collection, serializer: REST::CollectionSerializer, adapter: :json
|
||||
end
|
||||
|
||||
@@ -123,6 +123,8 @@
|
||||
"account.share": "Compartir el perfil de @{name}",
|
||||
"account.show_reblogs": "Mostrar impulsos de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
|
||||
"account.timeline.pinned": "Fijada",
|
||||
"account.timeline.pinned.view_all": "Ver todas las publicaciones fijadas",
|
||||
"account.unblock": "Desbloquear a @{name}",
|
||||
"account.unblock_domain": "Desbloquear el dominio {domain}",
|
||||
"account.unblock_domain_short": "Desbloquear",
|
||||
@@ -295,6 +297,11 @@
|
||||
"column_header.show_settings": "Mostrar ajustes",
|
||||
"column_header.unpin": "Dejar de fijar",
|
||||
"column_search.cancel": "Cancelar",
|
||||
"combobox.close_results": "Cerrar resultados",
|
||||
"combobox.loading": "Cargando",
|
||||
"combobox.no_results_found": "No hay resultados para esta búsqueda",
|
||||
"combobox.open_results": "Abrir resultados",
|
||||
"combobox.results_available": "{count, plural,one {# sugerencia disponible} other {# sugerencias disponibles}}. Utiliza las teclas de flecha arriba y abajo para navegar. Pulsa la tecla Intro para seleccionar.",
|
||||
"community.column_settings.local_only": "Solo local",
|
||||
"community.column_settings.media_only": "Solo multimedia",
|
||||
"community.column_settings.remote_only": "Solo remoto",
|
||||
@@ -462,6 +469,7 @@
|
||||
"empty_column.notification_requests": "¡Todo limpio! No hay nada aquí. Cuando recibas nuevas notificaciones, aparecerán aquí conforme a tu configuración.",
|
||||
"empty_column.notifications": "Aún no tienes ninguna notificación. Cuando otras personas interactúen contigo, aparecerán aquí.",
|
||||
"empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo",
|
||||
"empty_state.no_results": "Sin resultados",
|
||||
"error.no_hashtag_feed_access": "Únete o inicia sesión para ver y seguir esta etiqueta.",
|
||||
"error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.",
|
||||
"error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.",
|
||||
|
||||
@@ -123,6 +123,8 @@
|
||||
"account.share": "Partager le profil de @{name}",
|
||||
"account.show_reblogs": "Afficher les boosts de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
||||
"account.timeline.pinned": "Épinglé",
|
||||
"account.timeline.pinned.view_all": "Voir tous les messages épinglés",
|
||||
"account.unblock": "Débloquer @{name}",
|
||||
"account.unblock_domain": "Débloquer le domaine {domain}",
|
||||
"account.unblock_domain_short": "Débloquer",
|
||||
@@ -295,6 +297,11 @@
|
||||
"column_header.show_settings": "Afficher les paramètres",
|
||||
"column_header.unpin": "Désépingler",
|
||||
"column_search.cancel": "Annuler",
|
||||
"combobox.close_results": "Fermer les résultats",
|
||||
"combobox.loading": "Chargement",
|
||||
"combobox.no_results_found": "Aucun résultat pour cette recherche",
|
||||
"combobox.open_results": "Ouvrir les résultats",
|
||||
"combobox.results_available": "{count, plural, one {# suggestion disponibe} other {# suggestions disponibles}}. Utiliser les touches haut et bas pour naviguer. Appuyer sur Entrée pour sélectionner.",
|
||||
"community.column_settings.local_only": "Local seulement",
|
||||
"community.column_settings.media_only": "Média seulement",
|
||||
"community.column_settings.remote_only": "À distance seulement",
|
||||
@@ -462,6 +469,7 @@
|
||||
"empty_column.notification_requests": "C'est fini ! Il n'y a plus rien ici. Lorsque vous recevez de nouvelles notifications, elles apparaitront ici conformément à vos préférences.",
|
||||
"empty_column.notifications": "Vous n'avez pas encore de notifications. Quand d'autres personnes interagissent avec vous, vous en verrez ici.",
|
||||
"empty_column.public": "Il n’y a rien ici! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public",
|
||||
"empty_state.no_results": "Aucun résultat",
|
||||
"error.no_hashtag_feed_access": "Rejoindre ou se connecter pour voir et suivre cet hashtag.",
|
||||
"error.unexpected_crash.explanation": "En raison d’un bogue dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.",
|
||||
"error.unexpected_crash.explanation_addons": "Cette page n’a pas pu être affichée correctement. Cette erreur est probablement causée par une extension de navigateur ou des outils de traduction automatique.",
|
||||
|
||||
@@ -123,6 +123,8 @@
|
||||
"account.share": "Partager le profil de @{name}",
|
||||
"account.show_reblogs": "Afficher les partages de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
||||
"account.timeline.pinned": "Épinglé",
|
||||
"account.timeline.pinned.view_all": "Voir tous les messages épinglés",
|
||||
"account.unblock": "Débloquer @{name}",
|
||||
"account.unblock_domain": "Débloquer le domaine {domain}",
|
||||
"account.unblock_domain_short": "Débloquer",
|
||||
@@ -295,6 +297,11 @@
|
||||
"column_header.show_settings": "Afficher les paramètres",
|
||||
"column_header.unpin": "Désépingler",
|
||||
"column_search.cancel": "Annuler",
|
||||
"combobox.close_results": "Fermer les résultats",
|
||||
"combobox.loading": "Chargement",
|
||||
"combobox.no_results_found": "Aucun résultat pour cette recherche",
|
||||
"combobox.open_results": "Ouvrir les résultats",
|
||||
"combobox.results_available": "{count, plural, one {# suggestion disponibe} other {# suggestions disponibles}}. Utiliser les touches haut et bas pour naviguer. Appuyer sur Entrée pour sélectionner.",
|
||||
"community.column_settings.local_only": "Local seulement",
|
||||
"community.column_settings.media_only": "Média uniquement",
|
||||
"community.column_settings.remote_only": "Distant seulement",
|
||||
@@ -462,6 +469,7 @@
|
||||
"empty_column.notification_requests": "C'est fini ! Il n'y a plus rien ici. Lorsque vous recevez de nouvelles notifications, elles apparaitront ici conformément à vos préférences.",
|
||||
"empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.",
|
||||
"empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public",
|
||||
"empty_state.no_results": "Aucun résultat",
|
||||
"error.no_hashtag_feed_access": "Rejoindre ou se connecter pour voir et suivre cet hashtag.",
|
||||
"error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.",
|
||||
"error.unexpected_crash.explanation_addons": "Cette page n’a pas pu être affichée correctement. Cette erreur est probablement causée par une extension de navigateur ou des outils de traduction automatique.",
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
"account.badges.domain_blocked": "Letiltott domain",
|
||||
"account.badges.group": "Csoport",
|
||||
"account.badges.muted": "Némítva",
|
||||
"account.badges.muted_until": "Némítva eddig: {until}",
|
||||
"account.block": "@{name} letiltása",
|
||||
"account.block_domain": "Domain letiltása: {domain}",
|
||||
"account.block_short": "Letiltás",
|
||||
@@ -122,6 +123,8 @@
|
||||
"account.share": "@{name} profiljának megosztása",
|
||||
"account.show_reblogs": "@{name} megtolásainak mutatása",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}}",
|
||||
"account.timeline.pinned": "Kitűzve",
|
||||
"account.timeline.pinned.view_all": "Összes kitűzött bejegyzés megtekintése",
|
||||
"account.unblock": "@{name} letiltásának feloldása",
|
||||
"account.unblock_domain": "{domain} domain tiltásának feloldása",
|
||||
"account.unblock_domain_short": "Tiltás feloldása",
|
||||
@@ -236,17 +239,33 @@
|
||||
"collections.collection_description": "Leírás",
|
||||
"collections.collection_name": "Név",
|
||||
"collections.collection_topic": "Téma",
|
||||
"collections.content_warning": "Tartalmi figyelmeztetés",
|
||||
"collections.continue": "Folytatás",
|
||||
"collections.create.accounts_subtitle": "Csak azok a követett fiókok adhatóak hozzá, melyek engedélyezték a felfedezést.",
|
||||
"collections.create.accounts_title": "Kit emelsz ki ebben a gyűjteményben?",
|
||||
"collections.create.basic_details_title": "Alapvető részletek",
|
||||
"collections.create.settings_title": "Beállítások",
|
||||
"collections.create.steps": "{step}. lépés/{total}",
|
||||
"collections.create_a_collection_hint": "Gyűjtemény létrehozása a kedvenc fiókok másoknak való ajánlásához.",
|
||||
"collections.create_collection": "Gyűjtemény létrehozása",
|
||||
"collections.delete_collection": "Gyűjtemény törlése",
|
||||
"collections.description_length_hint": "100 karakteres korlát",
|
||||
"collections.edit_details": "Alapvető részletek szerkesztése",
|
||||
"collections.edit_settings": "Beállítások szerkesztése",
|
||||
"collections.error_loading_collections": "Hiba történt a gyűjtemények betöltése során.",
|
||||
"collections.manage_accounts": "Fiókok kezelése",
|
||||
"collections.manage_accounts_in_collection": "Gyűjteményben szereplő fiókok kezelése",
|
||||
"collections.mark_as_sensitive": "Megjelelölés érzénykenként",
|
||||
"collections.mark_as_sensitive_hint": "Tartalmi figyelmeztetés mögé rejti a gyűjtemény leírását és a fiókokat. A gyűjtemény neve továbbra is látható lesz.",
|
||||
"collections.name_length_hint": "100 karakteres korlát",
|
||||
"collections.new_collection": "Új gyűjtemény",
|
||||
"collections.no_collections_yet": "Még nincsenek gyűjtemények.",
|
||||
"collections.topic_hint": "Egy hashtag hozzáadása segít másoknak abban, hogy megértsék a gyűjtemény fő témáját.",
|
||||
"collections.view_collection": "Gyűjtemény megtekintése",
|
||||
"collections.visibility_public": "Nyilvános",
|
||||
"collections.visibility_title": "Láthatóság",
|
||||
"collections.visibility_unlisted": "Nem listázott",
|
||||
"collections.visibility_unlisted_hint": "A hivatkozással bárki számára látható. A keresési találatokban és ajánlásokban rejtve van.",
|
||||
"column.about": "Névjegy",
|
||||
"column.blocks": "Letiltott felhasználók",
|
||||
"column.bookmarks": "Könyvjelzők",
|
||||
@@ -277,6 +296,11 @@
|
||||
"column_header.show_settings": "Beállítások megjelenítése",
|
||||
"column_header.unpin": "Kitűzés eltávolítása",
|
||||
"column_search.cancel": "Mégse",
|
||||
"combobox.close_results": "Találatok bezárása",
|
||||
"combobox.loading": "Betöltés",
|
||||
"combobox.no_results_found": "Nincs találat ehhez a kereséshez",
|
||||
"combobox.open_results": "Találatok megtekintése",
|
||||
"combobox.results_available": "{count, plural, one {# javaslat} other {# javaslat}} érhető el. A navigációhoz használt a fel és le nyílbillentyűket. A kiválasztáshoz üss Entert.",
|
||||
"community.column_settings.local_only": "Csak helyi",
|
||||
"community.column_settings.media_only": "Csak média",
|
||||
"community.column_settings.remote_only": "Csak távoli",
|
||||
@@ -444,6 +468,7 @@
|
||||
"empty_column.notification_requests": "Minden tiszta! Itt nincs semmi. Ha új értesítéseket kapsz, azok itt jelennek meg a beállításoknak megfelelően.",
|
||||
"empty_column.notifications": "Jelenleg még nincsenek értesítéseid. Ha mások kapcsolatba lépnek veled, ezek itt lesznek láthatóak.",
|
||||
"empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más kiszolgálón levő felhasználókat, hogy megtöltsd.",
|
||||
"empty_state.no_results": "Nincs találat",
|
||||
"error.no_hashtag_feed_access": "Csatlakozz vagy jelentkezz be, hogy megtekintsd és kövesd ezt a hashtaget.",
|
||||
"error.unexpected_crash.explanation": "Egy kód- vagy böngészőkompatibilitási hiba miatt ez az oldal nem jeleníthető meg helyesen.",
|
||||
"error.unexpected_crash.explanation_addons": "Ezt az oldalt nem lehet helyesen megjeleníteni. Ezt a hibát valószínűleg egy böngésző kiegészítő vagy egy automatikus fordító okozza.",
|
||||
|
||||
@@ -9,9 +9,16 @@
|
||||
"about.not_available": "ਇਹ ਜਾਣਕਾਰੀ ਨੂੰ ਇਸ ਸਰਵਰ ਉੱਤੇ ਉਪਲੱਬਧ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।",
|
||||
"about.rules": "ਸਰਵਰ ਨਿਯਮ",
|
||||
"account.account_note_header": "ਨਿੱਜੀ ਨੋਟ",
|
||||
"account.activity": "ਸਰਗਰਮੀ",
|
||||
"account.add_note": "ਕੋਈ ਨਿੱਜੀ ਨੋਟ ਜੋੜੋ",
|
||||
"account.add_or_remove_from_list": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ ਜਾਂ ਹਟਾਓ",
|
||||
"account.badges.admin": "ਪ੍ਰਸ਼ਾਸਕ",
|
||||
"account.badges.blocked": "ਪਾਬੰਦੀਸ਼ੁਦਾ",
|
||||
"account.badges.bot": "ਆਟੋਮੇਟ ਕੀਤਾ",
|
||||
"account.badges.domain_blocked": "ਪਾਬੰਦੀ ਲਾਏ ਡੋਮੇਨ",
|
||||
"account.badges.group": "ਗਰੁੱਪ",
|
||||
"account.badges.muted": "ਮੌਨ ਕੀਤੇ",
|
||||
"account.badges.muted_until": "{until} ਤੱਕ ਮੌਨ ਕੀਤੇ",
|
||||
"account.block": "@{name} ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
|
||||
"account.block_domain": "{domain} ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
|
||||
"account.block_short": "ਪਾਬੰਦੀ",
|
||||
@@ -22,6 +29,7 @@
|
||||
"account.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ @{name}",
|
||||
"account.disable_notifications": "ਜਦੋਂ {name} ਕੋਈ ਪੋਸਟ ਕਰੇ ਤਾਂ ਮੈਨੂੰ ਸੂਚਨਾ ਨਾ ਦਿਓ",
|
||||
"account.domain_blocking": "ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ",
|
||||
"account.edit_note": "ਨਿੱਜੀ ਨੋਟ ਨੂੰ ਸੋਧੋ",
|
||||
"account.edit_profile": "ਪਰੋਫਾਈਲ ਨੂੰ ਸੋਧੋ",
|
||||
"account.edit_profile_short": "ਸੋਧੋ",
|
||||
"account.enable_notifications": "ਜਦੋਂ {name} ਪੋਸਟ ਕਰੇ ਤਾਂ ਮੈਨੂੰ ਸੂਚਨਾ ਦਿਓ",
|
||||
@@ -33,6 +41,12 @@
|
||||
"account.featured.hashtags": "ਹੈਸ਼ਟੈਗ",
|
||||
"account.featured_tags.last_status_at": "{date} ਨੂੰ ਆਖਰੀ ਪੋਸਟ",
|
||||
"account.featured_tags.last_status_never": "ਕੋਈ ਪੋਸਟ ਨਹੀਂ",
|
||||
"account.fields.scroll_next": "ਅਗਲਾ ਵੇਖੋ",
|
||||
"account.fields.scroll_prev": "ਪਿਛਲਾ ਵੇਖੋ",
|
||||
"account.filters.all": "ਸਾਰੀਆਂ ਸਰਗਰਮੀਆਂ",
|
||||
"account.filters.posts_only": "ਪੋਸਟਾਂ",
|
||||
"account.filters.posts_replies": "ਪੋਸਟਾਂ ਅਤੇ ਜਵਾਬ",
|
||||
"account.filters.replies_toggle": "ਜਵਾਬਾਂ ਨੂੰ ਵੇਖੋ",
|
||||
"account.follow": "ਫ਼ਾਲੋ",
|
||||
"account.follow_back": "ਵਾਪਸ ਫਾਲ਼ੋ ਕਰੋ",
|
||||
"account.follow_back_short": "ਵਾਪਸ ਫਾਲ਼ੋ ਕਰੋ",
|
||||
@@ -53,12 +67,31 @@
|
||||
"account.joined_short": "ਜੁਆਇਨ ਕੀਤਾ",
|
||||
"account.media": "ਮੀਡੀਆ",
|
||||
"account.mention": "@{name} ਦਾ ਜ਼ਿਕਰ",
|
||||
"account.menu.block": "ਖਾਤੇ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
|
||||
"account.menu.block_domain": "{domain} ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
|
||||
"account.menu.copied": "ਖਾਤਾ ਲਿੰਕ ਨੂੰ ਕਲਿੱਪਬੋਰਡ ਨੂੰ ਕਾਪੀ ਕੀਤਾ",
|
||||
"account.menu.copy": "ਲਿੰਕ ਨੂੰ ਕਾਪੀ ਕਰੋ",
|
||||
"account.menu.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ",
|
||||
"account.menu.mention": "ਜ਼ਿਕਰ",
|
||||
"account.menu.mute": "ਖਾਤੇ ਨੂੰ ਮੌਨ ਕਰੋ",
|
||||
"account.menu.open_original_page": "{domain} ਉੱਤੇ ਵੇਖੋ",
|
||||
"account.menu.remove_follower": "ਫ਼ਾਲੋਅਰ ਨੂੰ ਹਟਾਓ",
|
||||
"account.menu.report": "ਖਾਤੇ ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ",
|
||||
"account.menu.share": "…ਸਾਂਝਾ ਕਰੋ",
|
||||
"account.menu.unblock": "ਖਾਤੇ ਉੱਤੇ ਪਾਬੰਦੀ ਨੂੰ ਹਟਾਓ",
|
||||
"account.menu.unblock_domain": "{domain} ਤੋਂ ਪਾਬੰਦੀ ਨੂੰ ਹਟਾਓ",
|
||||
"account.mute": "{name} ਨੂੰ ਮੌਨ ਕਰੋ",
|
||||
"account.mute_notifications_short": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਮੌਨ ਕਰੋ",
|
||||
"account.mute_short": "ਮੌਨ ਕਰੋ",
|
||||
"account.muted": "ਮੌਨ ਕੀਤੀਆਂ",
|
||||
"account.mutual": "ਤੁਸੀਂ ਇੱਕ ਦੂਜੇ ਨੂੰ ਫ਼ਾਲੋ ਕਰਦੇ ਹੋ",
|
||||
"account.no_bio": "ਕੋਈ ਵਰਣਨ ਨਹੀਂ ਦਿੱਤਾ।",
|
||||
"account.node_modal.edit_title": "ਨਿੱਜੀ ਨੋਟ ਨੂੰ ਸੋਧੋ",
|
||||
"account.node_modal.field_label": "ਨਿੱਜੀ ਨੋਟ",
|
||||
"account.node_modal.save": "ਸੰਭਾਲੋ",
|
||||
"account.node_modal.title": "ਕੋਈ ਨਿੱਜੀ ਨੋਟ ਜੋੜੋ",
|
||||
"account.note.edit_button": "ਸੋਧੋ",
|
||||
"account.note.title": "ਨਿੱਜੀ ਨੋਟ (ਸਿਰਫ਼ ਤੁਹਾਨੂੰ ਹੀ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ)",
|
||||
"account.open_original_page": "ਅਸਲ ਸਫ਼ੇ ਨੂੰ ਖੋਲ੍ਹੋ",
|
||||
"account.posts": "ਪੋਸਟਾਂ",
|
||||
"account.posts_with_replies": "ਪੋਸਟਾਂ ਅਤੇ ਜਵਾਬ",
|
||||
@@ -67,7 +100,10 @@
|
||||
"account.requested_follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ",
|
||||
"account.requests_to_follow_you": "ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀਆਂ ਬੇਨਤੀਆਂ",
|
||||
"account.share": "{name} ਦਾ ਪਰੋਫ਼ਾਇਲ ਸਾਂਝਾ ਕਰੋ",
|
||||
"account.show_reblogs": "@{name} ਵਲੋਂ ਬੂਸਟ ਨੂੰ ਵੇਖਾਓ",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} ਪੋਸਟ} other {{counter} ਪੋਸਟਾਂ}}",
|
||||
"account.timeline.pinned": "ਟੰਗੇ ਹੋਏ",
|
||||
"account.timeline.pinned.view_all": "ਸਭ ਟੰਗੀਆਂ ਹੋਈਆਂ ਪੋਸਟਾਂ ਨੂੰ ਵੇਖੋ",
|
||||
"account.unblock": "@{name} ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ",
|
||||
"account.unblock_domain": "{domain} ਡੋਮੇਨ ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ",
|
||||
"account.unblock_domain_short": "ਪਾਬੰਦੀ ਹਟਾਓ",
|
||||
@@ -92,6 +128,7 @@
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.close": "ਬੰਦ ਕਰੋ",
|
||||
"annual_report.summary.copy_link": "ਲਿੰਕ ਨੂੰ ਕਾਪੀ ਕਰੋ",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {ਨਵਾਂ ਫ਼ਾਲੋਅਰ} other {ਨਵੇਂ ਫ਼ਾਲੋਅਰ}}",
|
||||
"annual_report.summary.highlighted_post.title": "ਸਭ ਤੋਂ ਵੱਧ ਹਰਮਨਪਿਆਰੀ ਪੋਸਟ",
|
||||
"annual_report.summary.most_used_app.most_used_app": "ਸਭ ਤੋਂ ਵੱਧ ਵਰਤੀ ਐਪ",
|
||||
"annual_report.summary.new_posts.new_posts": "ਨਵੀਆਂ ਪੋਸਟਾਂ",
|
||||
@@ -108,13 +145,29 @@
|
||||
"bundle_column_error.routing.title": "404",
|
||||
"bundle_modal_error.close": "ਬੰਦ ਕਰੋ",
|
||||
"bundle_modal_error.retry": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ",
|
||||
"callout.dismiss": "ਖ਼ਾਰਜ ਕਰੋ",
|
||||
"carousel.current": "<sr>ਸਲਾਈਡ</sr> {current, number} / {max, number}",
|
||||
"carousel.slide": "{max, number} ਵਿੱਚੋਂ {current, number} ਸਲਾਈਡ",
|
||||
"closed_registrations_modal.find_another_server": "ਹੋਰ ਸਰਵਰ ਲੱਭੋ",
|
||||
"closed_registrations_modal.title": "Mastodon ਲਈ ਸਾਈਨ ਅੱਪ ਕਰੋ",
|
||||
"collections.collection_description": "ਵਰਣਨ",
|
||||
"collections.collection_name": "ਨਾਂ",
|
||||
"collections.collection_topic": "ਵਿਸ਼ਾ",
|
||||
"collections.content_warning": "ਸਮੱਗਰੀ ਬਾਰੇ ਚੇਤਾਵਨੀ",
|
||||
"collections.continue": "ਜਾਰੀ ਰੱਖੋ",
|
||||
"collections.create.basic_details_title": "ਮੁ਼ੱਢਲੇ ਵੇਰਵੇ",
|
||||
"collections.create.settings_title": "ਸੈਟਿੰਗਾਂ",
|
||||
"collections.create.steps": "ਪੜਾਅ {step}/{total}",
|
||||
"collections.edit_details": "ਮੁੱਢਲੇ ਵੇਰਵਿਆਂ ਨੂੰ ਸੋਧੋ",
|
||||
"collections.edit_settings": "ਸੈਟਿੰਗਾਂ ਨੂੰ ਸੋਧੋ",
|
||||
"collections.name_length_hint": "100 ਅੱਖਰਾਂ ਦੀ ਹੱਦ",
|
||||
"collections.view_collection": "ਭੰਡਾਰ ਨੂੰ ਵੇਖੋ",
|
||||
"collections.visibility_public": "ਜਨਤਕ",
|
||||
"collections.visibility_title": "ਦਿੱਖ",
|
||||
"column.about": "ਸਾਡੇ ਬਾਰੇ",
|
||||
"column.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ",
|
||||
"column.bookmarks": "ਬੁੱਕਮਾਰਕ",
|
||||
"column.collections": "ਮੇਰਾ ਭੰਡਾਰ",
|
||||
"column.community": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ",
|
||||
"column.create_list": "ਸੂਚੀ ਬਣਾਓ",
|
||||
"column.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ",
|
||||
@@ -139,6 +192,9 @@
|
||||
"column_header.show_settings": "ਸੈਟਿੰਗਾਂ ਦਿਖਾਓ",
|
||||
"column_header.unpin": "ਲਾਹੋ",
|
||||
"column_search.cancel": "ਰੱਦ ਕਰੋ",
|
||||
"combobox.loading": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ",
|
||||
"combobox.no_results_found": "ਇਸ ਖੋਜ ਲਈ ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਹਨ",
|
||||
"combobox.open_results": "ਨਤੀਜਿਆਂ ਨੂੰ ਵੇਖੋ",
|
||||
"community.column_settings.local_only": "ਸਿਰਫ ਲੋਕਲ ਹੀ",
|
||||
"community.column_settings.media_only": "ਸਿਰਫ ਮੀਡੀਆ ਹੀ",
|
||||
"community.column_settings.remote_only": "ਸਿਰਫ਼ ਰਿਮੋਟ ਹੀ",
|
||||
@@ -170,6 +226,9 @@
|
||||
"confirmations.delete.confirm": "ਹਟਾਓ",
|
||||
"confirmations.delete.message": "ਕੀ ਤੁਸੀਂ ਇਹ ਪੋਸਟ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
||||
"confirmations.delete.title": "ਪੋਸਟ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?",
|
||||
"confirmations.delete_collection.confirm": "ਹਟਾਓ",
|
||||
"confirmations.delete_collection.message": "ਇਸ ਕਾਰਵਾਈ ਨੂੰ ਵਾਪਸ ਨਹੀਂ ਪਰਤਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।",
|
||||
"confirmations.delete_collection.title": "\"{name}\" ਨੂੰ ਹਟਾਉਣਾ ਹੈ?",
|
||||
"confirmations.delete_list.confirm": "ਹਟਾਓ",
|
||||
"confirmations.delete_list.message": "ਕੀ ਤੁਸੀਂ ਇਸ ਸੂਚੀ ਨੂੰ ਪੱਕੇ ਤੌਰ ਉੱਤੇ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
||||
"confirmations.delete_list.title": "ਸੂਚੀ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?",
|
||||
@@ -187,6 +246,7 @@
|
||||
"confirmations.missing_alt_text.title": "ਬਦਲਵੀ ਲਿਖਤ ਜੋੜਨੀ ਹੈ?",
|
||||
"confirmations.mute.confirm": "ਮੌਨ ਕਰੋ",
|
||||
"confirmations.private_quote_notify.cancel": "ਸੋਧ ਕਰਨ ਉੱਤੇ ਵਾਪਸ ਜਾਓ",
|
||||
"confirmations.private_quote_notify.confirm": "ਜਨਤਕ ਪੋਸਟ",
|
||||
"confirmations.private_quote_notify.do_not_show_again": "ਮੈਨੂੰ ਇਹ ਸੁਨੇਹਾ ਫੇਰ ਨਾ ਦਿਖਾਓ",
|
||||
"confirmations.quiet_post_quote_info.dismiss": "ਮੈਨੂੰ ਮੁੜ ਕੇ ਯਾਦ ਨਾ ਕਰਵਾਓ",
|
||||
"confirmations.quiet_post_quote_info.got_it": "ਸਮਝ ਗਏ",
|
||||
@@ -258,6 +318,8 @@
|
||||
"explore.trending_statuses": "ਪੋਸਟਾਂ",
|
||||
"explore.trending_tags": "ਹੈਸ਼ਟੈਗ",
|
||||
"featured_carousel.header": "{count, plural, one {ਟੰਗੀ ਹੋਈ ਪੋਸਟ} other {ਟੰਗੀਆਂ ਹੋਈਆਂ ਪੋਸਟਾਂ}}",
|
||||
"featured_carousel.slide": "{max, number} ਵਿੱਚੋਂ {current, number} ਪੋਸਟ",
|
||||
"featured_tags.more_items": "+{count}",
|
||||
"filter_modal.added.expired_title": "ਫਿਲਟਰ ਦੀ ਮਿਆਦ ਪੁੱਗੀ!",
|
||||
"filter_modal.added.review_and_configure_title": "ਫਿਲਟਰ ਸੈਟਿੰਗਾਂ",
|
||||
"filter_modal.added.settings_link": "ਸੈਟਿੰਗਾਂ ਸਫ਼ਾ",
|
||||
@@ -291,6 +353,7 @@
|
||||
"footer.source_code": "ਸਰੋਤ ਕੋਡ ਵੇਖੋ",
|
||||
"footer.status": "ਹਾਲਤ",
|
||||
"footer.terms_of_service": "ਸੇਵਾ ਦੀਆਂ ਸ਼ਰਤਾਂ",
|
||||
"form_field.optional": "(ਚੋਣਵਾਂ)",
|
||||
"generic.saved": "ਸਾਂਭੀ ਗਈ",
|
||||
"getting_started.heading": "ਸ਼ੁਰੂ ਕਰੀਏ",
|
||||
"hashtag.browse": "#{hashtag} ਵਿੱਚ ਪੋਸਟਾਂ ਨੂੰ ਵੇਖੋ",
|
||||
@@ -303,10 +366,13 @@
|
||||
"hashtag.column_settings.tag_mode.any": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ",
|
||||
"hashtag.column_settings.tag_mode.none": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਨਹੀਂ",
|
||||
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} ਹਿੱਸੇਦਾਰ} other {{counter} ਹਿੱਸੇਦਾਰ}}",
|
||||
"hashtag.feature": "ਪਰੋਫਾਇਲ ਉੱਤੇ ਫ਼ੀਚਰ",
|
||||
"hashtag.follow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ",
|
||||
"hashtag.mute": "#{hashtag} ਨੂੰ ਮੌਨ ਕਰੋ",
|
||||
"hashtag.unfeature": "ਪਰੋਫਾਇਲ ਉੱਤੇ ਫ਼ੀਚਰ ਨਾ ਕਰੋ",
|
||||
"hashtag.unfollow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ",
|
||||
"hashtags.and_other": "…ਅਤੇ {count, plural, one {}other {# ਹੋਰ}}",
|
||||
"hints.profiles.see_more_followers": "{domain} ਉੱਤੇ ਹੋਰ ਫ਼ਾਲੋਅਰ ਵੇਖੋ",
|
||||
"hints.profiles.see_more_follows": "{domain} ਉੱਤੇ ਹੋਰ ਫ਼ਾਲੋ ਨੂੰ ਵੇਖੋ",
|
||||
"hints.profiles.see_more_posts": "{domain} ਉੱਤੇ ਹੋਰ ਪੋਸਟਾਂ ਨੂੰ ਵੇਖੋ",
|
||||
@@ -421,6 +487,7 @@
|
||||
"navigation_bar.search_trends": "ਖੋਜ / ਰੁਝਾਨ",
|
||||
"not_signed_in_indicator.not_signed_in": "ਇਹ ਸਰੋਤ ਵਰਤਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।",
|
||||
"notification.admin.sign_up": "{name} ਨੇ ਸਾਈਨ ਅੱਪ ਕੀਤਾ",
|
||||
"notification.annual_report.view": "#Wrapstodon ਨੂੰ ਵੇਖੋ",
|
||||
"notification.favourite": "{name} ਨੇ ਤੁਹਾਡੀ ਪੋਸਟ ਨੂੰ ਪਸੰਦ ਕੀਤਾ",
|
||||
"notification.favourite_pm": "{name} ਨੇ ਤੁਹਾਡੇ ਨਿੱਜੀ ਜ਼ਿਕਰ ਨੂੰ ਪਸੰਦ ਕੀਤਾ",
|
||||
"notification.follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕੀਤਾ",
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
"account.badges.domain_blocked": "Domínio bloqueado",
|
||||
"account.badges.group": "Grupo",
|
||||
"account.badges.muted": "Silenciado",
|
||||
"account.badges.muted_until": "Silenciado até {until}",
|
||||
"account.block": "Bloquear @{name}",
|
||||
"account.block_domain": "Bloquear domínio {domain}",
|
||||
"account.block_short": "Bloquear",
|
||||
@@ -122,6 +123,8 @@
|
||||
"account.share": "Partilhar o perfil @{name}",
|
||||
"account.show_reblogs": "Mostrar partilhas de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
|
||||
"account.timeline.pinned": "Fixado",
|
||||
"account.timeline.pinned.view_all": "Ver todos as publicações fixadas",
|
||||
"account.unblock": "Desbloquear @{name}",
|
||||
"account.unblock_domain": "Desbloquear o domínio {domain}",
|
||||
"account.unblock_domain_short": "Desbloquear",
|
||||
@@ -236,17 +239,34 @@
|
||||
"collections.collection_description": "Descrição",
|
||||
"collections.collection_name": "Nome",
|
||||
"collections.collection_topic": "Tópico",
|
||||
"collections.content_warning": "Aviso de conteúdo",
|
||||
"collections.continue": "Continuar",
|
||||
"collections.create.accounts_subtitle": "Apenas as contas que segue e que optaram por ser descobertas podem ser adicionadas.",
|
||||
"collections.create.accounts_title": "Quem vai destacar nesta coleção?",
|
||||
"collections.create.basic_details_title": "Informações básicas",
|
||||
"collections.create.settings_title": "Definições",
|
||||
"collections.create.steps": "Passo {step}/{total}",
|
||||
"collections.create_a_collection_hint": "Crie uma coleção para recomendar ou partilhar as suas contas favoritas com outras pessoas.",
|
||||
"collections.create_collection": "Criar coleção",
|
||||
"collections.delete_collection": "Eliminar coleção",
|
||||
"collections.description_length_hint": "Limite de 100 caracteres",
|
||||
"collections.edit_details": "Editar informações básicas",
|
||||
"collections.edit_settings": "Editar definições",
|
||||
"collections.error_loading_collections": "Ocorreu um erro ao tentar carregar as suas coleções.",
|
||||
"collections.manage_accounts": "Gerir contas",
|
||||
"collections.manage_accounts_in_collection": "Gerir contas nesta coleção",
|
||||
"collections.mark_as_sensitive": "Marcar como sensível",
|
||||
"collections.mark_as_sensitive_hint": "Oculta a descrição e as contas da coleção por trás de um aviso de conteúdo. O nome da coleção ainda estará visível.",
|
||||
"collections.name_length_hint": "Limite de 100 caracteres",
|
||||
"collections.new_collection": "Nova coleção",
|
||||
"collections.no_collections_yet": "Ainda não existem coleções.",
|
||||
"collections.topic_hint": "Adicione uma etiqueta para ajudar outros a entender o tópico principal desta coleção.",
|
||||
"collections.view_collection": "Ver coleções",
|
||||
"collections.visibility_public": "Pública",
|
||||
"collections.visibility_public_hint": "Visível nos resultados de pesquisa e outras áreas onde aparecem recomendações.",
|
||||
"collections.visibility_title": "Visibilidade",
|
||||
"collections.visibility_unlisted": "Não listada",
|
||||
"collections.visibility_unlisted_hint": "Visível para qualquer pessoa com uma hiperligação. Não aparece nos resultados de pesquisa e recomendações.",
|
||||
"column.about": "Sobre",
|
||||
"column.blocks": "Utilizadores bloqueados",
|
||||
"column.bookmarks": "Marcadores",
|
||||
@@ -277,6 +297,11 @@
|
||||
"column_header.show_settings": "Mostrar configurações",
|
||||
"column_header.unpin": "Desafixar",
|
||||
"column_search.cancel": "Cancelar",
|
||||
"combobox.close_results": "Fechar resultados",
|
||||
"combobox.loading": "A carregar",
|
||||
"combobox.no_results_found": "Nenhum resultado para esta pesquisa",
|
||||
"combobox.open_results": "Ver resultados",
|
||||
"combobox.results_available": "{count, plural, one {# sugestão disponível} other {# sugestões disponíveis}}. Utilize as setas para cima e para baixo para navegar. Pressione a tecla Enter para selecionar.",
|
||||
"community.column_settings.local_only": "Apenas local",
|
||||
"community.column_settings.media_only": "Apenas multimédia",
|
||||
"community.column_settings.remote_only": "Apenas remoto",
|
||||
@@ -444,6 +469,7 @@
|
||||
"empty_column.notification_requests": "Tudo limpo! Não há nada aqui. Quando receberes novas notificações, elas aparecerão aqui conforme as tuas configurações.",
|
||||
"empty_column.notifications": "Ainda não tens quaisquer notificações. Quando outras pessoas interagirem contigo, verás isso aqui.",
|
||||
"empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos",
|
||||
"empty_state.no_results": "Sem resultados",
|
||||
"error.no_hashtag_feed_access": "Inscreva-se ou inicie sessão para ver e seguir esta etiqueta.",
|
||||
"error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a um problema de compatibilidade do navegador, esta página não pode ser apresentada corretamente.",
|
||||
"error.unexpected_crash.explanation_addons": "Esta página não pode ser mostrada corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.",
|
||||
|
||||
@@ -123,6 +123,8 @@
|
||||
"account.share": "@{name} adlı kişinin profilini paylaş",
|
||||
"account.show_reblogs": "@{name} kişisinin yeniden paylaşımlarını göster",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} gönderi} other {{counter} gönderi}}",
|
||||
"account.timeline.pinned": "Sabitlendi",
|
||||
"account.timeline.pinned.view_all": "Tüm sabitlenmiş gönderileri görüntüle",
|
||||
"account.unblock": "@{name} adlı kişinin engelini kaldır",
|
||||
"account.unblock_domain": "{domain} alan adının engelini kaldır",
|
||||
"account.unblock_domain_short": "Engeli kaldır",
|
||||
@@ -295,6 +297,11 @@
|
||||
"column_header.show_settings": "Ayarları göster",
|
||||
"column_header.unpin": "Sabitlemeyi kaldır",
|
||||
"column_search.cancel": "İptal",
|
||||
"combobox.close_results": "Sonuçları kapat",
|
||||
"combobox.loading": "Yükleniyor",
|
||||
"combobox.no_results_found": "Bu arama için hiçbir sonuç bulunamadı",
|
||||
"combobox.open_results": "Sonuçları aç",
|
||||
"combobox.results_available": "{count, plural, one {# öneri} other {# öneri}} var. Önerileri görmek için yukarı ve aşağı ok tuşlarını kullanın. Seçmek için Enter tuşuna basın.",
|
||||
"community.column_settings.local_only": "Sadece yerel",
|
||||
"community.column_settings.media_only": "Sadece medya",
|
||||
"community.column_settings.remote_only": "Sadece uzak",
|
||||
@@ -462,6 +469,7 @@
|
||||
"empty_column.notification_requests": "Hepsi tamam! Burada yeni bir şey yok. Yeni bildirim aldığınızda, ayarlarınıza göre burada görüntülenecekler.",
|
||||
"empty_column.notifications": "Henüz bildiriminiz yok. Sohbete başlamak için başkalarıyla etkileşim kurun.",
|
||||
"empty_column.public": "Burada hiçbir şey yok! Herkese açık bir şeyler yazın veya burayı doldurmak için diğer sunuculardaki kullanıcıları takip edin",
|
||||
"empty_state.no_results": "Sonuç yok",
|
||||
"error.no_hashtag_feed_access": "Bu etiketi görüntülemek ve takip etmek için katılın veya giriş yapın.",
|
||||
"error.unexpected_crash.explanation": "Bizim kodumuzdaki bir hatadan ya da tarayıcı uyumluluk sorunundan dolayı, bu sayfa düzgün görüntülenemedi.",
|
||||
"error.unexpected_crash.explanation_addons": "Bu sayfa doğru görüntülenemedi. Bu hata büyük olasılıkla bir tarayıcı eklentisinden veya otomatik çeviri araçlarından kaynaklanır.",
|
||||
|
||||
@@ -441,7 +441,7 @@
|
||||
"interaction_modal.on_another_server": "На іншому сервері",
|
||||
"interaction_modal.on_this_server": "На цьому сервері",
|
||||
"interaction_modal.title": "Увійдіть, щоб продовжити",
|
||||
"interaction_modal.username_prompt": "Наприклад, %{example}",
|
||||
"interaction_modal.username_prompt": "Наприклад, {example}",
|
||||
"intervals.full.days": "{number, plural, one {# день} few {# дні} other {# днів}}",
|
||||
"intervals.full.hours": "{number, plural, one {# година} few {# години} other {# годин}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# хвилина} few {# хвилини} other {# хвилин}}",
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ActivityPub::UpdateFeaturedCollectionSerializer < ActivityPub::Serializer
|
||||
attributes :id, :type, :actor, :to
|
||||
|
||||
has_one :object, serializer: ActivityPub::FeaturedCollectionSerializer
|
||||
|
||||
def id
|
||||
[ActivityPub::TagManager.instance.uri_for(object), '#updates/', object.updated_at.to_i].join
|
||||
end
|
||||
|
||||
def type
|
||||
'Update'
|
||||
end
|
||||
|
||||
def actor
|
||||
ActivityPub::TagManager.instance.uri_for(object.account)
|
||||
end
|
||||
|
||||
def to
|
||||
[ActivityPub::TagManager::COLLECTIONS[:public]]
|
||||
end
|
||||
end
|
||||
28
app/services/update_collection_service.rb
Normal file
28
app/services/update_collection_service.rb
Normal file
@@ -0,0 +1,28 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class UpdateCollectionService
|
||||
UPDATEABLE_PARAMS = %w(name description language sensitive discoverable tag_id).freeze
|
||||
|
||||
def call(collection, params)
|
||||
@collection = collection
|
||||
@collection.update!(params)
|
||||
|
||||
distribute_update_activity if Mastodon::Feature.collections_federation_enabled?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def distribute_update_activity
|
||||
return unless relevant_attributes_changed?
|
||||
|
||||
ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account.id)
|
||||
end
|
||||
|
||||
def activity_json
|
||||
ActiveModelSerializers::SerializableResource.new(@collection, serializer: ActivityPub::UpdateFeaturedCollectionSerializer, adapter: ActivityPub::Adapter).to_json
|
||||
end
|
||||
|
||||
def relevant_attributes_changed?
|
||||
(@collection.saved_changes.keys & UPDATEABLE_PARAMS).any?
|
||||
end
|
||||
end
|
||||
@@ -245,7 +245,7 @@ el:
|
||||
update_user_role: Ενημέρωση ρόλου
|
||||
update_username_block: Ενημέρωση Κανόνα Ονόματος Χρήστη
|
||||
actions:
|
||||
approve_appeal_html: Ο/Η %{name} ενέκρινε την ένσταση της απόφασης των συντονιστών από %{target}
|
||||
approve_appeal_html: Ο/Η %{name} ενέκρινε την έφεση της απόφασης των συντονιστών από %{target}
|
||||
approve_user_html: Ο/Η %{name} ενέκρινε την εγγραφή του χρήστη %{target}
|
||||
assigned_to_self_report_html: Ο/Η %{name} ανάθεσε την αναφορά %{target} στον εαυτό του/της
|
||||
change_email_user_html: Ο χρήστης %{name} άλλαξε τη διεύθυνση email του χρήστη %{target}
|
||||
@@ -289,7 +289,7 @@ el:
|
||||
memorialize_account_html: O/H %{name} μετέτρεψε τον λογαριασμό του %{target} σε σελίδα εις μνήμην
|
||||
promote_user_html: Ο/Η %{name} προβίβασε το χρήστη %{target}
|
||||
publish_terms_of_service_html: Ο χρήστης %{name} δημοσίευσε ενημερώσεις για τους όρους της υπηρεσίας
|
||||
reject_appeal_html: Ο/Η %{name} απέρριψε την ένσταση της απόφασης των συντονιστών από %{target}
|
||||
reject_appeal_html: Ο/Η %{name} απέρριψε την έφεση της απόφασης των συντονιστών από %{target}
|
||||
reject_user_html: Ο/Η %{name} απέρριψε την εγγραφή του χρήστη %{target}
|
||||
remove_avatar_user_html: Ο/Η %{name} αφαίρεσε το άβαταρ του/της %{target}
|
||||
reopen_report_html: Ο/Η %{name} ξανάνοιξε την αναφορά %{target}
|
||||
@@ -403,7 +403,7 @@ el:
|
||||
website: Ιστοσελίδα
|
||||
disputes:
|
||||
appeals:
|
||||
empty: Καμία ένσταση.
|
||||
empty: Δε βρέθηκαν εφέσεις.
|
||||
title: Εφέσεις
|
||||
domain_allows:
|
||||
add_new: Έγκριση τομέα
|
||||
@@ -1166,7 +1166,7 @@ el:
|
||||
mark_statuses_as_sensitive: να επισημάνουν τις αναρτήσεις τους ως ευαίσθητες
|
||||
none: μια προειδοποίηση
|
||||
sensitive: να επισημάνουν τον λογαριασμό του ως ευαίσθητο
|
||||
silence: να περιορίσουν το λογαριασμό του
|
||||
silence: να περιορίσουν τον λογαριασμό του
|
||||
suspend: να αναστείλουν τον λογαριασμό του
|
||||
body: 'Ο/Η %{target} κάνει έφεση στην απόφαση συντονισμού που έγινε από τον/την %{action_taken_by} στις %{date}, η οποία ήταν %{type}. Έγραψαν:'
|
||||
next_steps: Μπορείς να εγκρίνεις την έφεση για να αναιρέσεις την απόφαση της ομάδας συντονισμού ή να την αγνοήσεις.
|
||||
@@ -2095,7 +2095,7 @@ el:
|
||||
title: Σημαντική ενημέρωση
|
||||
warning:
|
||||
appeal: Υποβολή έφεσης
|
||||
appeal_description: Αν πιστεύεις ότι έγινε λάθος, μπορείς να υποβάλεις μια αίτηση στο προσωπικό του %{instance}.
|
||||
appeal_description: Αν πιστεύεις ότι έγινε λάθος, μπορείς να υποβάλεις μια έφεση στο προσωπικό του %{instance}.
|
||||
categories:
|
||||
spam: Ανεπιθύμητο
|
||||
violation: Το περιεχόμενο παραβιάζει τις ακόλουθες οδηγίες κοινότητας
|
||||
|
||||
@@ -12,6 +12,9 @@ es:
|
||||
followers:
|
||||
one: Seguidor
|
||||
other: Seguidores
|
||||
following:
|
||||
one: Siguiendo
|
||||
other: Siguiendo
|
||||
instance_actor_flash: Esta cuenta es un actor virtual utilizado para representar al propio servidor y no a ningún usuario individual. Se utiliza con fines de federación y no debe suspenderse.
|
||||
last_active: última conexión
|
||||
link_verified_on: La propiedad de este vínculo fue verificada el %{date}
|
||||
@@ -1999,9 +2002,9 @@ es:
|
||||
'63113904': 2 años
|
||||
'7889238': 3 meses
|
||||
min_age_label: Umbral de tiempo
|
||||
min_favs: Mantener mensajes con un número de favoritos mayor que
|
||||
min_favs: Mantener publicaciones con un número de favoritos de al menos
|
||||
min_favs_hint: No borra ninguna de las publicaciones que hayan recibido al menos esta cantidad de favoritos. Deja en blanco para eliminar publicaciones sin importar el número de favoritos
|
||||
min_reblogs: Mantener publicaciones reblogueadas más de
|
||||
min_reblogs: Mantener publicaciones impulsadas al menos
|
||||
min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido impulsadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de impulsos
|
||||
stream_entries:
|
||||
sensitive_content: Contenido sensible
|
||||
|
||||
@@ -12,6 +12,9 @@ hu:
|
||||
followers:
|
||||
one: Követő
|
||||
other: Követő
|
||||
following:
|
||||
one: Követve
|
||||
other: Követve
|
||||
instance_actor_flash: Ez a fiók virtuális, magát a kiszolgálót reprezentálja, nem pedig konkrét felhasználót. Föderációs célokra szolgál, nem szabad tehát felfüggeszteni.
|
||||
last_active: utoljára aktív
|
||||
link_verified_on: 'A hivatkozás tulajdonosa ekkor volt ellenőrizve: %{date}'
|
||||
|
||||
@@ -12,6 +12,9 @@ nl:
|
||||
followers:
|
||||
one: Volger
|
||||
other: Volgers
|
||||
following:
|
||||
one: Volgend
|
||||
other: Volgend
|
||||
instance_actor_flash: Dit account is een 'virtual actor' waarmee de server zichzelf vertegenwoordigt en is dus geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden opgeschort.
|
||||
last_active: laatst actief
|
||||
link_verified_on: Eigendom van deze link is gecontroleerd op %{date}
|
||||
|
||||
@@ -12,6 +12,9 @@ pt-PT:
|
||||
followers:
|
||||
one: Seguidor
|
||||
other: Seguidores
|
||||
following:
|
||||
one: A seguir
|
||||
other: A seguir
|
||||
instance_actor_flash: Esta conta é um ator virtual utilizado para representar o servidor em si e não um utilizador individual. É utilizada para efeitos de federação e não deve ser suspensa.
|
||||
last_active: última atividade
|
||||
link_verified_on: A posse desta hiperligação foi verificada em %{date}
|
||||
|
||||
@@ -5,6 +5,10 @@ const config = {
|
||||
'*.{css,scss}': 'stylelint --fix',
|
||||
'*.haml': 'bin/haml-lint -a',
|
||||
'**/*.ts?(x)': () => 'tsc -p tsconfig.json --noEmit',
|
||||
'app/javascript/**/*.{js,jsx,ts,tsx}': () => [
|
||||
`yarn i18n:extract`,
|
||||
'git diff --exit-code app/javascript/mastodon/locales/en.json',
|
||||
],
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe ActivityPub::UpdateFeaturedCollectionSerializer do
|
||||
subject { serialized_record_json(collection, described_class, adapter: ActivityPub::Adapter) }
|
||||
|
||||
let(:tag_manager) { ActivityPub::TagManager.instance }
|
||||
let(:collection) { Fabricate(:collection) }
|
||||
|
||||
it 'serializes to the expected json' do
|
||||
expect(subject).to include({
|
||||
'id' => "#{tag_manager.uri_for(collection)}#updates/#{collection.updated_at.to_i}",
|
||||
'type' => 'Update',
|
||||
'actor' => tag_manager.uri_for(collection.account),
|
||||
'to' => ['https://www.w3.org/ns/activitystreams#Public'],
|
||||
'object' => a_hash_including({
|
||||
'id' => tag_manager.uri_for(collection),
|
||||
'type' => 'FeaturedCollection',
|
||||
}),
|
||||
})
|
||||
|
||||
expect(subject).to_not have_key('published')
|
||||
expect(subject).to_not have_key('cc')
|
||||
expect(subject).to_not have_key('target')
|
||||
end
|
||||
end
|
||||
43
spec/services/update_collection_service_spec.rb
Normal file
43
spec/services/update_collection_service_spec.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe UpdateCollectionService do
|
||||
subject { described_class.new }
|
||||
|
||||
let(:collection) { Fabricate(:collection) }
|
||||
|
||||
describe '#call' do
|
||||
context 'when given valid parameters' do
|
||||
it 'updates the collection' do
|
||||
subject.call(collection, { name: 'Newly updated name' })
|
||||
|
||||
expect(collection.name).to eq 'Newly updated name'
|
||||
end
|
||||
|
||||
context 'when something actually changed' do
|
||||
it 'federates an `Update` activity', feature: :collections_federation do
|
||||
subject.call(collection, { name: 'updated' })
|
||||
|
||||
expect(ActivityPub::AccountRawDistributionWorker).to have_enqueued_sidekiq_job
|
||||
end
|
||||
end
|
||||
|
||||
context 'when nothing changed' do
|
||||
it 'does not federate an activity', feature: :collections_federation do
|
||||
subject.call(collection, { name: collection.name })
|
||||
|
||||
expect(ActivityPub::AccountRawDistributionWorker).to_not have_enqueued_sidekiq_job
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when given invalid parameters' do
|
||||
it 'raises an exception' do
|
||||
expect do
|
||||
subject.call(collection, { name: '' })
|
||||
end.to raise_error(ActiveRecord::RecordInvalid)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -3,75 +3,95 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe EmailMxValidator do
|
||||
describe '#validate' do
|
||||
let(:user) { instance_double(User, email: 'foo@example.com', sign_up_ip: '1.2.3.4', errors: instance_double(ActiveModel::Errors, add: nil)) }
|
||||
let(:resolv_dns_double) { instance_double(Resolv::DNS) }
|
||||
let(:user) { Fabricate.build :user, email: }
|
||||
let(:email) { 'foo@example.com' }
|
||||
let(:resolv_dns_double) { instance_double(Resolv::DNS) }
|
||||
|
||||
context 'with an e-mail domain that is explicitly allowed' do
|
||||
around do |block|
|
||||
tmp = Rails.configuration.x.email_domains_allowlist
|
||||
Rails.configuration.x.email_domains_allowlist = 'example.com'
|
||||
block.call
|
||||
Rails.configuration.x.email_domains_allowlist = tmp
|
||||
end
|
||||
context 'with an e-mail domain that is explicitly allowed' do
|
||||
around do |example|
|
||||
original = Rails.configuration.x.email_domains_allowlist
|
||||
Rails.configuration.x.email_domains_allowlist = 'example.com'
|
||||
example.run
|
||||
Rails.configuration.x.email_domains_allowlist = original
|
||||
end
|
||||
|
||||
it 'does not add errors if there are no DNS records' do
|
||||
configure_resolver('example.com')
|
||||
context 'when there are not DNS records' do
|
||||
before { configure_resolver('example.com') }
|
||||
|
||||
it 'does not add errors to record' do
|
||||
subject.validate(user)
|
||||
expect(user.errors).to_not have_received(:add)
|
||||
expect(user.errors).to be_empty
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it 'adds no error if there are DNS records for the e-mail domain' do
|
||||
configure_resolver('example.com', a: resolv_double_a('192.0.2.42'))
|
||||
context 'when there are DNS records for the domain' do
|
||||
before { configure_resolver('example.com', a: resolv_double_a('192.0.2.42')) }
|
||||
|
||||
it 'does not add errors to record' do
|
||||
subject.validate(user)
|
||||
expect(user.errors).to_not have_received(:add)
|
||||
expect(user.errors).to be_empty
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the TagManager fails to normalize the domain' do
|
||||
before do
|
||||
allow(TagManager).to receive(:instance).and_return(tag_manage_double)
|
||||
allow(tag_manage_double).to receive(:normalize_domain).with('example.com').and_raise(Addressable::URI::InvalidURIError)
|
||||
end
|
||||
|
||||
it 'adds an error if the TagManager fails to normalize domain' do
|
||||
double = instance_double(TagManager)
|
||||
allow(TagManager).to receive(:instance).and_return(double)
|
||||
allow(double).to receive(:normalize_domain).with('example.com').and_raise(Addressable::URI::InvalidURIError)
|
||||
let(:tag_manage_double) { instance_double(TagManager) }
|
||||
|
||||
user = instance_double(User, email: 'foo@example.com', errors: instance_double(ActiveModel::Errors, add: nil))
|
||||
it 'adds errors to record' do
|
||||
subject.validate(user)
|
||||
expect(user.errors).to have_received(:add)
|
||||
expect(user.errors).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
it 'adds an error if the domain email portion is blank' do
|
||||
user = instance_double(User, email: 'foo@', errors: instance_double(ActiveModel::Errors, add: nil))
|
||||
context 'when the email portion is blank' do
|
||||
let(:email) { 'foo@' }
|
||||
|
||||
it 'adds errors to record' do
|
||||
subject.validate(user)
|
||||
expect(user.errors).to have_received(:add)
|
||||
expect(user.errors).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
it 'adds an error if the email domain name contains empty labels' do
|
||||
configure_resolver('example..com', a: resolv_double_a('192.0.2.42'))
|
||||
context 'when the email domain contains empty labels' do
|
||||
let(:email) { 'foo@example..com' }
|
||||
|
||||
user = instance_double(User, email: 'foo@example..com', sign_up_ip: '1.2.3.4', errors: instance_double(ActiveModel::Errors, add: nil))
|
||||
before { configure_resolver('example..com', a: resolv_double_a('192.0.2.42')) }
|
||||
|
||||
it 'adds errors to record' do
|
||||
subject.validate(user)
|
||||
expect(user.errors).to have_received(:add)
|
||||
expect(user.errors).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
it 'adds an error if there are no DNS records for the e-mail domain' do
|
||||
configure_resolver('example.com')
|
||||
context 'when there are no DNS records for the email domain' do
|
||||
before { configure_resolver('example.com') }
|
||||
|
||||
it 'adds errors to record' do
|
||||
subject.validate(user)
|
||||
expect(user.errors).to have_received(:add)
|
||||
expect(user.errors).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
it 'adds an error if a MX record does not lead to an IP' do
|
||||
context 'when MX record does not lead to an IP' do
|
||||
before do
|
||||
configure_resolver('example.com', mx: resolv_double_mx('mail.example.com'))
|
||||
configure_resolver('mail.example.com')
|
||||
|
||||
subject.validate(user)
|
||||
expect(user.errors).to have_received(:add)
|
||||
end
|
||||
|
||||
it 'adds an error if the MX record has an email domain block' do
|
||||
EmailDomainBlock.create!(domain: 'mail.example.com')
|
||||
it 'adds errors to record' do
|
||||
subject.validate(user)
|
||||
expect(user.errors).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the MX record has an email domain block' do
|
||||
before do
|
||||
Fabricate :email_domain_block, domain: 'mail.example.com'
|
||||
configure_resolver(
|
||||
'example.com',
|
||||
mx: resolv_double_mx('mail.example.com')
|
||||
@@ -81,12 +101,16 @@ RSpec.describe EmailMxValidator do
|
||||
a: instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5'),
|
||||
aaaa: instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')
|
||||
)
|
||||
end
|
||||
|
||||
it 'adds errors to record' do
|
||||
subject.validate(user)
|
||||
expect(user.errors).to have_received(:add)
|
||||
expect(user.errors).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def configure_resolver(domain, options = {})
|
||||
allow(resolv_dns_double)
|
||||
.to receive(:getresources)
|
||||
|
||||
32
yarn.lock
32
yarn.lock
@@ -5536,13 +5536,13 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"axios@npm:^1.4.0":
|
||||
version: 1.13.4
|
||||
resolution: "axios@npm:1.13.4"
|
||||
version: 1.13.5
|
||||
resolution: "axios@npm:1.13.5"
|
||||
dependencies:
|
||||
follow-redirects: "npm:^1.15.6"
|
||||
form-data: "npm:^4.0.4"
|
||||
follow-redirects: "npm:^1.15.11"
|
||||
form-data: "npm:^4.0.5"
|
||||
proxy-from-env: "npm:^1.1.0"
|
||||
checksum: 10c0/474c00b7d71f4de4ad562589dae6b615149df7c2583bbc5ebba96229f3f85bfb0775d23705338df072f12e48d3e85685c065a3cf6855d58968a672d19214c728
|
||||
checksum: 10c0/abf468c34f2d145f3dc7dbc0f1be67e520630624307bda69a41bbe8d386bd672d87b4405c4ee77f9ff54b235ab02f96a9968fb00e75b13ce64706e352a3068fd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7740,13 +7740,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"follow-redirects@npm:^1.15.6":
|
||||
version: 1.15.6
|
||||
resolution: "follow-redirects@npm:1.15.6"
|
||||
"follow-redirects@npm:^1.15.11":
|
||||
version: 1.15.11
|
||||
resolution: "follow-redirects@npm:1.15.11"
|
||||
peerDependenciesMeta:
|
||||
debug:
|
||||
optional: true
|
||||
checksum: 10c0/9ff767f0d7be6aa6870c82ac79cf0368cd73e01bbc00e9eb1c2a16fbb198ec105e3c9b6628bb98e9f3ac66fe29a957b9645bcb9a490bb7aa0d35f908b6b85071
|
||||
checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7769,16 +7769,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"form-data@npm:^4.0.4":
|
||||
version: 4.0.4
|
||||
resolution: "form-data@npm:4.0.4"
|
||||
"form-data@npm:^4.0.5":
|
||||
version: 4.0.5
|
||||
resolution: "form-data@npm:4.0.5"
|
||||
dependencies:
|
||||
asynckit: "npm:^0.4.0"
|
||||
combined-stream: "npm:^1.0.8"
|
||||
es-set-tostringtag: "npm:^2.1.0"
|
||||
hasown: "npm:^2.0.2"
|
||||
mime-types: "npm:^2.1.12"
|
||||
checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695
|
||||
checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -14264,15 +14264,15 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"vite-tsconfig-paths@npm:^6.0.0":
|
||||
version: 6.0.5
|
||||
resolution: "vite-tsconfig-paths@npm:6.0.5"
|
||||
version: 6.1.0
|
||||
resolution: "vite-tsconfig-paths@npm:6.1.0"
|
||||
dependencies:
|
||||
debug: "npm:^4.1.1"
|
||||
globrex: "npm:^0.1.2"
|
||||
tsconfck: "npm:^3.0.3"
|
||||
peerDependencies:
|
||||
vite: "*"
|
||||
checksum: 10c0/c62dd84804b9d2d35460146bda0bb752d270043d805df0e806ade6a9bbf37c5ad5da8a29d822b89931821545c201bc7ca07c594f245aebabe92d51d0cd1b63df
|
||||
checksum: 10c0/b2c9edb43592f4c4e4c4b9f1a613a196e78b727a8ffdd77a4bad1833dcf903fb9a8b23eabf5113f800585f87c2e8e9f93cba9a0e21cfe9a7e58edc7e9edcb3f5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
Reference in New Issue
Block a user