Merge commit '611533cd12059d365ca0267342b750e615637bd4' into glitch-soc/merge-upstream

This commit is contained in:
Claire 2024-09-03 12:12:23 +02:00
commit ac4002fe08
52 changed files with 412 additions and 181 deletions

View file

@ -69,7 +69,7 @@ services:
hard: -1 hard: -1
libretranslate: libretranslate:
image: libretranslate/libretranslate:v1.5.7 image: libretranslate/libretranslate:v1.6.0
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- lt-data:/home/libretranslate/.local - lt-data:/home/libretranslate/.local

View file

@ -149,7 +149,7 @@ group :test do
gem 'rails-controller-testing', '~> 1.0' gem 'rails-controller-testing', '~> 1.0'
# Validate schemas in specs # Validate schemas in specs
gem 'json-schema', '~> 4.0' gem 'json-schema', '~> 5.0'
# Test harness fo rack components # Test harness fo rack components
gem 'rack-test', '~> 2.1' gem 'rack-test', '~> 2.1'
@ -210,7 +210,7 @@ group :development, :test do
gem 'test-prof' gem 'test-prof'
# RSpec runner for rails # RSpec runner for rails
gem 'rspec-rails', '~> 6.0' gem 'rspec-rails', '~> 7.0'
end end
group :production do group :production do

View file

@ -347,7 +347,7 @@ GEM
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
terminal-table (>= 1.5.1) terminal-table (>= 1.5.1)
idn-ruby (0.1.5) idn-ruby (0.1.5)
inline_svg (1.9.0) inline_svg (1.10.0)
activesupport (>= 3.0) activesupport (>= 3.0)
nokogiri (>= 1.6) nokogiri (>= 1.6)
io-console (0.7.2) io-console (0.7.2)
@ -373,8 +373,8 @@ GEM
json-ld-preloaded (3.3.0) json-ld-preloaded (3.3.0)
json-ld (~> 3.3) json-ld (~> 3.3)
rdf (~> 3.3) rdf (~> 3.3)
json-schema (4.3.1) json-schema (5.0.0)
addressable (>= 2.8) addressable (~> 2.8)
jsonapi-renderer (0.2.2) jsonapi-renderer (0.2.2)
jwt (2.7.1) jwt (2.7.1)
kaminari (1.2.2) kaminari (1.2.2)
@ -724,10 +724,10 @@ GEM
rspec-mocks (3.13.1) rspec-mocks (3.13.1)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0) rspec-support (~> 3.13.0)
rspec-rails (6.1.4) rspec-rails (7.0.0)
actionpack (>= 6.1) actionpack (>= 7.0)
activesupport (>= 6.1) activesupport (>= 7.0)
railties (>= 6.1) railties (>= 7.0)
rspec-core (~> 3.13) rspec-core (~> 3.13)
rspec-expectations (~> 3.13) rspec-expectations (~> 3.13)
rspec-mocks (~> 3.13) rspec-mocks (~> 3.13)
@ -906,7 +906,7 @@ GEM
xorcist (1.1.3) xorcist (1.1.3)
xpath (3.2.0) xpath (3.2.0)
nokogiri (~> 1.8) nokogiri (~> 1.8)
zeitwerk (2.6.17) zeitwerk (2.6.18)
PLATFORMS PLATFORMS
ruby ruby
@ -965,7 +965,7 @@ DEPENDENCIES
irb (~> 1.8) irb (~> 1.8)
json-ld json-ld
json-ld-preloaded (~> 3.2) json-ld-preloaded (~> 3.2)
json-schema (~> 4.0) json-schema (~> 5.0)
kaminari (~> 1.2) kaminari (~> 1.2)
kt-paperclip (~> 7.2) kt-paperclip (~> 7.2)
letter_opener (~> 1.8) letter_opener (~> 1.8)
@ -1024,7 +1024,7 @@ DEPENDENCIES
redis-namespace (~> 1.10) redis-namespace (~> 1.10)
rqrcode (~> 2.2) rqrcode (~> 2.2)
rspec-github (~> 2.4) rspec-github (~> 2.4)
rspec-rails (~> 6.0) rspec-rails (~> 7.0)
rspec-sidekiq (~> 5.0) rspec-sidekiq (~> 5.0)
rubocop rubocop
rubocop-capybara rubocop-capybara

View file

@ -200,14 +200,6 @@ module JsonLdHelper
nil nil
end end
def merge_context(context, new_context)
if context.is_a?(Array)
context << new_context
else
[context, new_context]
end
end
def response_successful?(response) def response_successful?(response)
(200...300).cover?(response.code) (200...300).cover?(response.code)
end end

View file

@ -11,6 +11,7 @@
"about.not_available": "Dizze ynformaasje is troch dizze server net iepenbier makke.", "about.not_available": "Dizze ynformaasje is troch dizze server net iepenbier makke.",
"about.powered_by": "Desintralisearre sosjale media, mooglik makke troch {mastodon}", "about.powered_by": "Desintralisearre sosjale media, mooglik makke troch {mastodon}",
"about.rules": "Serverrigels", "about.rules": "Serverrigels",
"account.account_note_header": "Persoanlike opmerking",
"account.add_or_remove_from_list": "Tafoegje oan of fuortsmite út listen", "account.add_or_remove_from_list": "Tafoegje oan of fuortsmite út listen",
"account.badges.bot": "Automatisearre", "account.badges.bot": "Automatisearre",
"account.badges.group": "Groep", "account.badges.group": "Groep",
@ -96,6 +97,8 @@
"block_modal.title": "Brûker blokkearje?", "block_modal.title": "Brûker blokkearje?",
"block_modal.you_wont_see_mentions": "Jo sjogge gjin berjochten mear dyt dizze account fermelde.", "block_modal.you_wont_see_mentions": "Jo sjogge gjin berjochten mear dyt dizze account fermelde.",
"boost_modal.combo": "Jo kinne op {combo} drukke om dit de folgjende kear oer te slaan", "boost_modal.combo": "Jo kinne op {combo} drukke om dit de folgjende kear oer te slaan",
"boost_modal.reblog": "Berjocht booste?",
"boost_modal.undo_reblog": "Berjocht net langer booste?",
"bundle_column_error.copy_stacktrace": "Flaterrapport kopiearje", "bundle_column_error.copy_stacktrace": "Flaterrapport kopiearje",
"bundle_column_error.error.body": "De opfrege side koe net werjûn wurde. It kin wêze troch in flater yn ús koade, of in probleem mei browserkompatibiliteit.", "bundle_column_error.error.body": "De opfrege side koe net werjûn wurde. It kin wêze troch in flater yn ús koade, of in probleem mei browserkompatibiliteit.",
"bundle_column_error.error.title": "Oh nee!", "bundle_column_error.error.title": "Oh nee!",
@ -169,21 +172,30 @@
"confirmations.block.confirm": "Blokkearje", "confirmations.block.confirm": "Blokkearje",
"confirmations.delete.confirm": "Fuortsmite", "confirmations.delete.confirm": "Fuortsmite",
"confirmations.delete.message": "Binne jo wis dat jo dit berjocht fuortsmite wolle?", "confirmations.delete.message": "Binne jo wis dat jo dit berjocht fuortsmite wolle?",
"confirmations.delete.title": "Berjocht fuortsmite?",
"confirmations.delete_list.confirm": "Fuortsmite", "confirmations.delete_list.confirm": "Fuortsmite",
"confirmations.delete_list.message": "Binne jo wis dat jo dizze list foar permanint fuortsmite wolle?", "confirmations.delete_list.message": "Binne jo wis dat jo dizze list foar permanint fuortsmite wolle?",
"confirmations.delete_list.title": "List fuortsmite?",
"confirmations.discard_edit_media.confirm": "Fuortsmite", "confirmations.discard_edit_media.confirm": "Fuortsmite",
"confirmations.discard_edit_media.message": "Jo hawwe net-bewarre wizigingen yn de mediabeskriuwing of foarfertoaning, wolle jo dizze dochs fuortsmite?", "confirmations.discard_edit_media.message": "Jo hawwe net-bewarre wizigingen yn de mediabeskriuwing of foarfertoaning, wolle jo dizze dochs fuortsmite?",
"confirmations.edit.confirm": "Bewurkje", "confirmations.edit.confirm": "Bewurkje",
"confirmations.edit.message": "Troch no te bewurkjen sil it berjocht dat jo no oan it skriuwen binne oerskreaun wurde. Wolle jo trochgean?", "confirmations.edit.message": "Troch no te bewurkjen sil it berjocht dat jo no oan it skriuwen binne oerskreaun wurde. Wolle jo trochgean?",
"confirmations.edit.title": "Berjocht oerskriuwe?",
"confirmations.logout.confirm": "Ofmelde", "confirmations.logout.confirm": "Ofmelde",
"confirmations.logout.message": "Binne jo wis dat jo ôfmelde wolle?", "confirmations.logout.message": "Binne jo wis dat jo ôfmelde wolle?",
"confirmations.logout.title": "Ofmelde?",
"confirmations.mute.confirm": "Negearje", "confirmations.mute.confirm": "Negearje",
"confirmations.redraft.confirm": "Fuortsmite en opnij opstelle", "confirmations.redraft.confirm": "Fuortsmite en opnij opstelle",
"confirmations.redraft.message": "Binne jo wis dat jo dit berjocht fuortsmite en opnij opstelle wolle? Favoriten en boosts geane dan ferlern en reaksjes op it oarspronklike berjocht reitsje jo kwyt.", "confirmations.redraft.message": "Binne jo wis dat jo dit berjocht fuortsmite en opnij opstelle wolle? Favoriten en boosts geane dan ferlern en reaksjes op it oarspronklike berjocht reitsje jo kwyt.",
"confirmations.redraft.title": "Berjocht fuortsmite en opnij opstelle?",
"confirmations.reply.confirm": "Reagearje", "confirmations.reply.confirm": "Reagearje",
"confirmations.reply.message": "Troch no te reagearjen sil it berjocht dat jo no oan it skriuwen binne oerskreaun wurde. Wolle jo trochgean?", "confirmations.reply.message": "Troch no te reagearjen sil it berjocht dat jo no oan it skriuwen binne oerskreaun wurde. Wolle jo trochgean?",
"confirmations.reply.title": "Berjocht oerskriuwe?",
"confirmations.unfollow.confirm": "Net mear folgje", "confirmations.unfollow.confirm": "Net mear folgje",
"confirmations.unfollow.message": "Binne jo wis dat jo {name} net mear folgje wolle?", "confirmations.unfollow.message": "Binne jo wis dat jo {name} net mear folgje wolle?",
"confirmations.unfollow.title": "Brûker net mear folgje?",
"content_warning.hide": "Berjocht ferstopje",
"content_warning.show": "Dochs toane",
"conversation.delete": "Petear fuortsmite", "conversation.delete": "Petear fuortsmite",
"conversation.mark_as_read": "As lêzen markearje", "conversation.mark_as_read": "As lêzen markearje",
"conversation.open": "Petear toane", "conversation.open": "Petear toane",
@ -220,7 +232,9 @@
"domain_pill.username": "Brûkersnamme", "domain_pill.username": "Brûkersnamme",
"domain_pill.whats_in_a_handle": "Wat is in fediverse-adres?", "domain_pill.whats_in_a_handle": "Wat is in fediverse-adres?",
"domain_pill.who_they_are": "Omdat jo oan in fediverse-adres sjen kinne hoet ien hjit en op hokker server dy sit, kinne jo mei minsken op it troch <button>ActivityPub oandreaune</button> sosjale web (fediverse) kommunisearje.", "domain_pill.who_they_are": "Omdat jo oan in fediverse-adres sjen kinne hoet ien hjit en op hokker server dy sit, kinne jo mei minsken op it troch <button>ActivityPub oandreaune</button> sosjale web (fediverse) kommunisearje.",
"domain_pill.who_you_are": "Omdat jo oan in fediverse-adres sjen kinne hoet jo hjitte en op hokker server jo sitte, kinne jo mei minsken op it troch <button>ActivityPub oandreaune</button> sosjale web (fediverse) kommunisearje.",
"domain_pill.your_handle": "Jo fediverse-adres:", "domain_pill.your_handle": "Jo fediverse-adres:",
"domain_pill.your_server": "Jo digitale thús, wer't al jo berjochten stean. Is dizze server dochs net nei jo winsk? Dan kinne jo op elk momint nei in oare server ferhúzje en ek jo folgers oerbringe.",
"domain_pill.your_username": "Jo unike identifikaasje-adres op dizze server. It is mooglik dat der brûkers mei deselde brûkersnamme op ferskate servers te finen binne.", "domain_pill.your_username": "Jo unike identifikaasje-adres op dizze server. It is mooglik dat der brûkers mei deselde brûkersnamme op ferskate servers te finen binne.",
"embed.instructions": "Embed this status on your website by copying the code below.", "embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Sa komt it der út te sjen:", "embed.preview": "Sa komt it der út te sjen:",
@ -258,6 +272,7 @@
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
"empty_column.lists": "Jo hawwe noch gjin inkelde list. Wanneart jo der ien oanmakke hawwe, falt dat hjir te sjen.", "empty_column.lists": "Jo hawwe noch gjin inkelde list. Wanneart jo der ien oanmakke hawwe, falt dat hjir te sjen.",
"empty_column.mutes": "Jo hawwe noch gjin brûkers negearre.", "empty_column.mutes": "Jo hawwe noch gjin brûkers negearre.",
"empty_column.notification_requests": "Hielendal leech! Der is hjir neat. Wanneart jo nije meldingen ûntfange, ferskine dizze hjir neffens jo ynstellingen.",
"empty_column.notifications": "Jo hawwe noch gjin meldingen. Ynteraksjes mei oare minsken sjogge jo hjir.", "empty_column.notifications": "Jo hawwe noch gjin meldingen. Ynteraksjes mei oare minsken sjogge jo hjir.",
"empty_column.public": "Der is hjir neat! Skriuw eat publyklik, of folgje sels brûkers fan oare servers om it hjir te foljen", "empty_column.public": "Der is hjir neat! Skriuw eat publyklik, of folgje sels brûkers fan oare servers om it hjir te foljen",
"error.unexpected_crash.explanation": "Troch in bug in ús koade of in probleem mei de komptabiliteit fan jo browser, koe dizze side net toand wurde.", "error.unexpected_crash.explanation": "Troch in bug in ús koade of in probleem mei de komptabiliteit fan jo browser, koe dizze side net toand wurde.",
@ -288,6 +303,8 @@
"filter_modal.select_filter.subtitle": "In besteande kategory brûke of in nije oanmeitsje", "filter_modal.select_filter.subtitle": "In besteande kategory brûke of in nije oanmeitsje",
"filter_modal.select_filter.title": "Dit berjocht filterje", "filter_modal.select_filter.title": "Dit berjocht filterje",
"filter_modal.title.status": "In berjocht filterje", "filter_modal.title.status": "In berjocht filterje",
"filter_warning.matches_filter": "Komt oerien mei filter {title}",
"filtered_notifications_banner.pending_requests": "Fan {count, plural, =0 {net ien} one {ien persoan} other {# persoanen}} dyt jo mooglik kinne",
"filtered_notifications_banner.title": "Filtere meldingen", "filtered_notifications_banner.title": "Filtere meldingen",
"firehose.all": "Alles", "firehose.all": "Alles",
"firehose.local": "Dizze server", "firehose.local": "Dizze server",
@ -336,6 +353,14 @@
"hashtag.follow": "Hashtag folgje", "hashtag.follow": "Hashtag folgje",
"hashtag.unfollow": "Hashtag ûntfolgje", "hashtag.unfollow": "Hashtag ûntfolgje",
"hashtags.and_other": "…en {count, plural, one {}other {# mear}}", "hashtags.and_other": "…en {count, plural, one {}other {# mear}}",
"hints.profiles.followers_may_be_missing": "Folgers foar dit profyl kinne ûntbrekke.",
"hints.profiles.follows_may_be_missing": "De folgers foar dit profyl kinne ûntbrekke.",
"hints.profiles.posts_may_be_missing": "Der ûntbrekke mooglik berjochten fan dit profyl.",
"hints.profiles.see_more_followers": "Besjoch mear folgers op {domain}",
"hints.profiles.see_more_follows": "Besjoch mear folge accounts op {domain}",
"hints.profiles.see_more_posts": "Besjoch mear berjochten op {domain}",
"hints.threads.replies_may_be_missing": "Antwurden fan oare servers kinne ûntbrekke.",
"hints.threads.see_more": "Besjoch mear reaksjes op {domain}",
"home.column_settings.show_reblogs": "Boosts toane", "home.column_settings.show_reblogs": "Boosts toane",
"home.column_settings.show_replies": "Reaksjes toane", "home.column_settings.show_replies": "Reaksjes toane",
"home.hide_announcements": "Meidielingen ferstopje", "home.hide_announcements": "Meidielingen ferstopje",
@ -343,6 +368,17 @@
"home.pending_critical_update.link": "Fernijingen besjen", "home.pending_critical_update.link": "Fernijingen besjen",
"home.pending_critical_update.title": "Kritike befeiligingsfernijing beskikber!", "home.pending_critical_update.title": "Kritike befeiligingsfernijing beskikber!",
"home.show_announcements": "Meidielingen toane", "home.show_announcements": "Meidielingen toane",
"ignore_notifications_modal.disclaimer": "Mastodon kin brûkers net ynformearje dat jo harren meldingen negearre hawwe. Meldingen negearje sil net foarkomme dat de berjochten sels ferstjoerd wurde.",
"ignore_notifications_modal.filter_instead": "Yn stee derfan filterje",
"ignore_notifications_modal.filter_to_act_users": "Jo binne noch hieltyd yn steat om folchfersiken goed- of ôf te karren en om brûkers te rapportearjen",
"ignore_notifications_modal.filter_to_avoid_confusion": "Filterjen foarkomt potinsjele betizing",
"ignore_notifications_modal.filter_to_review_separately": "Jo kinne filtere meldingen ôfsûnderlik beoardiele",
"ignore_notifications_modal.ignore": "Meldingen negearje",
"ignore_notifications_modal.limited_accounts_title": "Meldingen fan beheinde accounts negearje?",
"ignore_notifications_modal.new_accounts_title": "Meldingen fan nije accounts negearje?",
"ignore_notifications_modal.not_followers_title": "Meldingen negearje fan minsken dyt jo net folgje?",
"ignore_notifications_modal.not_following_title": "Meldingen negearje fan minsken dyt josels net folgje?",
"ignore_notifications_modal.private_mentions_title": "Meldingen negearje fan net frege priveeberjochten?",
"interaction_modal.description.favourite": "Jo kinne mei in Mastodon-account dit berjocht as favoryt markearje, om dy brûker witte te litten dat jo it berjocht wurdearje en om it te bewarjen.", "interaction_modal.description.favourite": "Jo kinne mei in Mastodon-account dit berjocht as favoryt markearje, om dy brûker witte te litten dat jo it berjocht wurdearje en om it te bewarjen.",
"interaction_modal.description.follow": "Jo kinne mei in Mastodon-account {name} folgje, om sa harren berjochten op jo starttiidline te ûntfangen.", "interaction_modal.description.follow": "Jo kinne mei in Mastodon-account {name} folgje, om sa harren berjochten op jo starttiidline te ûntfangen.",
"interaction_modal.description.reblog": "Jo kinne mei in Mastodon-account dit berjocht booste, om it sa mei jo folgers te dielen.", "interaction_modal.description.reblog": "Jo kinne mei in Mastodon-account dit berjocht booste, om it sa mei jo folgers te dielen.",
@ -433,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Jo sjogge gjin berjochten mear dyt dizze account fermelde.", "mute_modal.you_wont_see_mentions": "Jo sjogge gjin berjochten mear dyt dizze account fermelde.",
"mute_modal.you_wont_see_posts": "De persoan kin jo berjochten noch hieltyd sjen, mar jo sjogge harren berjochten net mear.", "mute_modal.you_wont_see_posts": "De persoan kin jo berjochten noch hieltyd sjen, mar jo sjogge harren berjochten net mear.",
"navigation_bar.about": "Oer", "navigation_bar.about": "Oer",
"navigation_bar.administration": "Behear",
"navigation_bar.advanced_interface": "Yn avansearre webomjouwing iepenje", "navigation_bar.advanced_interface": "Yn avansearre webomjouwing iepenje",
"navigation_bar.blocks": "Blokkearre brûkers", "navigation_bar.blocks": "Blokkearre brûkers",
"navigation_bar.bookmarks": "Blêdwizers", "navigation_bar.bookmarks": "Blêdwizers",
@ -449,6 +486,7 @@
"navigation_bar.follows_and_followers": "Folgers en folgjenden", "navigation_bar.follows_and_followers": "Folgers en folgjenden",
"navigation_bar.lists": "Listen", "navigation_bar.lists": "Listen",
"navigation_bar.logout": "Ofmelde", "navigation_bar.logout": "Ofmelde",
"navigation_bar.moderation": "Moderaasje",
"navigation_bar.mutes": "Negearre brûkers", "navigation_bar.mutes": "Negearre brûkers",
"navigation_bar.opened_in_classic_interface": "Berjochten, accounts en oare spesifike siden, wurde standert iepene yn de klassike webinterface.", "navigation_bar.opened_in_classic_interface": "Berjochten, accounts en oare spesifike siden, wurde standert iepene yn de klassike webinterface.",
"navigation_bar.personal": "Persoanlik", "navigation_bar.personal": "Persoanlik",
@ -464,9 +502,18 @@
"notification.admin.report_statuses": "{name} rapportearre {target} foar {category}", "notification.admin.report_statuses": "{name} rapportearre {target} foar {category}",
"notification.admin.report_statuses_other": "{name} hat {target} rapportearre", "notification.admin.report_statuses_other": "{name} hat {target} rapportearre",
"notification.admin.sign_up": "{name} hat harren registrearre", "notification.admin.sign_up": "{name} hat harren registrearre",
"notification.admin.sign_up.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe harren registrearre",
"notification.favourite": "{name} hat jo berjocht as favoryt markearre", "notification.favourite": "{name} hat jo berjocht as favoryt markearre",
"notification.favourite.name_and_others_with_link": "{name} en <a>{count, plural, one {# oar} other {# oaren}}</a> hawwe jo berjocht as favoryt markearre",
"notification.follow": "{name} folget dy", "notification.follow": "{name} folget dy",
"notification.follow.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe jo folge",
"notification.follow_request": "{name} hat dy in folchfersyk stjoerd", "notification.follow_request": "{name} hat dy in folchfersyk stjoerd",
"notification.follow_request.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe frege om jo te folgjen",
"notification.label.mention": "Fermelding",
"notification.label.private_mention": "Priveeberjocht",
"notification.label.private_reply": "Priveereaksje",
"notification.label.reply": "Beäntwurdzje",
"notification.mention": "Fermelding",
"notification.moderation-warning.learn_more": "Mear ynfo", "notification.moderation-warning.learn_more": "Mear ynfo",
"notification.moderation_warning": "Jo hawwe in moderaasje-warskôging ûntfongen", "notification.moderation_warning": "Jo hawwe in moderaasje-warskôging ûntfongen",
"notification.moderation_warning.action_delete_statuses": "Guon fan jo berjochten binne fuortsmiten.", "notification.moderation_warning.action_delete_statuses": "Guon fan jo berjochten binne fuortsmiten.",
@ -479,23 +526,44 @@
"notification.own_poll": "Jo poll is beëinige", "notification.own_poll": "Jo poll is beëinige",
"notification.poll": "In enkête dêrt jo oan meidien hawwe is beëinige", "notification.poll": "In enkête dêrt jo oan meidien hawwe is beëinige",
"notification.reblog": "{name} hat jo berjocht boost", "notification.reblog": "{name} hat jo berjocht boost",
"notification.reblog.name_and_others_with_link": "{name} en <a>{count, plural, one {# oar} other {# oaren}}</a> hawwe jo berjocht boost",
"notification.relationships_severance_event": "Ferlerne ferbiningen mei {name}", "notification.relationships_severance_event": "Ferlerne ferbiningen mei {name}",
"notification.relationships_severance_event.account_suspension": "In behearder fan {from} hat {target} útsteld, wat betsjut dat jo gjin updates mear fan harren ûntfange kinne of mei harren kommunisearje kinne.", "notification.relationships_severance_event.account_suspension": "In behearder fan {from} hat {target} útsteld, wat betsjut dat jo gjin updates mear fan harren ûntfange kinne of mei harren kommunisearje kinne.",
"notification.relationships_severance_event.domain_block": "In behearder fan {from} hat {target} blokkearre, ynklusyf {followersCount} fan jo folgers en {followingCount, plural, one {# account} other {# accounts}} dyt jo folgje.", "notification.relationships_severance_event.domain_block": "In behearder fan {from} hat {target} blokkearre, ynklusyf {followersCount} fan jo folgers en {followingCount, plural, one {# account} other {# accounts}} dyt jo folgje.",
"notification.relationships_severance_event.learn_more": "Mear ynfo", "notification.relationships_severance_event.learn_more": "Mear ynfo",
"notification.relationships_severance_event.user_domain_block": "Jo hawwe {target} blokkearre, wêrmeit jo {followersCount} fan jo folgers en {followingCount, plural, one {# account} other {# accounts}} dyt jo folgje ferlern binne.",
"notification.status": "{name} hat in berjocht pleatst", "notification.status": "{name} hat in berjocht pleatst",
"notification.update": "{name} hat in berjocht bewurke", "notification.update": "{name} hat in berjocht bewurke",
"notification_requests.accept": "Akseptearje", "notification_requests.accept": "Akseptearje",
"notification_requests.accept_multiple": "{count, plural, one {# fersyk akseptearje…} other {# fersiken akseptearje…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Fersyk akseptearje} other {Fersiken akseptearje}}",
"notification_requests.confirm_accept_multiple.message": "Jo steane op it punt om {count, plural, one {ien meldingsfersyk} other {# meldingsfersiken}} te akseptearjen. Binne jo wis dat jo trochgean wolle?",
"notification_requests.confirm_accept_multiple.title": "Meldingsfersiken akseptearje?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Fersyk ôfwize} other {Fersiken ôfwize}}",
"notification_requests.confirm_dismiss_multiple.message": "Jo steane op it punt om {count, plural, one {ien meldingsfersyk} other {# meldingsfersiken}} ôf te wizen. Jo sille net yn steat wêze om {count, plural, one {hier} other {hier}} wer maklik tagong ta te krijen. Wolle jo trochgean?",
"notification_requests.confirm_dismiss_multiple.title": "Meldingsfersiken ôfwize?",
"notification_requests.dismiss": "Ofwize", "notification_requests.dismiss": "Ofwize",
"notification_requests.dismiss_multiple": "{count, plural, one {# fersyk ôfwize…} other {# fersiken ôfwize…}}",
"notification_requests.edit_selection": "Bewurkje",
"notification_requests.exit_selection": "Klear",
"notification_requests.explainer_for_limited_account": "Meldingen fan dizze account binne filtere, omdat dizze account troch in moderator beheind is.",
"notification_requests.explainer_for_limited_remote_account": "Meldingen fan dizze account binne filtere, omdat dizze account of harren server troch in moderator beheind is.",
"notification_requests.maximize": "Maksimalisearje",
"notification_requests.minimize_banner": "Banner mei filtere meldingen minimalisearje",
"notification_requests.notifications_from": "Meldingen fan {name}", "notification_requests.notifications_from": "Meldingen fan {name}",
"notification_requests.title": "Filtere meldingen", "notification_requests.title": "Filtere meldingen",
"notification_requests.view": "Meldingen besjen",
"notifications.clear": "Meldingen wiskje", "notifications.clear": "Meldingen wiskje",
"notifications.clear_confirmation": "Binne jo wis dat jo al jo meldingen permanint fuortsmite wolle?", "notifications.clear_confirmation": "Binne jo wis dat jo al jo meldingen permanint fuortsmite wolle?",
"notifications.clear_title": "Meldingen fuortsmite?",
"notifications.column_settings.admin.report": "Nije rapportaazjes:", "notifications.column_settings.admin.report": "Nije rapportaazjes:",
"notifications.column_settings.admin.sign_up": "Nije registraasjes:", "notifications.column_settings.admin.sign_up": "Nije registraasjes:",
"notifications.column_settings.alert": "Desktopmeldingen", "notifications.column_settings.alert": "Desktopmeldingen",
"notifications.column_settings.beta.category": "Eksperimintele funksjes",
"notifications.column_settings.beta.grouping": "Notifikaasjes groepearje",
"notifications.column_settings.favourite": "Favoriten:", "notifications.column_settings.favourite": "Favoriten:",
"notifications.column_settings.filter_bar.advanced": "Alle kategoryen toane", "notifications.column_settings.filter_bar.advanced": "Alle kategoryen toane",
"notifications.column_settings.filter_bar.category": "Flugge filterbalke",
"notifications.column_settings.follow": "Nije folgers:", "notifications.column_settings.follow": "Nije folgers:",
"notifications.column_settings.follow_request": "Nij folchfersyk:", "notifications.column_settings.follow_request": "Nij folchfersyk:",
"notifications.column_settings.mention": "Fermeldingen:", "notifications.column_settings.mention": "Fermeldingen:",
@ -521,6 +589,23 @@
"notifications.permission_denied": "Desktopmeldingen binne net beskikber, omdat in eardere browsertastimming wegere waard", "notifications.permission_denied": "Desktopmeldingen binne net beskikber, omdat in eardere browsertastimming wegere waard",
"notifications.permission_denied_alert": "Desktopmeldingen kinne net ynskeakele wurde, omdat in eardere browsertastimming wegere waard", "notifications.permission_denied_alert": "Desktopmeldingen kinne net ynskeakele wurde, omdat in eardere browsertastimming wegere waard",
"notifications.permission_required": "Desktopmeldingen binne net beskikber, omdat de nedige tastimming net ferliend is.", "notifications.permission_required": "Desktopmeldingen binne net beskikber, omdat de nedige tastimming net ferliend is.",
"notifications.policy.accept": "Akseptearje",
"notifications.policy.accept_hint": "Yn meldingen toane",
"notifications.policy.drop": "Negearje",
"notifications.policy.drop_hint": "Permanint fuortsmite",
"notifications.policy.filter": "Filter",
"notifications.policy.filter_hint": "Nei filtere ynboks foar meldingen ferstjoere",
"notifications.policy.filter_limited_accounts_hint": "Beheind troch servermoderatoren",
"notifications.policy.filter_limited_accounts_title": "Moderearre accounts",
"notifications.policy.filter_new_accounts.hint": "Yn de ôfrûne {days, plural, one {dei} other {# dagen}} registrearre",
"notifications.policy.filter_new_accounts_title": "Nije accounts",
"notifications.policy.filter_not_followers_hint": "Ynklusyf minsken dyt jo koarter as {days, plural, one {dei} other {# dagen}} folgje",
"notifications.policy.filter_not_followers_title": "Minsken dyt jo net folgje",
"notifications.policy.filter_not_following_hint": "Oant jo se hânmjittich goedkarre",
"notifications.policy.filter_not_following_title": "Minsken dyt josels net folgje",
"notifications.policy.filter_private_mentions_hint": "Unsichtber útsein it in antwurd is op in priveeberjocht fan jo of wanneart jo de ôfstjoerder folgje",
"notifications.policy.filter_private_mentions_title": "Net frege priveeberjochten",
"notifications.policy.title": "Meldingen beheare fan…",
"notifications_permission_banner.enable": "Desktopmeldingen ynskeakelje", "notifications_permission_banner.enable": "Desktopmeldingen ynskeakelje",
"notifications_permission_banner.how_to_control": "Om meldingen te ûntfangen wanneart Mastodon net iepen stiet. Jo kinne krekt bepale hokker soarte fan ynteraksjes wol of gjin desktopmeldingen jouwe fia de boppesteande {icon} knop.", "notifications_permission_banner.how_to_control": "Om meldingen te ûntfangen wanneart Mastodon net iepen stiet. Jo kinne krekt bepale hokker soarte fan ynteraksjes wol of gjin desktopmeldingen jouwe fia de boppesteande {icon} knop.",
"notifications_permission_banner.title": "Mis neat", "notifications_permission_banner.title": "Mis neat",
@ -647,6 +732,7 @@
"report.unfollow_explanation": "Jo folgje dizze account. Om harren berjochten net mear op jo starttiidline te sjen, kinne jo dyjinge ûntfolgje.", "report.unfollow_explanation": "Jo folgje dizze account. Om harren berjochten net mear op jo starttiidline te sjen, kinne jo dyjinge ûntfolgje.",
"report_notification.attached_statuses": "{count, plural, one {{count} berjocht} other {{count} berjochten}} tafoege", "report_notification.attached_statuses": "{count, plural, one {{count} berjocht} other {{count} berjochten}} tafoege",
"report_notification.categories.legal": "Juridysk", "report_notification.categories.legal": "Juridysk",
"report_notification.categories.legal_sentence": "yllegale ynhâld",
"report_notification.categories.other": "Oars", "report_notification.categories.other": "Oars",
"report_notification.categories.other_sentence": "oars", "report_notification.categories.other_sentence": "oars",
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
@ -680,8 +766,11 @@
"server_banner.about_active_users": "Oantal brûkers yn de ôfrûne 30 dagen (MAU)", "server_banner.about_active_users": "Oantal brûkers yn de ôfrûne 30 dagen (MAU)",
"server_banner.active_users": "warbere brûkers", "server_banner.active_users": "warbere brûkers",
"server_banner.administered_by": "Beheard troch:", "server_banner.administered_by": "Beheard troch:",
"server_banner.is_one_of_many": "{domain} is ien fan de protte ôfhinklike Mastodon-servers dyt jo brûke kinne om diel te nimmen oan de fediverse.",
"server_banner.server_stats": "Serverstatistiken:", "server_banner.server_stats": "Serverstatistiken:",
"sign_in_banner.create_account": "Account registrearje", "sign_in_banner.create_account": "Account registrearje",
"sign_in_banner.follow_anyone": "Folgje elkenien yn de fediverse en sjoch it allegearre yn gronologyske folchoarder. Gjin algoritmen, advertinsjes of clickbaits.",
"sign_in_banner.mastodon_is": "Mastodon is de beste manier om wat der bart by te hâlden.",
"sign_in_banner.sign_in": "Oanmelde", "sign_in_banner.sign_in": "Oanmelde",
"sign_in_banner.sso_redirect": "Oanmelde of Registrearje", "sign_in_banner.sso_redirect": "Oanmelde of Registrearje",
"status.admin_account": "Moderaasje-omjouwing fan @{name} iepenje", "status.admin_account": "Moderaasje-omjouwing fan @{name} iepenje",

View file

@ -98,6 +98,7 @@
"block_modal.you_wont_see_mentions": "Tu non videra le messages que mentiona iste persona.", "block_modal.you_wont_see_mentions": "Tu non videra le messages que mentiona iste persona.",
"boost_modal.combo": "Tu pote premer {combo} pro saltar isto le proxime vice", "boost_modal.combo": "Tu pote premer {combo} pro saltar isto le proxime vice",
"boost_modal.reblog": "Impulsar le message?", "boost_modal.reblog": "Impulsar le message?",
"boost_modal.undo_reblog": "Cessar de impulsar le message?",
"bundle_column_error.copy_stacktrace": "Copiar reporto de error", "bundle_column_error.copy_stacktrace": "Copiar reporto de error",
"bundle_column_error.error.body": "Le pagina requestate non pote esser visualisate. Pote esser a causa de un defecto in nostre codice o de un problema de compatibilitate del navigator.", "bundle_column_error.error.body": "Le pagina requestate non pote esser visualisate. Pote esser a causa de un defecto in nostre codice o de un problema de compatibilitate del navigator.",
"bundle_column_error.error.title": "Oh, no!", "bundle_column_error.error.title": "Oh, no!",

View file

@ -248,8 +248,9 @@ function processNewNotification(
} }
function trimNotifications(state: NotificationGroupsState) { function trimNotifications(state: NotificationGroupsState) {
if (state.scrolledToTop) { if (state.scrolledToTop && state.groups.length > NOTIFICATIONS_TRIM_LIMIT) {
state.groups.splice(NOTIFICATIONS_TRIM_LIMIT); state.groups.splice(NOTIFICATIONS_TRIM_LIMIT);
ensureTrailingGap(state.groups);
} }
} }
@ -400,6 +401,28 @@ function ensureLeadingGap(
} }
} }
// Ensure the groups list ends with a gap suitable for loading more, mutating it to append one if needed
function ensureTrailingGap(
groups: NotificationGroupsState['groups'],
): NotificationGap {
const groupOrGap = groups.at(-1);
if (groupOrGap?.type === 'gap') {
// We're expecting older notifications, so discard sinceId if it's set
groupOrGap.sinceId = undefined;
return groupOrGap;
} else {
const gap: NotificationGap = {
type: 'gap',
maxId: groupOrGap?.page_min_id,
};
groups.push(gap);
return gap;
}
}
export const notificationGroupsReducer = createReducer<NotificationGroupsState>( export const notificationGroupsReducer = createReducer<NotificationGroupsState>(
initialState, initialState,
(builder) => { (builder) => {

View file

@ -29,8 +29,4 @@ class Mention < ApplicationRecord
to: :account, to: :account,
prefix: true prefix: true
) )
def active?
!silent?
end
end end

View file

@ -246,10 +246,6 @@ class User < ApplicationRecord
unconfirmed? || pending? unconfirmed? || pending?
end end
def inactive_message
approved? ? super : :pending
end
def approve! def approve!
return if approved? return if approved?

View file

@ -150,7 +150,7 @@ class PostStatusService < BaseService
@media = @account.media_attachments.where(status_id: nil).where(id: @options[:media_ids].take(Status::MEDIA_ATTACHMENTS_LIMIT).map(&:to_i)) @media = @account.media_attachments.where(status_id: nil).where(id: @options[:media_ids].take(Status::MEDIA_ATTACHMENTS_LIMIT).map(&:to_i))
not_found_ids = @options[:media_ids] - @media.map(&:id) not_found_ids = @options[:media_ids].map(&:to_i) - @media.map(&:id)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any? raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any?
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:audio_or_video?) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:audio_or_video?)

View file

@ -74,7 +74,7 @@ class UpdateStatusService < BaseService
media_attachments = @status.account.media_attachments.where(status_id: [nil, @status.id]).where(scheduled_status_id: nil).where(id: @options[:media_ids].take(Status::MEDIA_ATTACHMENTS_LIMIT).map(&:to_i)).to_a media_attachments = @status.account.media_attachments.where(status_id: [nil, @status.id]).where(scheduled_status_id: nil).where(id: @options[:media_ids].take(Status::MEDIA_ATTACHMENTS_LIMIT).map(&:to_i)).to_a
not_found_ids = @options[:media_ids] - media_attachments.map(&:id) not_found_ids = @options[:media_ids].map(&:to_i) - media_attachments.map(&:id)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any? raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any?
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if media_attachments.size > 1 && media_attachments.find(&:audio_or_video?) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if media_attachments.size > 1 && media_attachments.find(&:audio_or_video?)

View file

@ -1412,6 +1412,7 @@ ca:
media_attachments: media_attachments:
validations: validations:
images_and_video: No es pot adjuntar un vídeo a una publicació que ja contingui imatges images_and_video: No es pot adjuntar un vídeo a una publicació que ja contingui imatges
not_found: No s'ha trobat el contingut multimèdia %{ids} o ja s'ha adjuntat a una altra publicació
not_ready: No es poden adjuntar fitxers que no s'hagin acabat de processar. Torna-ho a provar en un moment! not_ready: No es poden adjuntar fitxers que no s'hagin acabat de processar. Torna-ho a provar en un moment!
too_many: No es poden adjuntar més de 4 fitxers too_many: No es poden adjuntar més de 4 fitxers
migrations: migrations:

View file

@ -1454,6 +1454,7 @@ da:
media_attachments: media_attachments:
validations: validations:
images_and_video: En video kan ikke vedhæftes et indlæg med billedindhold images_and_video: En video kan ikke vedhæftes et indlæg med billedindhold
not_found: Mediet %{ids} ikke fundet eller allerede vedhæftet andet indlæg
not_ready: Filer under behandling kan ikke vedhæftes. Forsøg igen senere! not_ready: Filer under behandling kan ikke vedhæftes. Forsøg igen senere!
too_many: Maks. 4 filer kan vedhæftes too_many: Maks. 4 filer kan vedhæftes
migrations: migrations:

View file

@ -1454,6 +1454,7 @@ de:
media_attachments: media_attachments:
validations: validations:
images_and_video: Es kann kein Video an einen Beitrag angehängt werden, der bereits Bilder enthält images_and_video: Es kann kein Video an einen Beitrag angehängt werden, der bereits Bilder enthält
not_found: Medien %{ids} nicht verfügbar oder bereits an einen anderen Beitrag angehängt
not_ready: Dateien, die noch nicht verarbeitet wurden, können nicht angehängt werden. Versuche es gleich noch einmal! not_ready: Dateien, die noch nicht verarbeitet wurden, können nicht angehängt werden. Versuche es gleich noch einmal!
too_many: Mehr als vier Dateien können nicht angehängt werden too_many: Mehr als vier Dateien können nicht angehängt werden
migrations: migrations:

View file

@ -83,6 +83,7 @@ fy:
access_denied: De boarne-eigener of autorisaasjeserver hat it fersyk wegere. access_denied: De boarne-eigener of autorisaasjeserver hat it fersyk wegere.
credential_flow_not_configured: De wachtwurdgegevens-flow fan de boarne-eigener is mislearre, omdat Doorkeeper.configure.resource_owner_from_credentials net ynsteld is. credential_flow_not_configured: De wachtwurdgegevens-flow fan de boarne-eigener is mislearre, omdat Doorkeeper.configure.resource_owner_from_credentials net ynsteld is.
invalid_client: Clientferifikaasje is mislearre troch in ûnbekende client, ûntbrekkende client-autentikaasje of in net stipe autentikaasjemetoade. invalid_client: Clientferifikaasje is mislearre troch in ûnbekende client, ûntbrekkende client-autentikaasje of in net stipe autentikaasjemetoade.
invalid_code_challenge_method: De koadechallengemetoade moat S256 wezen, plain wurdt net stipe.
invalid_grant: De opjûne autorisaasje is ûnjildich, ferrûn, ynlutsen, komt net oerien mei de redirect-URI dyt opjûn is of útjûn waard oan in oere client. invalid_grant: De opjûne autorisaasje is ûnjildich, ferrûn, ynlutsen, komt net oerien mei de redirect-URI dyt opjûn is of útjûn waard oan in oere client.
invalid_redirect_uri: De opjûne redirect-URI is ûnjildich. invalid_redirect_uri: De opjûne redirect-URI is ûnjildich.
invalid_request: invalid_request:

View file

@ -1454,6 +1454,7 @@ es-AR:
media_attachments: media_attachments:
validations: validations:
images_and_video: No se puede adjuntar un video a un mensaje que ya contenga imágenes images_and_video: No se puede adjuntar un video a un mensaje que ya contenga imágenes
not_found: Medios %{ids} no encontrados o ya adjuntados a otro mensaje
not_ready: No se pueden adjuntar archivos que no se han terminado de procesar. ¡Intentá de nuevo en un rato! not_ready: No se pueden adjuntar archivos que no se han terminado de procesar. ¡Intentá de nuevo en un rato!
too_many: No se pueden adjuntar más de 4 archivos too_many: No se pueden adjuntar más de 4 archivos
migrations: migrations:

View file

@ -1454,6 +1454,7 @@ fi:
media_attachments: media_attachments:
validations: validations:
images_and_video: Videota ei voi liittää tilapäivitykseen, jossa on jo kuvia images_and_video: Videota ei voi liittää tilapäivitykseen, jossa on jo kuvia
not_found: Mediaa %{ids} ei löytynyt, tai se on jo liitetty toiseen julkaisuun
not_ready: Ei voi liittää tiedostoja, joiden käsittely on kesken. Yritä hetken kuluttua uudelleen! not_ready: Ei voi liittää tiedostoja, joiden käsittely on kesken. Yritä hetken kuluttua uudelleen!
too_many: Tiedostoja voi liittää enintään 4 too_many: Tiedostoja voi liittää enintään 4
migrations: migrations:

View file

@ -1454,6 +1454,7 @@ fo:
media_attachments: media_attachments:
validations: validations:
images_and_video: Kann ikki viðfesta sjónfílu til ein post, sum longu inniheldur myndir images_and_video: Kann ikki viðfesta sjónfílu til ein post, sum longu inniheldur myndir
not_found: Miðilin %{ids} ikki funnin ella longu knýttur at øðrum posti
not_ready: Kann ikki viðfesta fílur, sum ikki eru liðugt viðgjørdar. Roynd aftur um eina løtu! not_ready: Kann ikki viðfesta fílur, sum ikki eru liðugt viðgjørdar. Roynd aftur um eina løtu!
too_many: Kann ikki viðfest fleiri enn 4 fílur too_many: Kann ikki viðfest fleiri enn 4 fílur
migrations: migrations:

View file

@ -31,6 +31,7 @@ fy:
created_msg: Oanmeitsjen fan opmerking foar moderatoaren slagge! created_msg: Oanmeitsjen fan opmerking foar moderatoaren slagge!
destroyed_msg: Fuortsmiten fan opmerking foar moderatoaren slagge! destroyed_msg: Fuortsmiten fan opmerking foar moderatoaren slagge!
accounts: accounts:
add_email_domain_block: E-maildomein blokkearje
approve: Goedkarre approve: Goedkarre
approved_msg: It goedkarren fan de account fan %{username} is slagge approved_msg: It goedkarren fan de account fan %{username} is slagge
are_you_sure: Binne jo wis? are_you_sure: Binne jo wis?
@ -57,6 +58,7 @@ fy:
demote: Degradearje demote: Degradearje
destroyed_msg: It fuortsmiten fan de gegevens fan %{username} stiet no yn de wachtrige destroyed_msg: It fuortsmiten fan de gegevens fan %{username} stiet no yn de wachtrige
disable: Befrieze disable: Befrieze
disable_sign_in_token_auth: Ferifikaasje mei in tagongskoade fia e-mail útskeakelje
disable_two_factor_authentication: 2FA útskeakelje disable_two_factor_authentication: 2FA útskeakelje
disabled: Beferzen disabled: Beferzen
display_name: Werjeftenamme display_name: Werjeftenamme
@ -65,6 +67,7 @@ fy:
email: E-mailadres email: E-mailadres
email_status: E-mailsteat email_status: E-mailsteat
enable: Untteie enable: Untteie
enable_sign_in_token_auth: Ferifikaasje mei in tagongskoade fia e-mail ynskeakelje
enabled: Ynskeakele enabled: Ynskeakele
enabled_msg: It ûntteie fan de account fan %{username} is slagge enabled_msg: It ûntteie fan de account fan %{username} is slagge
followers: Folgers followers: Folgers
@ -129,6 +132,7 @@ fy:
resubscribe: Opnij abonnearje resubscribe: Opnij abonnearje
role: Rol role: Rol
search: Sykje search: Sykje
search_same_email_domain: Oare brûkers mei itselde e-maildomein
search_same_ip: Oare brûkers mei itselde IP-adres search_same_ip: Oare brûkers mei itselde IP-adres
security: Befeiliging security: Befeiliging
security_measures: security_measures:
@ -169,21 +173,26 @@ fy:
approve_appeal: Beswier goedkarre approve_appeal: Beswier goedkarre
approve_user: Brûker goedkarre approve_user: Brûker goedkarre
assigned_to_self_report: Rapportaazje tawize assigned_to_self_report: Rapportaazje tawize
change_email_user: E-mailadres fan brûker wizigje
change_role_user: Brûkersrol wizigje change_role_user: Brûkersrol wizigje
confirm_user: Brûker befêstigje confirm_user: Brûker befêstigje
create_account_warning: Warskôging oanmeitsje create_account_warning: Warskôging oanmeitsje
create_announcement: Meidieling oanmeitsje create_announcement: Meidieling oanmeitsje
create_canonical_email_block: E-mailblokkade oanmeitsje
create_custom_emoji: Lokale emoji oanmeitsje create_custom_emoji: Lokale emoji oanmeitsje
create_domain_allow: Domeingoedkarring oanmeitsje create_domain_allow: Domeingoedkarring oanmeitsje
create_domain_block: Domeinblokkade oanmeitsje create_domain_block: Domeinblokkade oanmeitsje
create_email_domain_block: E-maildomeinblokkade oanmeitsje
create_ip_block: IP-rigel oanmeitsje create_ip_block: IP-rigel oanmeitsje
create_unavailable_domain: Net beskikber domein oanmeitsje create_unavailable_domain: Net beskikber domein oanmeitsje
create_user_role: Rol oanmeitsje create_user_role: Rol oanmeitsje
demote_user: Brûker degradearje demote_user: Brûker degradearje
destroy_announcement: Meidieling fuortsmite destroy_announcement: Meidieling fuortsmite
destroy_canonical_email_block: E-mailblokkade fuortsmite
destroy_custom_emoji: Lokale emoji fuortsmite destroy_custom_emoji: Lokale emoji fuortsmite
destroy_domain_allow: Domeingoedkarring fuortsmite destroy_domain_allow: Domeingoedkarring fuortsmite
destroy_domain_block: Domeinblokkade fuortsmite destroy_domain_block: Domeinblokkade fuortsmite
destroy_email_domain_block: E-maildomeinblokkade fuortsmite
destroy_instance: Domein folslein fuortsmite destroy_instance: Domein folslein fuortsmite
destroy_ip_block: IP-rigel fuortsmite destroy_ip_block: IP-rigel fuortsmite
destroy_status: Toot fuortsmite destroy_status: Toot fuortsmite
@ -191,8 +200,10 @@ fy:
destroy_user_role: Rol permanint fuortsmite destroy_user_role: Rol permanint fuortsmite
disable_2fa_user: Twa-stapsferifikaasje útskeakelje disable_2fa_user: Twa-stapsferifikaasje útskeakelje
disable_custom_emoji: Lokale emoji útskeakelje disable_custom_emoji: Lokale emoji útskeakelje
disable_sign_in_token_auth_user: Ferifikaasje mei in tagongskoade fia e-mail foar de brûker útskeakelje
disable_user: Brûker útskeakelje disable_user: Brûker útskeakelje
enable_custom_emoji: Lokale emoji ynskeakelje enable_custom_emoji: Lokale emoji ynskeakelje
enable_sign_in_token_auth_user: Ferifikaasje mei in tagongskoade fia e-mail foar de brûker ynskeakelje
enable_user: Brûker ynskeakelje enable_user: Brûker ynskeakelje
memorialize_account: De account yn in Yn memoriam wizigje memorialize_account: De account yn in Yn memoriam wizigje
promote_user: Brûker promovearje promote_user: Brûker promovearje
@ -222,20 +233,26 @@ fy:
approve_appeal_html: "%{name} hat it beswier tsjin de moderaasjemaatregel fan %{target} goedkard" approve_appeal_html: "%{name} hat it beswier tsjin de moderaasjemaatregel fan %{target} goedkard"
approve_user_html: "%{name} hat de registraasje fan %{target} goedkard" approve_user_html: "%{name} hat de registraasje fan %{target} goedkard"
assigned_to_self_report_html: "%{name} hat rapportaazje %{target} oan harrensels tawiisd" assigned_to_self_report_html: "%{name} hat rapportaazje %{target} oan harrensels tawiisd"
change_email_user_html: "%{name} hat it e-mailadres fan brûker %{target} wizige"
change_role_user_html: "%{name} hat de rol fan %{target} wizige" change_role_user_html: "%{name} hat de rol fan %{target} wizige"
confirm_user_html: E-mailadres fan brûker %{target} is troch %{name} befêstige
create_account_warning_html: "%{name} hat in warskôging nei %{target} ferstjoerd" create_account_warning_html: "%{name} hat in warskôging nei %{target} ferstjoerd"
create_announcement_html: "%{name} hat de nije meidieling %{target} oanmakke" create_announcement_html: "%{name} hat de nije meidieling %{target} oanmakke"
create_canonical_email_block_html: "%{name} hat it e-mailberjocht mei de hash %{target} blokkearre"
create_custom_emoji_html: Nije emoji %{target} is troch %{name} opladen create_custom_emoji_html: Nije emoji %{target} is troch %{name} opladen
create_domain_allow_html: "%{name} hat de federaasje mei it domein %{target} goedkard" create_domain_allow_html: "%{name} hat de federaasje mei it domein %{target} goedkard"
create_domain_block_html: Domein %{target} is troch %{name} blokkearre create_domain_block_html: Domein %{target} is troch %{name} blokkearre
create_email_domain_block_html: "%{name} hat it e-maildomein %{target} blokkearre"
create_ip_block_html: "%{name} hat de rigel foar IP %{target} oanmakke" create_ip_block_html: "%{name} hat de rigel foar IP %{target} oanmakke"
create_unavailable_domain_html: "%{name} hat de besoarging foar domein %{target} beëinige" create_unavailable_domain_html: "%{name} hat de besoarging foar domein %{target} beëinige"
create_user_role_html: "%{name} hat de rol %{target} oanmakke" create_user_role_html: "%{name} hat de rol %{target} oanmakke"
demote_user_html: Brûker %{target} is troch %{name} degradearre demote_user_html: Brûker %{target} is troch %{name} degradearre
destroy_announcement_html: "%{name} hat de meidieling %{target} fuortsmiten" destroy_announcement_html: "%{name} hat de meidieling %{target} fuortsmiten"
destroy_canonical_email_block_html: "%{name} hat it e-mailberjocht mei de hash %{target} deblokkearre"
destroy_custom_emoji_html: Emoji %{target} is troch %{name} fuortsmiten destroy_custom_emoji_html: Emoji %{target} is troch %{name} fuortsmiten
destroy_domain_allow_html: "%{name} hat de federaasje mei it domein %{target} ôfkard" destroy_domain_allow_html: "%{name} hat de federaasje mei it domein %{target} ôfkard"
destroy_domain_block_html: Domein %{target} is troch %{name} deblokkearre destroy_domain_block_html: Domein %{target} is troch %{name} deblokkearre
destroy_email_domain_block_html: "%{name} hat it e-maildomein %{target} deblokkearre"
destroy_instance_html: "%{name} hat it domein %{target} folslein fuortsmiten" destroy_instance_html: "%{name} hat it domein %{target} folslein fuortsmiten"
destroy_ip_block_html: "%{name} hat de rigel foar IP %{target} fuortsmiten" destroy_ip_block_html: "%{name} hat de rigel foar IP %{target} fuortsmiten"
destroy_status_html: Berjocht fan %{target} is troch %{name} fuortsmiten destroy_status_html: Berjocht fan %{target} is troch %{name} fuortsmiten
@ -243,8 +260,10 @@ fy:
destroy_user_role_html: "%{name} hat de rol %{target} fuortsmiten" destroy_user_role_html: "%{name} hat de rol %{target} fuortsmiten"
disable_2fa_user_html: De fereaske twa-stapsferifikaasje foar %{target} is troch %{name} útskeakele disable_2fa_user_html: De fereaske twa-stapsferifikaasje foar %{target} is troch %{name} útskeakele
disable_custom_emoji_html: Emoji %{target} is troch %{name} útskeakele disable_custom_emoji_html: Emoji %{target} is troch %{name} útskeakele
disable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mail útskeakele foar %{target}"
disable_user_html: Oanmelden foar %{target} is troch %{name} útskeakele disable_user_html: Oanmelden foar %{target} is troch %{name} útskeakele
enable_custom_emoji_html: Emoji %{target} is troch %{name} ynskeakele enable_custom_emoji_html: Emoji %{target} is troch %{name} ynskeakele
enable_sign_in_token_auth_user_html: "%{name} hat ferifikaasje mei in tagongskoade fia e-mail ynskeakele foar %{target}"
enable_user_html: Oanmelden foar %{target} is troch %{name} ynskeakele enable_user_html: Oanmelden foar %{target} is troch %{name} ynskeakele
memorialize_account_html: De account %{target} is troch %{name} yn in Yn memoriam wizige memorialize_account_html: De account %{target} is troch %{name} yn in Yn memoriam wizige
promote_user_html: Brûker %{target} is troch %{name} promovearre promote_user_html: Brûker %{target} is troch %{name} promovearre
@ -252,6 +271,7 @@ fy:
reject_user_html: "%{name} hat de registraasje fan %{target} ôfwêzen" reject_user_html: "%{name} hat de registraasje fan %{target} ôfwêzen"
remove_avatar_user_html: "%{name} hat de profylfoto fan %{target} fuortsmiten" remove_avatar_user_html: "%{name} hat de profylfoto fan %{target} fuortsmiten"
reopen_report_html: "%{name} hat rapportaazje %{target} opnij iepene" reopen_report_html: "%{name} hat rapportaazje %{target} opnij iepene"
resend_user_html: "%{name} hat it befêstigings-e-mailberjocht foar %{target} opnij ferstjoerd"
reset_password_user_html: Wachtwurd fan brûker %{target} is troch %{name} opnij ynsteld reset_password_user_html: Wachtwurd fan brûker %{target} is troch %{name} opnij ynsteld
resolve_report_html: "%{name} hat rapportaazje %{target} oplost" resolve_report_html: "%{name} hat rapportaazje %{target} oplost"
sensitive_account_html: "%{name} markearre de media fan %{target} as gefoelich" sensitive_account_html: "%{name} markearre de media fan %{target} as gefoelich"
@ -412,6 +432,7 @@ fy:
attempts_over_week: attempts_over_week:
one: "%{count} registraasjebesykjen yn de ôfrûne wike" one: "%{count} registraasjebesykjen yn de ôfrûne wike"
other: "%{count} registraasjebesykjen yn de ôfrûne wike" other: "%{count} registraasjebesykjen yn de ôfrûne wike"
created_msg: E-maildomein blokkearjen slagge
delete: Fuortsmite delete: Fuortsmite
dns: dns:
types: types:
@ -420,8 +441,12 @@ fy:
new: new:
create: Domein tafoegje create: Domein tafoegje
resolve: Domein opsykje resolve: Domein opsykje
title: Nije e-maildomein blokkearje
no_email_domain_block_selected: Der binne gjin e-maildomeinblokkaden wizige, omdat der gjin ien selektearre waard
not_permitted: Net tastien not_permitted: Net tastien
resolved_dns_records_hint_html: De domeinnamme slacht op de folgjende MX-domeinen dyt úteinlik ferantwurdlik binne foar it akseptearjen fan e-mail. It blokkearjen fan in MX-domein blokkearret oanmeldingen fan elk e-mailadres dat itselde MX-domein brûkt, sels as de sichtbere domeinnamme oars is. <strong>Pas op dat jo gjin grutte e-mailproviders blokkearje.</strong>
resolved_through_html: Blokkearre fia %{domain} resolved_through_html: Blokkearre fia %{domain}
title: Blokkearre e-maildomeinen
export_domain_allows: export_domain_allows:
new: new:
title: Tastiene domeinen ymportearje title: Tastiene domeinen ymportearje
@ -575,6 +600,7 @@ fy:
resolve_description_html: Der wurdt tsjin it rapportearre account gjin maatregel nommen, gjin oertrêding registrearre en de rapportaazje wurdt markearre as oplost. resolve_description_html: Der wurdt tsjin it rapportearre account gjin maatregel nommen, gjin oertrêding registrearre en de rapportaazje wurdt markearre as oplost.
silence_description_html: De account sil allinnich sichtber wêze foar dyjinge dyt it al folgje of it hânmjittich opsykje, wêrtroch it berik earnstich beheind wurdt. Kin altyd weromdraaid wurde. Dit slút alle rapportaazjes oer dizze account. silence_description_html: De account sil allinnich sichtber wêze foar dyjinge dyt it al folgje of it hânmjittich opsykje, wêrtroch it berik earnstich beheind wurdt. Kin altyd weromdraaid wurde. Dit slút alle rapportaazjes oer dizze account.
suspend_description_html: De account en alle ynhâld sil net tagonklik wêze en úteinlik fuortsmiten wurde, en ynteraksje hjirmei sil net mooglik wêze. Binnen 30 dagen werom te draaien. Dit slút alle rapportaazjes oer dizze account. suspend_description_html: De account en alle ynhâld sil net tagonklik wêze en úteinlik fuortsmiten wurde, en ynteraksje hjirmei sil net mooglik wêze. Binnen 30 dagen werom te draaien. Dit slút alle rapportaazjes oer dizze account.
actions_description_html: Beslis hokker maatregel nommen wurde moat om dizze rapportaazje op te lossen. Wanneart jo in (straf)maatregel tsjin it rapportearre account nimme, kriget de account in e-mailmelding, behalve wanneart de <strong>spam</strong>-kategory keazen is.
actions_description_remote_html: Beslút hokker aksje nommen wurde moat om dizze rapportaazje ôf te hanneljen. Dit hat allinnich ynfloed op hoet <strong>jo</strong> server kommunisearret mei dizze eksterne account en omgiet mei de ynhâld. actions_description_remote_html: Beslút hokker aksje nommen wurde moat om dizze rapportaazje ôf te hanneljen. Dit hat allinnich ynfloed op hoet <strong>jo</strong> server kommunisearret mei dizze eksterne account en omgiet mei de ynhâld.
add_to_report: Mear oan de rapportaazje tafoegje add_to_report: Mear oan de rapportaazje tafoegje
already_suspended_badges: already_suspended_badges:
@ -639,6 +665,7 @@ fy:
delete_data_html: It profyl en de ynhâld fan <strong>@%{acct}</strong> wurde nei 30 dagen fan no ôf fuortsmiten, útsein as de account yn de tuskentiid net mear blokkearre wurdt delete_data_html: It profyl en de ynhâld fan <strong>@%{acct}</strong> wurde nei 30 dagen fan no ôf fuortsmiten, útsein as de account yn de tuskentiid net mear blokkearre wurdt
preview_preamble_html: "<strong>@%{acct}</strong> sil in warskôging ûntfange mei de folgjende ynhâld:" preview_preamble_html: "<strong>@%{acct}</strong> sil in warskôging ûntfange mei de folgjende ynhâld:"
record_strike_html: In ban tsjin <strong>@%{acct}</strong> ynstelle, om jo te helpen by takomstige skeiningen fan dizze acount te eskalearjen record_strike_html: In ban tsjin <strong>@%{acct}</strong> ynstelle, om jo te helpen by takomstige skeiningen fan dizze acount te eskalearjen
send_email_html: Stjoer <strong>@%{acct}</strong> in warskôgings-e-mailberjocht
warning_placeholder: Ekstra opsjonele reden foar de moderaasje-aksje. warning_placeholder: Ekstra opsjonele reden foar de moderaasje-aksje.
target_origin: Orizjineel fan rapportearre account target_origin: Orizjineel fan rapportearre account
title: Rapportaazjes title: Rapportaazjes
@ -678,6 +705,7 @@ fy:
manage_appeals: Beswieren beheare manage_appeals: Beswieren beheare
manage_appeals_description: Stiet brûkers ta om beswieren tsjin moderaasjemaatregelen te beoardielen manage_appeals_description: Stiet brûkers ta om beswieren tsjin moderaasjemaatregelen te beoardielen
manage_blocks: Blokkaden beheare manage_blocks: Blokkaden beheare
manage_blocks_description: Stiet brûkers ta om e-mailproviders en IP-adressen te blokkearjen
manage_custom_emojis: Lokale emojis beheare manage_custom_emojis: Lokale emojis beheare
manage_custom_emojis_description: Stiet brûkers ta om lokale emojis op de server te behearen manage_custom_emojis_description: Stiet brûkers ta om lokale emojis op de server te behearen
manage_federation: Federaasje beheare manage_federation: Federaasje beheare
@ -695,6 +723,7 @@ fy:
manage_taxonomies: Trends en hashtags beheare manage_taxonomies: Trends en hashtags beheare
manage_taxonomies_description: Stiet brûkers ta om trending ynhâld te besjen en om hashtagynstellingen by te wurkjen manage_taxonomies_description: Stiet brûkers ta om trending ynhâld te besjen en om hashtagynstellingen by te wurkjen
manage_user_access: Brûkerstagong beheare manage_user_access: Brûkerstagong beheare
manage_user_access_description: Stiet brûkers ta om twa-stapsferifikaasje fan oare brûkers út te skeakeljen, om harren e-mailadres te wizigjen en om harren wachtwurd opnij yn te stellen
manage_users: Brûkers beheare manage_users: Brûkers beheare
manage_users_description: Stiet brûkers ta om brûkersdetails fan oaren te besjen en moderaasjemaatregelen tsjin harren te nimmen manage_users_description: Stiet brûkers ta om brûkersdetails fan oaren te besjen en moderaasjemaatregelen tsjin harren te nimmen
manage_webhooks: Webhooks beheare manage_webhooks: Webhooks beheare
@ -769,6 +798,7 @@ fy:
destroyed_msg: Fuortsmiten website-oplaad slagge! destroyed_msg: Fuortsmiten website-oplaad slagge!
software_updates: software_updates:
critical_update: Krityk — fernij sa gau as mooglik critical_update: Krityk — fernij sa gau as mooglik
description: It wurdt oanrekommandearre om jo Mastodon-ynstallaasje by-de-tiid te hâlden om gebrûk meitsje te kinnen fan de nijste oplossingen en funksjes. Boppe dat is it somtiden krúsjaal om Mastodon tidich by te wurkjen om feiligheidsproblemen foar te kommen. Om dizze redenen kontrolearret Mastodon elke 30 minuten fernijingen en bringt jo hjirfan op de hichte neffens jo foarkarren foar e-mailmeldingen.
documentation_link: Mear ynfo documentation_link: Mear ynfo
release_notes: Utjefte-opmerkingen release_notes: Utjefte-opmerkingen
title: Beskikbere fernijingen title: Beskikbere fernijingen
@ -855,16 +885,39 @@ fy:
action: Klik hjir foar mear ynformaasje action: Klik hjir foar mear ynformaasje
message_html: "<strong>Jo objektûnthâld is ferkeard konfigurearre. De privacy fan jo brûkers is yn gefaar.</strong>" message_html: "<strong>Jo objektûnthâld is ferkeard konfigurearre. De privacy fan jo brûkers is yn gefaar.</strong>"
tags: tags:
moderation:
not_trendable: Net trendber
not_usable: Net brûkber
pending_review: Moat noch beoardiele wurde
review_requested: Beoardieling oanfrege
reviewed: Beoardiele
title: Status
trendable: Trendber
unreviewed: Net beoardiele
usable: Brûkber
name: Namme
newest: Nijste
oldest: Aldste
open: Yn it iepenbier besjen
reset: Opnij ynstelle
review: Steat beoardiele review: Steat beoardiele
search: Sykje
title: Hashtags
updated_msg: Hashtagynstellingen mei sukses bywurke updated_msg: Hashtagynstellingen mei sukses bywurke
title: Behear title: Behear
trends: trends:
allow: Tastean allow: Tastean
approved: Goedkarre approved: Goedkarre
confirm_allow: Binne jo wis dat jo de selektearre hashtags tastean wolle?
confirm_disallow: Binne jo wis dat jo de selektearre hashtags ôfkarre wolle?
disallow: Ofkarre disallow: Ofkarre
links: links:
allow: Keppeling goedkarre allow: Keppeling goedkarre
allow_provider: Auteur goedkarre allow_provider: Auteur goedkarre
confirm_allow: Binne jo wis dat jo de selektearre keppelingen tastean wolle?
confirm_allow_provider: Binne jo wis dat jo de selektearre websites tastean wolle?
confirm_disallow: Binne jo wis dat jo de selektearre keppelingen ôfkarre wolle?
confirm_disallow_provider: Binne jo wis dat jo de selektearre providers ôfkarre wolle?
description_html: Dit binne keppelingen dyt op dit stuit in protte dield wurde troch accounts wêrt jo server berjochten fan ûntfangt. Hjirtroch kinne jo brûkers sjen wat der yn de wrâld oan de hân is. Der wurde gjin keppelingen werjûn oant jo de website goedkard hawwe. Jo kinne ek yndividuele keppelingen goed- of ôfkarre. description_html: Dit binne keppelingen dyt op dit stuit in protte dield wurde troch accounts wêrt jo server berjochten fan ûntfangt. Hjirtroch kinne jo brûkers sjen wat der yn de wrâld oan de hân is. Der wurde gjin keppelingen werjûn oant jo de website goedkard hawwe. Jo kinne ek yndividuele keppelingen goed- of ôfkarre.
disallow: Keppeling ôfkarre disallow: Keppeling ôfkarre
disallow_provider: Website ôfkarre disallow_provider: Website ôfkarre
@ -888,6 +941,10 @@ fy:
statuses: statuses:
allow: Berjocht goedkarre allow: Berjocht goedkarre
allow_account: Account goedkarre allow_account: Account goedkarre
confirm_allow: Binne jo wis dat jo de selektearre statussen ofkarre wolle?
confirm_allow_account: Binne jo wis dat jo de selektearre accounts tastean wolle?
confirm_disallow: Binne jo wis dat jo de selektearre statussen ôfkarre wolle?
confirm_disallow_account: Binne jo wis dat jo de selektearre accounts ôfkarre wolle?
description_html: Dit binne berjochten dyt op jo server bekend binne en dyt op dit stuit in protte dield wurde en as favoryt markearre wurde. Hjirmei kinne nije en weromkearende brûkers mear minsken fine om te folgjen. Der wurde gjin berjochten yn it iepenbier werjûn oant de account troch jo goedkard is en de brûker tastiet dat harren account oan oaren oanrekommandearre wurdt. Jo kinne ek yndividuele berjochten goed- of ôfkarre. description_html: Dit binne berjochten dyt op jo server bekend binne en dyt op dit stuit in protte dield wurde en as favoryt markearre wurde. Hjirmei kinne nije en weromkearende brûkers mear minsken fine om te folgjen. Der wurde gjin berjochten yn it iepenbier werjûn oant de account troch jo goedkard is en de brûker tastiet dat harren account oan oaren oanrekommandearre wurdt. Jo kinne ek yndividuele berjochten goed- of ôfkarre.
disallow: Berjocht ôfkarre disallow: Berjocht ôfkarre
disallow_account: Account ôfkarre disallow_account: Account ôfkarre
@ -920,6 +977,7 @@ fy:
used_by_over_week: used_by_over_week:
one: Dizze wike troch ien persoan brûkt one: Dizze wike troch ien persoan brûkt
other: Dizze wike troch %{count} persoanen brûkt other: Dizze wike troch %{count} persoanen brûkt
title: Oanrekommandaasjes & trends
trending: Trending trending: Trending
warning_presets: warning_presets:
add_new: Nije tafoegje add_new: Nije tafoegje
@ -1004,7 +1062,9 @@ fy:
guide_link_text: Elkenien kin bydrage. guide_link_text: Elkenien kin bydrage.
sensitive_content: Gefoelige ynhâld sensitive_content: Gefoelige ynhâld
application_mailer: application_mailer:
notification_preferences: E-mailynstellingen wizigje
salutation: "%{name}," salutation: "%{name},"
settings: 'E-mailfoarkarren wizigje: %{link}'
unsubscribe: Ofmelde unsubscribe: Ofmelde
view: 'Besjoch:' view: 'Besjoch:'
view_profile: Profyl besjen view_profile: Profyl besjen
@ -1024,6 +1084,7 @@ fy:
hint_html: Noch ien ding! Jo moatte befêstigje dat jo in minske binne (dit is om de spam bûten de doar te hâlden!). Los de ûndersteande CAPTCHA op en klik op Trochgean. hint_html: Noch ien ding! Jo moatte befêstigje dat jo in minske binne (dit is om de spam bûten de doar te hâlden!). Los de ûndersteande CAPTCHA op en klik op Trochgean.
title: Befeiligingskontrôle title: Befeiligingskontrôle
confirmations: confirmations:
awaiting_review: Jo e-mailadres is befêstige! De %{domain}-meiwurkers binne no dwaande mei it besjen fan jo registraasje. Jo ûntfange in e-mailberjocht as de jo account goedkarre!
awaiting_review_title: Jo registraasje wurdt beoardield awaiting_review_title: Jo registraasje wurdt beoardield
clicking_this_link: klik op dizze keppeling clicking_this_link: klik op dizze keppeling
login_link: oanmelde login_link: oanmelde
@ -1031,6 +1092,7 @@ fy:
redirect_to_app_html: Jo soene omlaad wêze moatte nei de <strong>%{app_name}</strong> app. As dat net bard is, probearje dan %{clicking_this_link} of kear hânmjittich werom nei de app. redirect_to_app_html: Jo soene omlaad wêze moatte nei de <strong>%{app_name}</strong> app. As dat net bard is, probearje dan %{clicking_this_link} of kear hânmjittich werom nei de app.
registration_complete: Jo registraasje op %{domain} is no foltôge! registration_complete: Jo registraasje op %{domain} is no foltôge!
welcome_title: Wolkom, %{name}! welcome_title: Wolkom, %{name}!
wrong_email_hint: As it e-mailadres net korrekt is, kinne jo dat wizigje yn de accountynstellingen.
delete_account: Account fuortsmite delete_account: Account fuortsmite
delete_account_html: Wanneart jo jo account graach fuortsmite wolle, kinne jo dat <a href="%{path}">hjir dwaan</a>. Wy freegje jo dêr om in befêstiging. delete_account_html: Wanneart jo jo account graach fuortsmite wolle, kinne jo dat <a href="%{path}">hjir dwaan</a>. Wy freegje jo dêr om in befêstiging.
description: description:
@ -1051,6 +1113,7 @@ fy:
or_log_in_with: Of oanmelde mei or_log_in_with: Of oanmelde mei
privacy_policy_agreement_html: Ik haw it <a href="%{privacy_policy_path}" target="_blank">privacybelied</a> lêzen en gean dêrmei akkoard privacy_policy_agreement_html: Ik haw it <a href="%{privacy_policy_path}" target="_blank">privacybelied</a> lêzen en gean dêrmei akkoard
progress: progress:
confirm: E-mailadres werhelje
details: Jo gegevens details: Jo gegevens
review: Us beoardieling review: Us beoardieling
rules: Regels akseptearje rules: Regels akseptearje
@ -1072,8 +1135,10 @@ fy:
security: Befeiliging security: Befeiliging
set_new_password: Nij wachtwurd ynstelle set_new_password: Nij wachtwurd ynstelle
setup: setup:
email_below_hint_html: Kontrolearje jo map Net-winske, of freegje in nije befêstigingskeppeling oan. Jo kinne jo e-mailadres wizigje as it ferkeard is.
email_settings_hint_html: Klik op de keppeling dyt wy jo stjoerd hawwe om %{email} te ferifiearjen. Wy wachtsje wol even. email_settings_hint_html: Klik op de keppeling dyt wy jo stjoerd hawwe om %{email} te ferifiearjen. Wy wachtsje wol even.
link_not_received: Gjin keppeling krigen? link_not_received: Gjin keppeling krigen?
new_confirmation_instructions_sent: Jo ûntfange binnen inkelde minuten in nij e-mailberjocht mei de befêstigingskeppeling!
title: Kontrolearje jo Postfek YN title: Kontrolearje jo Postfek YN
sign_in: sign_in:
preamble_html: Meld jo oan mei de oanmeldgegevens fan <strong>%{domain}</strong>. As jo account op in oare server stiet, kinne jo hjir net oanmelde. preamble_html: Meld jo oan mei de oanmeldgegevens fan <strong>%{domain}</strong>. As jo account op in oare server stiet, kinne jo hjir net oanmelde.
@ -1084,7 +1149,9 @@ fy:
title: Litte wy jo account op %{domain} ynstelle. title: Litte wy jo account op %{domain} ynstelle.
status: status:
account_status: Accountsteat account_status: Accountsteat
confirming: Oan it wachtsjen oant it e-mailadres befêstige is.
functional: Jo account kin folslein brûkt wurde. functional: Jo account kin folslein brûkt wurde.
pending: Jo oanfraach moat noch beoardiele wurde troch ien fan ús meiwurkers. Dit kin miskien efkes duorje. Jo ûntfangt in e-mailberjocht wanneart jo oanfraach goedkard is.
redirecting_to: Jo account is ynaktyf, omdat it op dit stuit trochferwezen wurdt nei %{acct}. redirecting_to: Jo account is ynaktyf, omdat it op dit stuit trochferwezen wurdt nei %{acct}.
self_destruct: Omdat %{domain} sluten sil, krije jo mar beheind tagong ta jo account. self_destruct: Omdat %{domain} sluten sil, krije jo mar beheind tagong ta jo account.
view_strikes: Besjoch de earder troch moderatoaren fêststelde skeiningen dyt jo makke hawwe view_strikes: Besjoch de earder troch moderatoaren fêststelde skeiningen dyt jo makke hawwe
@ -1127,6 +1194,9 @@ fy:
before: 'Lês dizze tekst soarchfâldich eardat jo troch gean:' before: 'Lês dizze tekst soarchfâldich eardat jo troch gean:'
caches: Berjochten en media dyt op oare servers bewarre binne kinne dêr efterbliuwe caches: Berjochten en media dyt op oare servers bewarre binne kinne dêr efterbliuwe
data_removal: Jo berjochten en oare gegevens wurde permanint fuortmiten data_removal: Jo berjochten en oare gegevens wurde permanint fuortmiten
email_change_html: Jo kinne <a href="%{path}">jo e-mailadres wizigje</a> sûnder dat jo jo account fuort hoege te smiten
email_contact_html: Wanneart it noch hieltyd net oankomt, kinne jo foar help in e-mailberjocht stjoere nei <a href="mailto:%{email}">%{email}</a>
email_reconfirmation_html: Wanneart jo it befêstigings-e-mailberjocht net ûntfongen hawwe, kinne jo dizze <a href="%{path}">opnij oanfreegje</a>
irreversible: Jo sille net yn steat wêze om jo account te werstellen of te de-aktivearjen irreversible: Jo sille net yn steat wêze om jo account te werstellen of te de-aktivearjen
more_details_html: Sjoch it <a href="%{terms_path}">privacybelied</a> foar mear ynformaasje. more_details_html: Sjoch it <a href="%{terms_path}">privacybelied</a> foar mear ynformaasje.
username_available: Jo brûkersnamme sil wer beskikber komme username_available: Jo brûkersnamme sil wer beskikber komme
@ -1359,6 +1429,7 @@ fy:
authentication_methods: authentication_methods:
otp: twa-stapsferifikaasje-app otp: twa-stapsferifikaasje-app
password: wachtwurd password: wachtwurd
sign_in_token: befeiligingskoade fia e-mailberjocht
webauthn: befeiligingskaaien webauthn: befeiligingskaaien
description_html: Wanneart jo aktiviteit sjogge dyt jo net werkenne, tink dan nei om jo wachtwurd te wizigjen en twa-stapsferifikaasje yn te skeakeljen. description_html: Wanneart jo aktiviteit sjogge dyt jo net werkenne, tink dan nei om jo wachtwurd te wizigjen en twa-stapsferifikaasje yn te skeakeljen.
empty: Gjin oanmeldskiednis beskikber empty: Gjin oanmeldskiednis beskikber
@ -1369,6 +1440,16 @@ fy:
unsubscribe: unsubscribe:
action: Ja, ôfmelde action: Ja, ôfmelde
complete: Ofmelden complete: Ofmelden
confirmation_html: Binne jo wis dat jo jo ôfmelde wolle foar it ûntfangen fan %{type} fan Mastodon op %{domain} op jo e-mailadres %{email}? Jo kinne jo altyd opnij abonnearje yn jo <a href="%{settings_path}">ynstellingen foar e-mailmeldingen</a>.
emails:
notification_emails:
favourite: e-mailmeldingen foar favoriten
follow: e-mailmeldingen foar nije folgers
follow_request: e-mailmeldingen foar folchfersiken
mention: e-mailmeldingen foar fermeldingen
reblog: e-mailmeldingen foar boosts
resubscribe_html: As jo jo mei fersin ôfmeld hawwe, kinne jo jo opnij abonnearje yn jo <a href="%{settings_path}">ynstellingen foar e-mailmeldingen</a>.
success_html: Jo ûntfange net langer %{type} fan Mastodon op %{domain} op jo e-mailadres %{email}.
title: Ofmelde title: Ofmelde
media_attachments: media_attachments:
validations: validations:
@ -1449,6 +1530,8 @@ fy:
update: update:
subject: "%{name} hat in berjocht bewurke" subject: "%{name} hat in berjocht bewurke"
notifications: notifications:
administration_emails: E-mailmeldingen behearder
email_events: E-mailmeldingen foar eveneminten
email_events_hint: 'Selektearje eveneminten wêrfoart jo meldingen ûntfange wolle:' email_events_hint: 'Selektearje eveneminten wêrfoart jo meldingen ûntfange wolle:'
number: number:
human: human:
@ -1607,6 +1690,7 @@ fy:
import: Ymportearje import: Ymportearje
import_and_export: Ymportearje en eksportearje import_and_export: Ymportearje en eksportearje
migrate: Accountmigraasje migrate: Accountmigraasje
notifications: E-mailmeldingen
preferences: Ynstellingen preferences: Ynstellingen
profile: Profyl profile: Profyl
relationships: Folgers en folgjenden relationships: Folgers en folgjenden
@ -1853,6 +1937,7 @@ fy:
invalid_otp_token: Unjildige twa-stapstagongskoade invalid_otp_token: Unjildige twa-stapstagongskoade
otp_lost_help_html: As jo tagong ta beide kwytrekke binne, nim dan kontakt op fia %{email} otp_lost_help_html: As jo tagong ta beide kwytrekke binne, nim dan kontakt op fia %{email}
rate_limited: Te folle autentikaasjebesykjen, probearje it letter opnij. rate_limited: Te folle autentikaasjebesykjen, probearje it letter opnij.
seamless_external_login: Jo binne oanmeld fia in eksterne tsjinst, dêrom binne wachtwurden en e-mailynstellingen net beskikber.
signed_in_as: 'Oanmeld as:' signed_in_as: 'Oanmeld as:'
verification: verification:
extra_instructions_html: <strong>Tip:</strong> De keppeling op jo website kin ûnsichtber wêze. It wichtige part is <code>rel="me"</code> dat ympersonaasje op websites mei user-generated ynhâld foarkomt. Jo kinne sels in <code>link</code>-label brûke yn de header fan de side yn stee fan <code>a</code>, mar de HTML moat ek sûnder JavaScript tagonklik wêze. extra_instructions_html: <strong>Tip:</strong> De keppeling op jo website kin ûnsichtber wêze. It wichtige part is <code>rel="me"</code> dat ympersonaasje op websites mei user-generated ynhâld foarkomt. Jo kinne sels in <code>link</code>-label brûke yn de header fan de side yn stee fan <code>a</code>, mar de HTML moat ek sûnder JavaScript tagonklik wêze.

View file

@ -1454,6 +1454,7 @@ gl:
media_attachments: media_attachments:
validations: validations:
images_and_video: Non podes anexar un vídeo a unha publicación que xa contén imaxes images_and_video: Non podes anexar un vídeo a unha publicación que xa contén imaxes
not_found: Non se atopou o multimedia %{ids} ou xa é adxunto noutra publicación
not_ready: Non se poden anexar ficheiros que aínda se están a procesar. Agarda un intre! not_ready: Non se poden anexar ficheiros que aínda se están a procesar. Agarda un intre!
too_many: Non pode anexar máis de 4 ficheiros too_many: Non pode anexar máis de 4 ficheiros
migrations: migrations:

View file

@ -661,6 +661,7 @@ ia:
delete_data_html: Deler le profilo e contento de <strong>@%{acct}</strong> in 30 dies excepte si le suspension es disfacite intertanto delete_data_html: Deler le profilo e contento de <strong>@%{acct}</strong> in 30 dies excepte si le suspension es disfacite intertanto
preview_preamble_html: "<strong>@%{acct}</strong> recipera un advertimento con le sequente contento:" preview_preamble_html: "<strong>@%{acct}</strong> recipera un advertimento con le sequente contento:"
record_strike_html: Registra un sanction contra <strong>@%{acct}</strong> pro adjutar te a prender mesuras adequate in caso de futur violationes committite desde iste conto record_strike_html: Registra un sanction contra <strong>@%{acct}</strong> pro adjutar te a prender mesuras adequate in caso de futur violationes committite desde iste conto
send_email_html: Inviar un e-mail de advertimento a <strong>@%{acct}</strong>
warning_placeholder: Motivation supplementari facultative pro le action de moderation. warning_placeholder: Motivation supplementari facultative pro le action de moderation.
target_origin: Origine del conto reportate target_origin: Origine del conto reportate
title: Reportos title: Reportos
@ -700,6 +701,7 @@ ia:
manage_appeals: Gerer appellos manage_appeals: Gerer appellos
manage_appeals_description: Permitte que usatores revide appellos contra actiones de moderation manage_appeals_description: Permitte que usatores revide appellos contra actiones de moderation
manage_blocks: Gerer blocadas manage_blocks: Gerer blocadas
manage_blocks_description: Permitter que usatores bloca le fornitores de e-mail e le adresses IP
manage_custom_emojis: Gerer emojis personalisate manage_custom_emojis: Gerer emojis personalisate
manage_custom_emojis_description: Permitte que usatores gere emojis personalisate sur le servitor manage_custom_emojis_description: Permitte que usatores gere emojis personalisate sur le servitor
manage_federation: Gerer federation manage_federation: Gerer federation
@ -717,6 +719,7 @@ ia:
manage_taxonomies: Gerer taxonomias manage_taxonomies: Gerer taxonomias
manage_taxonomies_description: Permitte que usatores revide contento in tendentias e actualisa le parametros de hashtag manage_taxonomies_description: Permitte que usatores revide contento in tendentias e actualisa le parametros de hashtag
manage_user_access: Gerer le accesso de usatores manage_user_access: Gerer le accesso de usatores
manage_user_access_description: Permitte que usatores disactiva le authentication bifactorial de altere usatores, cambia lor adresses de e-mail, e reinitialisa lor contrasigno
manage_users: Gerer usatores manage_users: Gerer usatores
manage_users_description: Permitte que usatores vide le detalios de altere usatores e exeque actiones de moderation contra illes manage_users_description: Permitte que usatores vide le detalios de altere usatores e exeque actiones de moderation contra illes
manage_webhooks: Gerer Webhooks manage_webhooks: Gerer Webhooks
@ -791,6 +794,7 @@ ia:
destroyed_msg: Le file incargate al sito ha essite delite! destroyed_msg: Le file incargate al sito ha essite delite!
software_updates: software_updates:
critical_update: Critic per favor, actualisa rapidemente critical_update: Critic per favor, actualisa rapidemente
description: Il es recommendate mantener tu installation de Mastodon actualisate pro beneficiar del ultime reparationes e functiones. In ultra, de tempore a tempore, il es de importantia critic actualisar Mastodon in tempore utile pro evitar problemas de securitate. Pro iste rationes, Mastodon verifica le presentia de actualisationes cata 30 minutas, e te notificara secundo tu preferentias de notification in e-mail.
documentation_link: Pro saper plus documentation_link: Pro saper plus
release_notes: Notas de version release_notes: Notas de version
title: Actualisationes disponibile title: Actualisationes disponibile
@ -878,6 +882,7 @@ ia:
message_html: "<strong>Tu immagazinage de objectos es mal configurate. Le confidentialitate de tu usatores es in risco.</strong>" message_html: "<strong>Tu immagazinage de objectos es mal configurate. Le confidentialitate de tu usatores es in risco.</strong>"
tags: tags:
moderation: moderation:
not_trendable: Non pro tendentia
pending_review: Attende revision pending_review: Attende revision
title: Stato title: Stato
name: Nomine name: Nomine

View file

@ -1456,6 +1456,7 @@ it:
media_attachments: media_attachments:
validations: validations:
images_and_video: Impossibile allegare video a un post che contiene già immagini images_and_video: Impossibile allegare video a un post che contiene già immagini
not_found: Media %{ids} non trovato o già collegato a un altro post
not_ready: Impossibile allegare file per cui l'elaborazione non è finita. Riprova tra poco! not_ready: Impossibile allegare file per cui l'elaborazione non è finita. Riprova tra poco!
too_many: Impossibile allegare più di 4 file too_many: Impossibile allegare più di 4 file
migrations: migrations:

View file

@ -1430,6 +1430,7 @@ ko:
media_attachments: media_attachments:
validations: validations:
images_and_video: 이미 사진이 첨부된 게시물엔 동영상을 첨부할 수 없습니다. images_and_video: 이미 사진이 첨부된 게시물엔 동영상을 첨부할 수 없습니다.
not_found: 미디어 %{ids}는 찾을 수 없거나 이미 다른 게시물에 첨부되었습니다
not_ready: 처리가 끝나지 않은 파일은 첨부할 수 없습니다. 잠시 후에 다시 시도해 주세요! not_ready: 처리가 끝나지 않은 파일은 첨부할 수 없습니다. 잠시 후에 다시 시도해 주세요!
too_many: 최대 4개까지 첨부할 수 있습니다 too_many: 최대 4개까지 첨부할 수 있습니다
migrations: migrations:

View file

@ -941,6 +941,7 @@ lt:
media_attachments: media_attachments:
validations: validations:
images_and_video: Negalima pridėti video prie statuso, kuris jau turi nuotrauką images_and_video: Negalima pridėti video prie statuso, kuris jau turi nuotrauką
not_found: Medija %{ids} nerasta arba jau pridėta prie kito įrašo.
too_many: Negalima pridėti daugiau nei 4 failų too_many: Negalima pridėti daugiau nei 4 failų
migrations: migrations:
acct: Perkelta į acct: Perkelta į

View file

@ -1454,6 +1454,7 @@ nl:
media_attachments: media_attachments:
validations: validations:
images_and_video: Een video kan niet aan een bericht met afbeeldingen worden gekoppeld images_and_video: Een video kan niet aan een bericht met afbeeldingen worden gekoppeld
not_found: Media %{ids} niet gevonden of al toegevoegd aan een ander bericht
not_ready: Kan geen bestanden toevoegen die nog niet zijn verwerkt. Probeer het later opnieuw! not_ready: Kan geen bestanden toevoegen die nog niet zijn verwerkt. Probeer het later opnieuw!
too_many: Er kunnen niet meer dan 4 afbeeldingen toegevoegd worden too_many: Er kunnen niet meer dan 4 afbeeldingen toegevoegd worden
migrations: migrations:

View file

@ -1506,6 +1506,7 @@ pl:
media_attachments: media_attachments:
validations: validations:
images_and_video: Nie możesz załączyć pliku wideo do wpisu, który zawiera już zdjęcia images_and_video: Nie możesz załączyć pliku wideo do wpisu, który zawiera już zdjęcia
not_found: Nie znaleziono mediów %{ids}, lub są już dołączone do innego wpisu
not_ready: Nie można załączyć plików których przetwarzanie nie zostało ukończone. Spróbuj ponownie za chwilę! not_ready: Nie można załączyć plików których przetwarzanie nie zostało ukończone. Spróbuj ponownie za chwilę!
too_many: Nie możesz załączyć więcej niż 4 plików too_many: Nie możesz załączyć więcej niż 4 plików
migrations: migrations:

View file

@ -314,6 +314,7 @@ fy:
listable: Tastean dat dizze hashtag yn sykopdrachten en oanrekommandaasjes te sjen is listable: Tastean dat dizze hashtag yn sykopdrachten en oanrekommandaasjes te sjen is
name: Hashtag name: Hashtag
trendable: Goedkarre dat dizze hashtag ûnder trends te sjen is trendable: Goedkarre dat dizze hashtag ûnder trends te sjen is
usable: Berjochten tastean dizze hashtag lokaal te brûken
user: user:
role: Rol role: Rol
time_zone: Tiidsône time_zone: Tiidsône

View file

@ -1446,6 +1446,7 @@ sq:
media_attachments: media_attachments:
validations: validations:
images_and_video: Smund të bashkëngjitet video te një gjendje që përmban figura tashmë images_and_video: Smund të bashkëngjitet video te një gjendje që përmban figura tashmë
not_found: Su gjet media %{ids}, ose është bashkëngjitur tashmë një tjetër postimi
not_ready: Smund të bashkëngjiten kartela që skanë përfunduar së përpunuari. Riprovoni pas një çasti! not_ready: Smund të bashkëngjiten kartela që skanë përfunduar së përpunuari. Riprovoni pas një çasti!
too_many: Smund të bashkëngjiten më shumë se 4 kartela too_many: Smund të bashkëngjiten më shumë se 4 kartela
migrations: migrations:

View file

@ -1506,6 +1506,7 @@ uk:
media_attachments: media_attachments:
validations: validations:
images_and_video: Не можна додати відео до допису з зображеннями images_and_video: Не можна додати відео до допису з зображеннями
not_found: Медіа %{ids} не знайдено або вже прикріплено до іншого допису
not_ready: Не можна прикріпити файли, оброблення яких ще не закінчилося. Спробуйте ще раз через хвилину! not_ready: Не можна прикріпити файли, оброблення яких ще не закінчилося. Спробуйте ще раз через хвилину!
too_many: Не можна додати більше 4 файлів too_many: Не можна додати більше 4 файлів
migrations: migrations:

View file

@ -1428,6 +1428,7 @@ vi:
media_attachments: media_attachments:
validations: validations:
images_and_video: Không thể đính kèm video vào tút đã chứa hình ảnh images_and_video: Không thể đính kèm video vào tút đã chứa hình ảnh
not_found: Không tìm thấy %{ids} hoặc nó đã bị đính kèm với tút khác
not_ready: Tập tin này vẫn chưa xử lý xong. Hãy thử lại sau! not_ready: Tập tin này vẫn chưa xử lý xong. Hãy thử lại sau!
too_many: Không thể đính kèm hơn 4 tệp too_many: Không thể đính kèm hơn 4 tệp
migrations: migrations:

View file

@ -1430,6 +1430,7 @@ zh-TW:
media_attachments: media_attachments:
validations: validations:
images_and_video: 無法於已有圖片之嘟文中加入影片 images_and_video: 無法於已有圖片之嘟文中加入影片
not_found: 找不到多媒體 %{ids} 或已附加於另一嘟文中
not_ready: 修但幾勒!不能附加未完成處理的檔案欸,咁按呢? not_ready: 修但幾勒!不能附加未完成處理的檔案欸,咁按呢?
too_many: 無法加入超過 4 個檔案 too_many: 無法加入超過 4 個檔案
migrations: migrations:

View file

@ -1,22 +0,0 @@
# Be sure to restart your server when you modify this file.
# Your secret key is used for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
# You can use `rails secret` to generate a secure secret key.
# Make sure the secrets in this file are kept private
# if you're sharing your code publicly.
development:
secret_key_base: d4398e4af52f1fc5be5c3c8764e9ecce7beac5462826cb8b649373b2aad5a0f133598ed817c4e9931e943041460d6b6eda40a854e825e1bbd510c4594b1538f2
test:
secret_key_base: 5be187ddbd651211a906f9aa399f4a148edf6e06b971c7c0b5429b9483df6e21d262cc846447d0f89b89c32d56a99e151039df5dd874ede7f712afbe041a9269
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

View file

@ -21,6 +21,34 @@ describe JsonLdHelper do
end end
end end
describe '#uri_from_bearcap' do
subject { helper.uri_from_bearcap(string) }
context 'when a bear string has a u param' do
let(:string) { 'bear:?t=TOKEN&u=https://example.com/foo' }
it 'returns the value from the u query param' do
expect(subject).to eq('https://example.com/foo')
end
end
context 'when a bear string does not have a u param' do
let(:string) { 'bear:?t=TOKEN&h=https://example.com/foo' }
it 'returns nil' do
expect(subject).to be_nil
end
end
context 'when a non-bear string' do
let(:string) { 'http://example.com' }
it 'returns the string' do
expect(subject).to eq('http://example.com')
end
end
end
describe '#first_of_value' do describe '#first_of_value' do
context 'when value.is_a?(Array)' do context 'when value.is_a?(Array)' do
it 'returns value.first' do it 'returns value.first' do

View file

@ -23,12 +23,6 @@ describe StatusesHelper do
end end
end end
def status_text_summary(status)
return if status.spoiler_text.blank?
I18n.t('statuses.content_warning', warning: status.spoiler_text)
end
describe 'fa_visibility_icon' do describe 'fa_visibility_icon' do
context 'with a status that is public' do context 'with a status that is public' do
let(:status) { Status.new(visibility: 'public') } let(:status) { Status.new(visibility: 'public') }

View file

@ -0,0 +1,16 @@
# frozen_string_literal: true
require 'rails_helper'
describe AnnualReport do
describe '#generate' do
subject { described_class.new(account, Time.zone.now.year) }
let(:account) { Fabricate :account }
it 'builds a report for an account' do
expect { subject.generate }
.to change(GeneratedAnnualReport, :count).by(1)
end
end
end

View file

@ -114,10 +114,11 @@ describe '/api/v1/accounts' do
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
json = body_as_json expect(body_as_json)
.to include(
expect(json[:following]).to be true following: true,
expect(json[:requested]).to be false requested: false
)
expect(user.account.following?(other_account)).to be true expect(user.account.following?(other_account)).to be true
end end
@ -133,10 +134,11 @@ describe '/api/v1/accounts' do
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
json = body_as_json expect(body_as_json)
.to include(
expect(json[:following]).to be false following: false,
expect(json[:requested]).to be true requested: true
)
expect(user.account.requested?(other_account)).to be true expect(user.account.requested?(other_account)).to be true
end end

View file

@ -96,10 +96,11 @@ RSpec.describe 'Canonical Email Blocks' do
subject subject
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
json = body_as_json expect(body_as_json)
.to include(
expect(json[:id]).to eq(canonical_email_block.id.to_s) id: eq(canonical_email_block.id.to_s),
expect(json[:canonical_email_hash]).to eq(canonical_email_block.canonical_email_hash) canonical_email_hash: eq(canonical_email_block.canonical_email_hash)
)
end end
end end

View file

@ -133,10 +133,8 @@ RSpec.describe 'Domain Blocks' do
it 'creates a domain block with the expected domain name and severity', :aggregate_failures do it 'creates a domain block with the expected domain name and severity', :aggregate_failures do
subject subject
body = body_as_json
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
expect(body).to match a_hash_including( expect(body_as_json).to match a_hash_including(
{ {
domain: 'foo.bar.com', domain: 'foo.bar.com',
severity: 'silence', severity: 'silence',
@ -156,10 +154,8 @@ RSpec.describe 'Domain Blocks' do
it 'creates a domain block with the expected domain name and severity', :aggregate_failures do it 'creates a domain block with the expected domain name and severity', :aggregate_failures do
subject subject
body = body_as_json
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
expect(body).to match a_hash_including( expect(body_as_json).to match a_hash_including(
{ {
domain: 'foo.bar.com', domain: 'foo.bar.com',
severity: 'suspend', severity: 'suspend',

View file

@ -88,10 +88,12 @@ RSpec.describe 'IP Blocks' do
subject subject
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
json = body_as_json
expect(json[:ip]).to eq("#{ip_block.ip}/#{ip_block.ip.prefix}") expect(body_as_json)
expect(json[:severity]).to eq(ip_block.severity.to_s) .to include(
ip: eq("#{ip_block.ip}/#{ip_block.ip.prefix}"),
severity: eq(ip_block.severity.to_s)
)
end end
context 'when ip block does not exist' do context 'when ip block does not exist' do
@ -118,11 +120,12 @@ RSpec.describe 'IP Blocks' do
subject subject
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
json = body_as_json expect(body_as_json)
.to include(
expect(json[:ip]).to eq("#{params[:ip]}/32") ip: eq("#{params[:ip]}/32"),
expect(json[:severity]).to eq(params[:severity]) severity: eq(params[:severity]),
expect(json[:comment]).to eq(params[:comment]) comment: eq(params[:comment])
)
end end
context 'when the required ip param is not provided' do context 'when the required ip param is not provided' do

View file

@ -61,9 +61,10 @@ RSpec.describe 'Apps' do
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
expect(Doorkeeper::Application.find_by(name: client_name)).to be_present expect(Doorkeeper::Application.find_by(name: client_name)).to be_present
body = body_as_json expect(body_as_json)
.to include(
expect(body[:scopes]).to eq Doorkeeper.config.default_scopes.to_a scopes: Doorkeeper.config.default_scopes.to_a
)
end end
end end
@ -81,9 +82,10 @@ RSpec.describe 'Apps' do
expect(app).to be_present expect(app).to be_present
expect(app.scopes.to_s).to eq 'read' expect(app.scopes.to_s).to eq 'read'
body = body_as_json expect(body_as_json)
.to include(
expect(body[:scopes]).to eq ['read'] scopes: %w(read)
)
end end
end end
@ -163,10 +165,11 @@ RSpec.describe 'Apps' do
expect(app.redirect_uri).to eq redirect_uris expect(app.redirect_uri).to eq redirect_uris
expect(app.redirect_uris).to eq redirect_uris.split expect(app.redirect_uris).to eq redirect_uris.split
body = body_as_json expect(body_as_json)
.to include(
expect(body[:redirect_uri]).to eq redirect_uris redirect_uri: redirect_uris,
expect(body[:redirect_uris]).to eq redirect_uris.split redirect_uris: redirect_uris.split
)
end end
end end
@ -184,10 +187,11 @@ RSpec.describe 'Apps' do
expect(app.redirect_uri).to eq redirect_uris.join "\n" expect(app.redirect_uri).to eq redirect_uris.join "\n"
expect(app.redirect_uris).to eq redirect_uris expect(app.redirect_uris).to eq redirect_uris
body = body_as_json expect(body_as_json)
.to include(
expect(body[:redirect_uri]).to eq redirect_uris.join "\n" redirect_uri: redirect_uris.join("\n"),
expect(body[:redirect_uris]).to eq redirect_uris redirect_uris: redirect_uris
)
end end
end end

View file

@ -55,10 +55,8 @@ RSpec.describe 'Blocks' do
it 'queries the blocks in range according to max_id', :aggregate_failures do it 'queries the blocks in range according to max_id', :aggregate_failures do
subject subject
response_body = body_as_json expect(body_as_json)
.to contain_exactly(include(id: blocks.first.target_account.id.to_s))
expect(response_body.size).to be 1
expect(response_body[0][:id]).to eq(blocks[0].target_account.id.to_s)
end end
end end
@ -68,10 +66,8 @@ RSpec.describe 'Blocks' do
it 'queries the blocks in range according to since_id', :aggregate_failures do it 'queries the blocks in range according to since_id', :aggregate_failures do
subject subject
response_body = body_as_json expect(body_as_json)
.to contain_exactly(include(id: blocks[2].target_account.id.to_s))
expect(response_body.size).to be 1
expect(response_body[0][:id]).to eq(blocks[2].target_account.id.to_s)
end end
end end
end end

View file

@ -37,9 +37,7 @@ RSpec.describe 'FeaturedTags' do
it 'returns an empty body' do it 'returns an empty body' do
get '/api/v1/featured_tags', headers: headers get '/api/v1/featured_tags', headers: headers
body = body_as_json expect(body_as_json).to be_empty
expect(body).to be_empty
end end
end end
@ -49,10 +47,10 @@ RSpec.describe 'FeaturedTags' do
it 'returns only the featured tags belonging to the requesting user' do it 'returns only the featured tags belonging to the requesting user' do
get '/api/v1/featured_tags', headers: headers get '/api/v1/featured_tags', headers: headers
body = body_as_json expect(body_as_json.pluck(:id))
expected_ids = user_featured_tags.pluck(:id).map(&:to_s) .to match_array(
user_featured_tags.pluck(:id).map(&:to_s)
expect(body.pluck(:id)).to match_array(expected_ids) )
end end
end end
end end
@ -69,9 +67,10 @@ RSpec.describe 'FeaturedTags' do
it 'returns the correct tag name' do it 'returns the correct tag name' do
post '/api/v1/featured_tags', headers: headers, params: params post '/api/v1/featured_tags', headers: headers, params: params
body = body_as_json expect(body_as_json)
.to include(
expect(body[:name]).to eq(params[:name]) name: params[:name]
)
end end
it 'creates a new featured tag for the requesting user' do it 'creates a new featured tag for the requesting user' do
@ -142,9 +141,7 @@ RSpec.describe 'FeaturedTags' do
it 'returns an empty body' do it 'returns an empty body' do
delete "/api/v1/featured_tags/#{id}", headers: headers delete "/api/v1/featured_tags/#{id}", headers: headers
body = body_as_json expect(body_as_json).to be_empty
expect(body).to be_empty
end end
it 'deletes the featured tag', :inline_jobs do it 'deletes the featured tag', :inline_jobs do

View file

@ -17,13 +17,12 @@ RSpec.describe 'API Markers' do
end end
it 'returns markers', :aggregate_failures do it 'returns markers', :aggregate_failures do
json = body_as_json
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
expect(json.key?(:home)).to be true expect(body_as_json)
expect(json[:home][:last_read_id]).to eq '123' .to include(
expect(json.key?(:notifications)).to be true home: include(last_read_id: '123'),
expect(json[:notifications][:last_read_id]).to eq '456' notifications: include(last_read_id: '456')
)
end end
end end

View file

@ -58,10 +58,8 @@ RSpec.describe 'Mutes' do
it 'queries mutes in range according to max_id', :aggregate_failures do it 'queries mutes in range according to max_id', :aggregate_failures do
subject subject
body = body_as_json expect(body_as_json)
.to contain_exactly(include(id: mutes.first.target_account_id.to_s))
expect(body.size).to eq 1
expect(body[0][:id]).to eq mutes[0].target_account_id.to_s
end end
end end
@ -71,10 +69,8 @@ RSpec.describe 'Mutes' do
it 'queries mutes in range according to since_id', :aggregate_failures do it 'queries mutes in range according to since_id', :aggregate_failures do
subject subject
body = body_as_json expect(body_as_json)
.to contain_exactly(include(id: mutes[1].target_account_id.to_s))
expect(body.size).to eq 1
expect(body[0][:id]).to eq mutes[1].target_account_id.to_s
end end
end end

View file

@ -24,11 +24,14 @@ describe 'API V1 Statuses Reblogs' do
expect(user.account.reblogged?(status)).to be true expect(user.account.reblogged?(status)).to be true
hash_body = body_as_json expect(body_as_json)
.to include(
expect(hash_body[:reblog][:id]).to eq status.id.to_s reblog: include(
expect(hash_body[:reblog][:reblogs_count]).to eq 1 id: status.id.to_s,
expect(hash_body[:reblog][:reblogged]).to be true reblogs_count: 1,
reblogged: true
)
)
end end
end end
@ -57,11 +60,12 @@ describe 'API V1 Statuses Reblogs' do
expect(user.account.reblogged?(status)).to be false expect(user.account.reblogged?(status)).to be false
hash_body = body_as_json expect(body_as_json)
.to include(
expect(hash_body[:id]).to eq status.id.to_s id: status.id.to_s,
expect(hash_body[:reblogs_count]).to eq 0 reblogs_count: 0,
expect(hash_body[:reblogged]).to be false reblogged: false
)
end end
end end
@ -81,11 +85,12 @@ describe 'API V1 Statuses Reblogs' do
expect(user.account.reblogged?(status)).to be false expect(user.account.reblogged?(status)).to be false
hash_body = body_as_json expect(body_as_json)
.to include(
expect(hash_body[:id]).to eq status.id.to_s id: status.id.to_s,
expect(hash_body[:reblogs_count]).to eq 0 reblogs_count: 0,
expect(hash_body[:reblogged]).to be false reblogged: false
)
end end
end end

View file

@ -32,10 +32,8 @@ RSpec.describe 'Suggestions' do
it 'returns accounts' do it 'returns accounts' do
subject subject
body = body_as_json expect(body_as_json)
.to contain_exactly(include(id: bob.id.to_s), include(id: jeff.id.to_s))
expect(body.size).to eq 2
expect(body.pluck(:id)).to match_array([bob, jeff].map { |i| i.id.to_s })
end end
context 'with limit param' do context 'with limit param' do

View file

@ -42,9 +42,11 @@ RSpec.describe 'API V2 Filters Keywords' do
it 'creates a filter', :aggregate_failures do it 'creates a filter', :aggregate_failures do
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
json = body_as_json expect(body_as_json)
expect(json[:keyword]).to eq 'magic' .to include(
expect(json[:whole_word]).to be false keyword: 'magic',
whole_word: false
)
filter = user.account.custom_filters.first filter = user.account.custom_filters.first
expect(filter).to_not be_nil expect(filter).to_not be_nil
@ -71,9 +73,11 @@ RSpec.describe 'API V2 Filters Keywords' do
it 'responds with the keyword', :aggregate_failures do it 'responds with the keyword', :aggregate_failures do
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
json = body_as_json expect(body_as_json)
expect(json[:keyword]).to eq 'foo' .to include(
expect(json[:whole_word]).to be false keyword: 'foo',
whole_word: false
)
end end
context "when trying to access another user's filter keyword" do context "when trying to access another user's filter keyword" do

View file

@ -43,8 +43,10 @@ RSpec.describe 'API V2 Filters Statuses' do
it 'creates a filter', :aggregate_failures do it 'creates a filter', :aggregate_failures do
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
json = body_as_json expect(body_as_json)
expect(json[:status_id]).to eq status.id.to_s .to include(
status_id: status.id.to_s
)
filter = user.account.custom_filters.first filter = user.account.custom_filters.first
expect(filter).to_not be_nil expect(filter).to_not be_nil
@ -71,8 +73,10 @@ RSpec.describe 'API V2 Filters Statuses' do
it 'responds with the filter', :aggregate_failures do it 'responds with the filter', :aggregate_failures do
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
json = body_as_json expect(body_as_json)
expect(json[:status_id]).to eq status_filter.status_id.to_s .to include(
status_id: status_filter.status.id.to_s
)
end end
context "when trying to access another user's filter keyword" do context "when trying to access another user's filter keyword" do

View file

@ -58,12 +58,15 @@ RSpec.describe 'Filters' do
it 'returns a filter with keywords', :aggregate_failures do it 'returns a filter with keywords', :aggregate_failures do
subject subject
json = body_as_json expect(body_as_json)
.to include(
expect(json[:title]).to eq 'magic' title: 'magic',
expect(json[:filter_action]).to eq 'hide' filter_action: 'hide',
expect(json[:context]).to eq ['home'] context: %w(home),
expect(json[:keywords].map { |keyword| keyword.slice(:keyword, :whole_word) }).to match [{ keyword: 'magic', whole_word: true }] keywords: contain_exactly(
include(keyword: 'magic', whole_word: true)
)
)
end end
it 'creates a filter', :aggregate_failures do it 'creates a filter', :aggregate_failures do

View file

@ -129,9 +129,11 @@ describe 'The /.well-known/webfinger endpoint' do
end end
it 'returns links for the internal account' do it 'returns links for the internal account' do
json = body_as_json expect(body_as_json)
expect(json[:subject]).to eq 'acct:mastodon.internal@cb6e6126.ngrok.io' .to include(
expect(json[:aliases]).to eq ['https://cb6e6126.ngrok.io/actor'] subject: 'acct:mastodon.internal@cb6e6126.ngrok.io',
aliases: ['https://cb6e6126.ngrok.io/actor']
)
end end
end end

View file

@ -34,7 +34,7 @@ RSpec.describe PostStatusService do
it 'schedules a status for future creation and does not create one immediately' do it 'schedules a status for future creation and does not create one immediately' do
media = Fabricate(:media_attachment, account: account) media = Fabricate(:media_attachment, account: account)
status = subject.call(account, text: 'Hi future!', media_ids: [media.id], scheduled_at: future) status = subject.call(account, text: 'Hi future!', media_ids: [media.id.to_s], scheduled_at: future)
expect(status) expect(status)
.to be_a(ScheduledStatus) .to be_a(ScheduledStatus)
@ -42,7 +42,7 @@ RSpec.describe PostStatusService do
scheduled_at: eq(future), scheduled_at: eq(future),
params: include( params: include(
'text' => eq('Hi future!'), 'text' => eq('Hi future!'),
'media_ids' => contain_exactly(media.id) 'media_ids' => contain_exactly(media.id.to_s)
) )
) )
expect(media.reload.status).to be_nil expect(media.reload.status).to be_nil
@ -219,7 +219,7 @@ RSpec.describe PostStatusService do
status = subject.call( status = subject.call(
account, account,
text: 'test status update', text: 'test status update',
media_ids: [media.id] media_ids: [media.id.to_s]
) )
expect(media.reload.status).to eq status expect(media.reload.status).to eq status
@ -233,7 +233,7 @@ RSpec.describe PostStatusService do
subject.call( subject.call(
account, account,
text: 'test status update', text: 'test status update',
media_ids: [media.id] media_ids: [media.id.to_s]
) )
end.to raise_error( end.to raise_error(
Mastodon::ValidationError, Mastodon::ValidationError,
@ -249,7 +249,7 @@ RSpec.describe PostStatusService do
subject.call( subject.call(
account, account,
text: 'test status update', text: 'test status update',
media_ids: Array.new(2) { Fabricate(:media_attachment, account: account) }.map(&:id) media_ids: Array.new(2) { Fabricate(:media_attachment, account: account) }.map { |m| m.id.to_s }
) )
end.to raise_error( end.to raise_error(
Mastodon::ValidationError, Mastodon::ValidationError,
@ -271,7 +271,7 @@ RSpec.describe PostStatusService do
media_ids: [ media_ids: [
video, video,
image, image,
].map(&:id) ].map { |m| m.id.to_s }
) )
end.to raise_error( end.to raise_error(
Mastodon::ValidationError, Mastodon::ValidationError,

View file

@ -69,7 +69,7 @@ RSpec.describe UpdateStatusService do
before do before do
status.media_attachments << detached_media_attachment status.media_attachments << detached_media_attachment
subject.call(status, status.account_id, text: 'Foo', media_ids: [attached_media_attachment.id]) subject.call(status, status.account_id, text: 'Foo', media_ids: [attached_media_attachment.id.to_s])
end end
it 'updates media attachments' do it 'updates media attachments' do
@ -95,7 +95,7 @@ RSpec.describe UpdateStatusService do
before do before do
status.media_attachments << media_attachment status.media_attachments << media_attachment
subject.call(status, status.account_id, text: 'Foo', media_ids: [media_attachment.id], media_attributes: [{ id: media_attachment.id, description: 'New description' }]) subject.call(status, status.account_id, text: 'Foo', media_ids: [media_attachment.id.to_s], media_attributes: [{ id: media_attachment.id, description: 'New description' }])
end end
it 'does not detach media attachment' do it 'does not detach media attachment' do