Merge commit '989ca63b596c9006c5606edd4e66498e29e83489' into glitch-soc/merge-upstream

This commit is contained in:
Claire
2025-06-06 12:56:00 +02:00
25 changed files with 166 additions and 99 deletions

View File

@@ -47,8 +47,8 @@ body:
attributes:
label: Mastodon version
description: |
This is displayed at the bottom of the About page, eg. `v4.4.0-alpha.1`
placeholder: v4.3.0
This is displayed at the bottom of the About page, eg. `v4.4.0-beta.1`
placeholder: v4.4.0-beta.1
validations:
required: true
- type: input
@@ -56,7 +56,7 @@ body:
label: Browser name and version
description: |
What browser are you using when getting this bug? Please specify the version as well.
placeholder: Firefox 131.0.0
placeholder: Firefox 139.0.0
validations:
required: true
- type: input
@@ -64,7 +64,7 @@ body:
label: Operating system
description: |
What OS are you running? Please specify the version as well.
placeholder: macOS 15.0.1
placeholder: macOS 15.5
validations:
required: true
- type: textarea

View File

@@ -48,8 +48,8 @@ body:
attributes:
label: Mastodon version
description: |
This is displayed at the bottom of the About page, eg. `v4.4.0-alpha.1`
placeholder: v4.3.0
This is displayed at the bottom of the About page, eg. `v4.4.0-beta.1`
placeholder: v4.4.0-beta.1
validations:
required: false
- type: textarea
@@ -59,7 +59,7 @@ body:
Any additional technical details you may have, like logs or error traces
value: |
If this is happening on your own Mastodon server, please fill out those:
- Ruby version: (from `ruby --version`, eg. v3.4.1)
- Node.js version: (from `node --version`, eg. v20.18.0)
- Ruby version: (from `ruby --version`, eg. v3.4.4)
- Node.js version: (from `node --version`, eg. v22.16.0)
validations:
required: false

View File

@@ -49,7 +49,7 @@ body:
label: Mastodon version
description: |
This is displayed at the bottom of the About page, eg. `v4.4.0-alpha.1`
placeholder: v4.3.0
placeholder: v4.4.0-beta.1
validations:
required: false
- type: textarea
@@ -59,9 +59,9 @@ body:
Details about your environment, like how Mastodon is deployed, if containers are used, version numbers, etc.
value: |
Please at least include those informations:
- Operating system: (eg. Ubuntu 22.04)
- Ruby version: (from `ruby --version`, eg. v3.4.1)
- Node.js version: (from `node --version`, eg. v20.18.0)
- Operating system: (eg. Ubuntu 24.04.2)
- Ruby version: (from `ruby --version`, eg. v3.4.4)
- Node.js version: (from `node --version`, eg. v22.16.0)
validations:
required: false
- type: textarea

View File

@@ -794,7 +794,7 @@ GEM
ruby-saml (1.18.0)
nokogiri (>= 1.13.10)
rexml
ruby-vips (2.2.3)
ruby-vips (2.2.4)
ffi (~> 1.12)
logger
rubyzip (2.4.1)

View File

@@ -301,6 +301,7 @@
"hashtag.follow": "Heuliañ ar ger-klik",
"hashtag.unfollow": "Paouez heuliañ an hashtag",
"hashtags.and_other": "…{count, plural, one {hag # all} other {ha # all}}",
"home.column_settings.show_quotes": "Diskouez an arroudennoù",
"home.column_settings.show_reblogs": "Diskouez ar skignadennoù",
"home.column_settings.show_replies": "Diskouez ar respontoù",
"home.hide_announcements": "Kuzhat ar c'hemennoù",

View File

@@ -430,6 +430,7 @@
"hints.profiles.see_more_posts": "Zobrazit další příspěvky na {domain}",
"hints.threads.replies_may_be_missing": "Odpovědi z jiných serverů mohou chybět.",
"hints.threads.see_more": "Zobrazit další odpovědi na {domain}",
"home.column_settings.show_quotes": "Zobrazit citace",
"home.column_settings.show_reblogs": "Zobrazit boosty",
"home.column_settings.show_replies": "Zobrazit odpovědi",
"home.hide_announcements": "Skrýt oznámení",

View File

@@ -430,6 +430,7 @@
"hints.profiles.see_more_posts": "Weitere Beiträge auf {domain} ansehen",
"hints.threads.replies_may_be_missing": "Möglicherweise werden nicht alle Antworten von anderen Servern angezeigt.",
"hints.threads.see_more": "Weitere Antworten auf {domain} ansehen",
"home.column_settings.show_quotes": "Zitierte Beiträge anzeigen",
"home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
"home.column_settings.show_replies": "Antworten anzeigen",
"home.hide_announcements": "Ankündigungen ausblenden",

View File

@@ -430,6 +430,7 @@
"hints.profiles.see_more_posts": "Ver más mensajes en {domain}",
"hints.threads.replies_may_be_missing": "Es posible que falten respuestas de otros servidores.",
"hints.threads.see_more": "Ver más respuestas en {domain}",
"home.column_settings.show_quotes": "Mostrar citas",
"home.column_settings.show_reblogs": "Mostrar adhesiones",
"home.column_settings.show_replies": "Mostrar respuestas",
"home.hide_announcements": "Ocultar anuncios",

View File

@@ -430,6 +430,7 @@
"hints.profiles.see_more_posts": "Näytä lisää julkaisuja palvelimella {domain}",
"hints.threads.replies_may_be_missing": "Muiden palvelinten vastauksia saattaa puuttua.",
"hints.threads.see_more": "Näytä lisää vastauksia palvelimella {domain}",
"home.column_settings.show_quotes": "Näytä lainaukset",
"home.column_settings.show_reblogs": "Näytä tehostukset",
"home.column_settings.show_replies": "Näytä vastaukset",
"home.hide_announcements": "Piilota tiedotteet",

View File

@@ -430,6 +430,7 @@
"hints.profiles.see_more_posts": "Sí fleiri postar á {domain}",
"hints.threads.replies_may_be_missing": "Svar frá øðrum ambætarum mangla møguliga.",
"hints.threads.see_more": "Sí fleiri svar á {domain}",
"home.column_settings.show_quotes": "Vís siteringar",
"home.column_settings.show_reblogs": "Vís lyft",
"home.column_settings.show_replies": "Vís svar",
"home.hide_announcements": "Fjal kunngerðir",

View File

@@ -1,6 +1,7 @@
{
"about.blocks": "Servidores suxeitos a moderación",
"about.contact": "Contacto:",
"about.default_locale": "Por defecto",
"about.disclaimer": "Mastodon é software libre, de código aberto, e unha marca comercial de Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Motivo non indicado",
"about.domain_blocks.preamble": "Mastodon de xeito xeral permíteche ver contidos doutros servidores do fediverso e interactuar coas súas usuarias. Estas son as excepcións que se estabeleceron neste servidor en particular.",
@@ -8,6 +9,7 @@
"about.domain_blocks.silenced.title": "Limitado",
"about.domain_blocks.suspended.explanation": "Non se procesarán, almacenarán nin intercambiarán datos con este servidor, o que fai imposible calquera interacción ou comunicación coas usuarias deste servidor.",
"about.domain_blocks.suspended.title": "Suspendido",
"about.language_label": "Idioma",
"about.not_available": "Esta información non está dispoñible neste servidor.",
"about.powered_by": "Comunicación social descentralizada grazas a {mastodon}",
"about.rules": "Regras do servidor",
@@ -428,6 +430,7 @@
"hints.profiles.see_more_posts": "Mira máis publicacións en {domain}",
"hints.threads.replies_may_be_missing": "Poderían faltar respostas desde outros servidores.",
"hints.threads.see_more": "Mira máis respostas en {domain}",
"home.column_settings.show_quotes": "Mostrar citas",
"home.column_settings.show_reblogs": "Amosar compartidos",
"home.column_settings.show_replies": "Amosar respostas",
"home.hide_announcements": "Agochar anuncios",

View File

@@ -430,6 +430,7 @@
"hints.profiles.see_more_posts": "Bekijk meer berichten op {domain}",
"hints.threads.replies_may_be_missing": "Antwoorden van andere servers kunnen ontbreken.",
"hints.threads.see_more": "Bekijk meer reacties op {domain}",
"home.column_settings.show_quotes": "Citaten tonen",
"home.column_settings.show_reblogs": "Boosts tonen",
"home.column_settings.show_replies": "Reacties tonen",
"home.hide_announcements": "Mededelingen verbergen",

View File

@@ -425,6 +425,7 @@
"hints.profiles.see_more_posts": "Shihni më tepër postime në {domain}",
"hints.threads.replies_may_be_missing": "Mund të mungojnë përgjigje nga shërbyes të tjerë.",
"hints.threads.see_more": "Shihni më tepër përgjigje në {domain}",
"home.column_settings.show_quotes": "Shfaq thonjëza",
"home.column_settings.show_reblogs": "Shfaq përforcime",
"home.column_settings.show_replies": "Shfaq përgjigje",
"home.hide_announcements": "Fshihi lajmërimet",

View File

@@ -125,8 +125,8 @@
"attachments_list.unprocessed": "(nasin open)",
"audio.hide": "o len e kalama",
"block_modal.remote_users_caveat": "mi pana e wile sina tawa ma {domain}. taso, o sona: ma li ken kepeken nasin len ante la pakala li ken lon. toki pi lukin ale la jan pi ma ala li ken lukin.",
"block_modal.show_less": "o pana e lili",
"block_modal.show_more": "o pana e mute",
"block_modal.show_less": "o lili e toki",
"block_modal.show_more": "o suli e toki",
"block_modal.they_cant_mention": "ona li ken ala toki tawa sina li ken ala kute e sina.",
"block_modal.they_cant_see_posts": "ona li ken ala lukin e toki sina. sina ken ala lukin e toki ona.",
"block_modal.they_will_know": "ona li ken sona e ni: sina len e ona.",
@@ -135,7 +135,7 @@
"boost_modal.combo": "sina ken luka e nena {combo} tawa ni: sina wile ala luka e nena lon tenpo kama",
"boost_modal.reblog": "o wawa ala wawa e toki?",
"boost_modal.undo_reblog": "o weka ala weka e wawa toki?",
"bundle_column_error.copy_stacktrace": "o awen e sona pakala lon ilo sina",
"bundle_column_error.copy_stacktrace": "o jo e sona pakala lon ilo sina",
"bundle_column_error.error.body": "ilo li ken ala pana e lipu ni. ni li ken tan pakala ilo.",
"bundle_column_error.error.title": "pakala a!",
"bundle_column_error.network.body": "mi lukin pana e lipu la, pakala li lon. ken la, pakala li tan ilo nanpa sina. ken la, pakala li tan ilo nanpa suli pi ma kulupu ni.",
@@ -143,7 +143,7 @@
"bundle_column_error.retry": "o alasa sin",
"bundle_column_error.return": "o tawa open",
"bundle_column_error.routing.body": "ilo li sona ala e lipu wile. sina pana ala pana e nasin pona tawa lipu?",
"bundle_column_error.routing.title": "pakala nanpa 404",
"bundle_column_error.routing.title": "pakala #404",
"bundle_modal_error.close": "o pini",
"bundle_modal_error.message": "ilo li wile kama e ijo ni, taso pakala li lon.",
"bundle_modal_error.retry": "o alasa sin",
@@ -188,26 +188,26 @@
"compose.published.body": "toki li pana.",
"compose.published.open": "o lukin",
"compose.saved.body": "ilo li awen e ijo pana sina.",
"compose_form.direct_message_warning_learn_more": "o kama sona e ijo ante",
"compose_form.direct_message_warning_learn_more": "o kama sona",
"compose_form.encryption_warning": "toki li len ala lon ilo Masoton ꞏ o pana ala e sona suli len lon ilo Masoton",
"compose_form.lock_disclaimer": "lipu sina li open, li {locked} ala. jan ale li ken kama kute e sina, li ken lukin e toki sama ni.",
"compose_form.lock_disclaimer.lock": "pini",
"compose_form.placeholder": "sina wile toki e seme?",
"compose_form.poll.duration": "tenpo pana",
"compose_form.poll.multiple": "pana mute",
"compose_form.poll.multiple": "mute pana",
"compose_form.poll.option_placeholder": "ken nanpa {number}",
"compose_form.poll.single": "toki pi wan taso",
"compose_form.poll.single": "ken pi wan taso",
"compose_form.poll.switch_to_multiple": "o ante e nasin pana. pana mute o ken",
"compose_form.poll.switch_to_single": "o ante e nasin pana. pana wan taso o lon",
"compose_form.poll.type": "nasin",
"compose_form.publish": "o toki",
"compose_form.publish_form": "o open toki sin",
"compose_form.publish_form": "o toki sin",
"compose_form.reply": "o toki lon ijo ni",
"compose_form.save_changes": "o sin e ni",
"compose_form.save_changes": "o sin",
"compose_form.spoiler.marked": "o weka e toki pi ijo ike ken",
"compose_form.spoiler.unmarked": "o pali e toki pi ijo ike ken",
"compose_form.spoiler_placeholder": "toki pi ijo ike ken (sina ken ala e ni)",
"confirmation_modal.cancel": "o weka",
"confirmation_modal.cancel": "ala",
"confirmations.block.confirm": "o len",
"confirmations.delete.confirm": "o weka",
"confirmations.delete.message": "sina wile ala wile weka e toki ni?",
@@ -225,49 +225,56 @@
"confirmations.follow_to_list.title": "sina wile ala wile kute?",
"confirmations.logout.confirm": "o weka",
"confirmations.logout.message": "sina wile ala wile weka",
"confirmations.logout.title": "o weka?",
"confirmations.missing_alt_text.confirm": "pana e toki pi sona lukin",
"confirmations.logout.title": "o weka ala weka?",
"confirmations.missing_alt_text.confirm": "o pana e toki pi sona lukin",
"confirmations.missing_alt_text.message": "toki ni la sitelen li lon. taso toki pi sona lukin li lon ala. toki pi sona lukin li pona tan ni: jan ale li ken sona e toki.",
"confirmations.missing_alt_text.secondary": "o pana a",
"confirmations.missing_alt_text.title": "o pana e toki pi sona lukin",
"confirmations.missing_alt_text.title": "o pana ala pana e toki pi sona lukin?",
"confirmations.mute.confirm": "o len",
"confirmations.redraft.confirm": "o weka o pali sin e toki",
"confirmations.redraft.message": "pali sin e toki ni la sina wile ala wile weka e ona? sina ni la suli pi toki ni en wawa pi toki ni li weka. kin la toki lon toki ni li jo e mama ala.",
"confirmations.redraft.title": "ni li weka li pali sin e toki ni.",
"confirmations.reply.confirm": "toki lon toki ni",
"confirmations.reply.message": "sina toki lon toki ni la toki pali sina li weka. sina wile ala wile e ni?",
"confirmations.remove_from_followers.confirm": "o kama kute ala e jan",
"confirmations.remove_from_followers.message": "{name} li kama kute ala e sina. sina wile ala wile e ni?",
"confirmations.remove_from_followers.title": "o kama ala kama kute ala e jan?",
"confirmations.reply.confirm": "o weka",
"confirmations.reply.message": "sina pana e toki tawa lipu ante la ni li weka e toki sina lon. sina wile ala wile weka e toki ni?",
"confirmations.reply.title": "sina wile ala wile weka e toki lon?",
"confirmations.unfollow.confirm": "o kute ala",
"confirmations.unfollow.message": "sina o wile ala wile pini kute e jan {name}?",
"confirmations.unfollow.title": "sina wile ala wile pini kute?",
"content_warning.hide": "o len",
"content_warning.show": "o lukin",
"content_warning.show": "o lukin a",
"content_warning.show_more": "o lukin",
"conversation.delete": "o weka e toki ni",
"conversation.mark_as_read": "ni o sin ala",
"conversation.open": "o lukin e toki",
"conversation.with": "lon {names}",
"copy_icon_button.copied": "toki li awen lon ilo sina",
"copy_icon_button.copied": "sina jo e toki",
"copypaste.copied": "sina jo e toki",
"copypaste.copy_to_clipboard": "o awen lon ilo sina",
"copypaste.copy_to_clipboard": "o jo e toki",
"directory.federated": "tan lipu ante sona",
"directory.local": "tan {domain} taso",
"directory.local": "tan ma {domain} taso",
"directory.new_arrivals": "jan pi kama sin",
"directory.recently_active": "jan lon tenpo poka",
"disabled_account_banner.account_settings": "wile pi lipu jan",
"disabled_account_banner.text": "sina ken ala kepeken e lipu jan sina pi nimi {disabledAccount}.",
"dismissable_banner.community_timeline": "ni li toki pi tenpo poka tawa ale tan jan lon ma lawa pi nimi {domain}.",
"disabled_account_banner.text": "sina ken ala lon sijelo {disabledAccount}.",
"dismissable_banner.community_timeline": "ni li toki suli pi len ala lon ma {domain} tan tenpo poka.",
"dismissable_banner.dismiss": "o weka",
"dismissable_banner.explore_links": "tenpo suno ni la jan pi kulupu ale li toki e ijo sin ni. ijo sin pi jan ante mute li sewi lon lipu ni.",
"dismissable_banner.explore_statuses": "jan mute li lukin e toki ni tan ma ilo weka. toki sin en toki pi wawa mute li lon sewi.",
"dismissable_banner.explore_links": "tenpo poka la jan pi kulupu ale li toki e ijo sin ni. ijo sin pi jan ante mute li sewi lon lipu ni.",
"dismissable_banner.explore_statuses": "tenpo poka la jan pi kulupu ale li toki e ijo ni. ijo sin pi jan ante mute li sewi lon lipu ni.",
"dismissable_banner.explore_tags": "tenpo poka la jan pi kulupu ale li toki e ijo ni. ijo sin pi jan ante mute li sewi lon lipu ni.",
"domain_block_modal.block": "o len e ma",
"domain_block_modal.block_account_instead": "o len e @{name}",
"domain_block_modal.block_account_instead": "o len e @{name} a",
"domain_block_modal.they_can_interact_with_old_posts": "jan pi ma ni li ken ijo e toki sina.",
"domain_block_modal.they_cant_follow": "jan pi ma ni li ken ala kute e sina.",
"domain_block_modal.they_wont_know": "ona li sona ala e ni: sina len e ona.",
"domain_block_modal.title": "sina wile ala wile len e ma?",
"domain_block_modal.you_will_lose_num_followers": "{followersCount, plural, other {jan {followersCountDisplay}}} li kute e sina la, ona kama kute ala e sina. sina kute e {followingCount, plural,other {jan {followingCountDisplay}}} la, sina kama kute ala e ona.",
"domain_block_modal.you_will_lose_relationships": "jan li lon kulupu ni la ona kute e sina la, ona li kama kute ala e sina. jan li lon kulupu ni la sina kute e ona la, sina kama kute ala e ona.",
"domain_block_modal.you_wont_see_posts": "sina ken ala lukin e toki tan jan pi ma ni",
"domain_pill.activitypub_lets_connect": "ilo ni la sina ken toki tawa jan ante. ni li lon ma Masoton taso ala li lon ma mute a.",
"domain_pill.activitypub_like_language": "ilo Masoton li toki kepeken nasin ActivityPub tawa kulupu ilo ante.",
"domain_pill.server": "ma",
"domain_pill.their_handle": "nimi pi ona taso li ni:",
"domain_pill.their_server": "ni li ma ona lon ilo. toki ale ona li lon ma ni.",
@@ -304,8 +311,8 @@
"empty_column.favourited_statuses": "sina suli ala e toki. sina suli e toki la sina ken lukin e toki ni lon ni.",
"empty_column.favourites": "jan ala li suli e toki ni. jan li suli e toki ni la sina ken lukin e ona lon ni.",
"empty_column.follow_requests": "jan ala li toki pi wile kute tawa sina. jan li toki pi wile kute tawa sina la sina ken lukin e toki ni lon ni.",
"empty_column.followed_tags": "sina alasa ala e toki ꞏ sina alasa e toki la toki li lon ni",
"empty_column.hashtag": "ala li lon toki ni",
"empty_column.followed_tags": "sina kute ala e kulupu lipu. sina kute la toki li kama lon ni.",
"empty_column.hashtag": "toki ala li lon kulupu ni.",
"empty_column.home": "ala a li lon lipu open sina! sina wile lon e ijo lon ni la o kute e jan pi toki suli.",
"empty_column.list": "ala li lon kulupu lipu ni. jan pi kulupu lipu ni li toki sin la toki ni li lon ni.",
"empty_column.mutes": "jan ala li len tawa sina.",
@@ -316,6 +323,10 @@
"explore.trending_links": "sin",
"explore.trending_statuses": "toki",
"explore.trending_tags": "kulupu pi lipu suli",
"featured_carousel.next": "kama",
"featured_carousel.post": "toki",
"featured_carousel.previous": "pini",
"featured_carousel.slide": "lipu {total} la lipu nanpa {index}",
"filter_modal.added.settings_link": "lipu lawa",
"filter_modal.select_filter.expired": "tenpo pini",
"filter_modal.select_filter.search": "o alasa anu pali",
@@ -337,16 +348,23 @@
"footer.privacy_policy": "lawa len",
"footer.source_code": "o lukin e toki ilo",
"footer.status": "lon",
"generic.saved": "ni li awen",
"footer.terms_of_service": "lipu lawa",
"generic.saved": "mi awen e ni",
"getting_started.heading": "mi open",
"hashtag.admin_moderation": "o lawa e kulupu #{name}",
"hashtag.browse": "o lukin e kulupu toki #{hashtag}",
"hashtag.browse_from_account": "o lukin e kulupu toki #{hashtag} tan @{name}",
"hashtag.column_header.tag_mode.all": "en {additional}",
"hashtag.column_header.tag_mode.any": "anu {additional}",
"hashtag.column_header.tag_mode.none": "en {additional} ala",
"hashtag.column_settings.select.placeholder": "o alasa e kulupu…",
"hashtag.column_settings.tag_mode.all": "ale ni",
"hashtag.column_settings.tag_mode.any": "wan ni",
"hashtag.column_settings.tag_mode.none": "ala ni",
"hashtag.counter_by_accounts": "{count, plural, other {jan {counter}}}",
"hashtag.counter_by_uses": "{count, plural, other {toki {counter}}}",
"hashtag.follow": "o kute e kulupu lipu",
"hashtag.mute": "o kute ala e kulupu #{hashtag}",
"hashtag.unfollow": "o kute ala e kulupu lipu",
"home.column_settings.show_reblogs": "lukin e wawa",
"home.pending_critical_update.link": "o lukin e ijo ilo sin",
@@ -372,6 +390,7 @@
"keyboard_shortcuts.my_profile": "o lukin e lipu sina",
"keyboard_shortcuts.open_media": "o lukin e sitelen",
"keyboard_shortcuts.pinned": "o lukin pi lipu sina pi toki sewi",
"keyboard_shortcuts.reply": "o toki lon ijo ni",
"keyboard_shortcuts.toggle_sensitivity": "o ante e ken lukin",
"keyboard_shortcuts.toot": "o toki",
"keyboard_shortcuts.up": "o tawa sewi lon lipu",
@@ -413,7 +432,7 @@
"notification.follow_request": "{name} li wile kute e sina",
"notification.label.mention": "jan li toki e sina",
"notification.label.private_mention": "jan li toki e sina lon len",
"notification.label.private_reply": "Jan li toki tawa toki sina lon len",
"notification.label.private_reply": "toki len",
"notification.label.reply": "jan li toki tawa toki sina",
"notification.mentioned_you": "jan {name} li toki e sina",
"notification.moderation-warning.learn_more": "o kama sona e ijo ante",
@@ -452,7 +471,8 @@
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
"relative_time.today": "tenpo suno ni",
"reply_indicator.cancel": "o ala",
"reply_indicator.attachments": "{count, plural, other {sitelen #}}",
"reply_indicator.cancel": "o pana ala",
"report.block": "o len e jan",
"report.block_explanation": "sina kama lukin ala e toki ona. ona li kama ala ken lukin e toki sina li kama ala ken kute e sina. ona li ken sona e kama ni.",
"report.categories.other": "ante",
@@ -486,7 +506,7 @@
"search_results.statuses": "toki",
"server_banner.administered_by": "jan lawa:",
"status.block": "o len e @{name}",
"status.cancel_reblog_private": "o pini e pana",
"status.cancel_reblog_private": "o pana ala",
"status.delete": "o weka",
"status.edit": "o ante",
"status.favourite": "o sitelen pona",
@@ -520,6 +540,7 @@
"units.short.thousand": "{count}K",
"upload_button.label": "o pana e sitelen anu kalama",
"upload_error.limit": "ilo li ken ala e suli pi ijo ni.",
"upload_form.drag_and_drop.on_drag_cancel": "sina wile ala pana e sitelen. mi weka e sitelen.",
"upload_form.edit": "o ante",
"upload_progress.label": "ilo li kama jo e ijo sina...",
"upload_progress.processing": "ilo li pali…",

View File

@@ -84,6 +84,7 @@
"alt_text_modal.cancel": "取消",
"alt_text_modal.done": "完成",
"announcement.announcement": "公告",
"annual_report.summary.thanks": "感謝您成為 Mastodon 的一份子!",
"attachments_list.unprocessed": "(未處理)",
"audio.hide": "隱藏音訊",
"block_modal.remote_users_caveat": "我們會要求 {domain} 伺服器尊重你的決定。然而,由於部份伺服器可能以不同方式處理封鎖,因此無法保證一定會成功。公開帖文仍然有機會被未登入的使用者看見。",

View File

@@ -430,6 +430,7 @@
"hints.profiles.see_more_posts": "於 {domain} 檢視更多嘟文",
"hints.threads.replies_may_be_missing": "來自其他站點之回覆或有缺失。",
"hints.threads.see_more": "於 {domain} 檢視更多回覆",
"home.column_settings.show_quotes": "顯示引用嘟文",
"home.column_settings.show_reblogs": "顯示轉嘟",
"home.column_settings.show_replies": "顯示回覆",
"home.hide_announcements": "隱藏公告",

View File

@@ -226,8 +226,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
def process_quote
return unless Mastodon::Feature.inbound_quotes_enabled?
@quote_uri = @status_parser.quote_uri
return if @quote_uri.blank?

View File

@@ -4,7 +4,6 @@ class ActivityPub::Activity::QuoteRequest < ActivityPub::Activity
include Payloadable
def perform
return unless Mastodon::Feature.inbound_quotes_enabled?
return if non_matching_uri_hosts?(@account.uri, @json['id'])
quoted_status = status_from_uri(object_uri)

View File

@@ -75,25 +75,29 @@ class StatusCacheHydrator
end
def hydrate_quote_payload(empty_payload, quote, account_id, nested: false)
empty_payload.tap do |payload|
# Nothing to do if we're in the shallow (depth limit) case
next unless payload.key?(:quoted_status)
return unless quote&.acceptable?
empty_payload.tap do |payload|
payload.delete(:quoted_status) if nested
# TODO: performance improvements
if quote&.quoted_status.nil?
payload[nested ? :quoted_status_id : :quoted_status] = nil
payload[:state] = 'deleted'
elsif StatusFilter.new(quote.quoted_status, Account.find_by(id: account_id)).filtered?
payload[nested ? :quoted_status_id : :quoted_status] = nil
payload[:state] = 'unauthorized'
elsif payload[:state] == 'accepted'
if nested
payload[:quoted_status_id] = quote.quoted_status_id&.to_s
if quote.accepted?
if quote.quoted_status.nil?
payload[nested ? :quoted_status_id : :quoted_status] = nil
payload[:state] = 'deleted'
elsif StatusFilter.new(quote.quoted_status, Account.find_by(id: account_id)).filtered?
payload[nested ? :quoted_status_id : :quoted_status] = nil
payload[:state] = 'unauthorized'
else
payload[:quoted_status] = StatusCacheHydrator.new(quote.quoted_status).hydrate(account_id, nested: true)
payload[:state] = 'accepted'
if nested
payload[:quoted_status_id] = quote.quoted_status_id&.to_s
else
payload[:quoted_status] = StatusCacheHydrator.new(quote.quoted_status).hydrate(account_id, nested: true)
end
end
else
payload[nested ? :quoted_status_id : :quoted_status] = nil
end
end
end

View File

@@ -271,8 +271,6 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
end
def update_quote!
return unless Mastodon::Feature.inbound_quotes_enabled?
quote_uri = @status_parser.quote_uri
if quote_uri.present?

View File

@@ -937,7 +937,7 @@ RSpec.describe ActivityPub::Activity::Create do
end
end
context 'with an unverifiable quote of a known post', feature: :inbound_quotes do
context 'with an unverifiable quote of a known post' do
let(:quoted_status) { Fabricate(:status) }
let(:object_json) do
@@ -961,7 +961,7 @@ RSpec.describe ActivityPub::Activity::Create do
end
end
context 'with an unverifiable unknown post', feature: :inbound_quotes do
context 'with an unverifiable unknown post' do
let(:unknown_post_uri) { 'https://unavailable.example.com/unavailable-post' }
let(:object_json) do
@@ -989,7 +989,7 @@ RSpec.describe ActivityPub::Activity::Create do
end
end
context 'with a verifiable quote of a known post', feature: :inbound_quotes do
context 'with a verifiable quote of a known post' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }
let(:approval_uri) { 'https://quoted.example.com/quote-approval' }

View File

@@ -2,7 +2,7 @@
require 'rails_helper'
RSpec.describe ActivityPub::Activity::QuoteRequest, feature: :inbound_quotes do
RSpec.describe ActivityPub::Activity::QuoteRequest do
let(:sender) { Fabricate(:account, domain: 'example.com') }
let(:recipient) { Fabricate(:account) }
let(:quoted_post) { Fabricate(:status, account: recipient) }

View File

@@ -56,9 +56,10 @@ RSpec.describe StatusCacheHydrator do
context 'when handling an approved quote' do
let(:quoted_status) { Fabricate(:status) }
let(:legacy) { false }
before do
Fabricate(:quote, status: status, quoted_status: quoted_status, state: :accepted)
Fabricate(:quote, status: status, quoted_status: quoted_status, state: :accepted, legacy: legacy)
end
it 'renders the same attributes as full render' do
@@ -75,13 +76,46 @@ RSpec.describe StatusCacheHydrator do
end
end
context 'when the quote post is a legacy quote' do
let(:legacy) { true }
it 'renders the same attributes as full render' do
expect(subject).to eql(compare_to_hash)
expect(subject[:quote]).to_not be_nil
end
end
context 'when the quoted post is a private post the viewer is not authorized to see' do
let(:quoted_status) { Fabricate(:status, account: status.account, visibility: :private) }
it 'renders the same attributes as full render' do
expect(subject).to eql(compare_to_hash)
expect(subject[:quote]).to_not be_nil
expect(subject[:quote][:quoted_status]).to be_nil
end
end
context 'when the quoted post is a private post the viewer is authorized to see' do
let(:quoted_status) { Fabricate(:status, account: status.account, visibility: :private) }
before do
account.follow!(quoted_status.account)
end
it 'renders the same attributes as full render' do
expect(subject).to eql(compare_to_hash)
expect(subject[:quote]).to_not be_nil
expect(subject[:quote][:quoted_status]).to_not be_nil
end
end
context 'when the quoted post has been deleted' do
let(:quoted_status) { nil }
it 'returns the same attributes as full render' do
expect(subject).to eql(compare_to_hash)
expect(subject[:quote]).to_not be_nil
expect(subject[:quote_status]).to be_nil
expect(subject[:quote][:quoted_status]).to be_nil
end
end
@@ -93,7 +127,7 @@ RSpec.describe StatusCacheHydrator do
it 'returns the same attributes as full render' do
expect(subject).to eql(compare_to_hash)
expect(subject[:quote]).to_not be_nil
expect(subject[:quote_status]).to be_nil
expect(subject[:quote][:quoted_status]).to be_nil
end
end

View File

@@ -435,7 +435,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
end
end
context 'when the status has an existing unverified quote and adds an approval link', feature: :inbound_quotes do
context 'when the status has an existing unverified quote and adds an approval link' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }
let!(:quote) { Fabricate(:quote, status: status, quoted_status: quoted_status, approval_uri: nil) }
@@ -500,7 +500,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
end
end
context 'when the status has an existing verified quote and removes an approval link', feature: :inbound_quotes do
context 'when the status has an existing verified quote and removes an approval link' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }
let!(:quote) { Fabricate(:quote, status: status, quoted_status: quoted_status, approval_uri: approval_uri, state: :accepted) }
@@ -535,7 +535,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
end
end
context 'when the status adds a verifiable quote', feature: :inbound_quotes do
context 'when the status adds a verifiable quote' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }
let(:approval_uri) { 'https://quoted.example.com/approvals/1' }
@@ -600,7 +600,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
end
end
context 'when the status adds a unverifiable quote', feature: :inbound_quotes do
context 'when the status adds a unverifiable quote' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }
let(:approval_uri) { 'https://quoted.example.com/approvals/1' }
@@ -635,7 +635,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
end
end
context 'when the status removes a verified quote', feature: :inbound_quotes do
context 'when the status removes a verified quote' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }
let!(:quote) { Fabricate(:quote, status: status, quoted_status: quoted_status, approval_uri: approval_uri, state: :accepted) }
@@ -660,7 +660,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
end
end
context 'when the status removes an unverified quote', feature: :inbound_quotes do
context 'when the status removes an unverified quote' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }
let!(:quote) { Fabricate(:quote, status: status, quoted_status: quoted_status, approval_uri: nil, state: :pending) }
@@ -684,7 +684,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
end
end
context 'when the status swaps a verified quote with an unverifiable quote', feature: :inbound_quotes do
context 'when the status swaps a verified quote with an unverifiable quote' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }
let(:second_quoted_status) { Fabricate(:status, account: quoted_account) }
@@ -752,7 +752,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
end
end
context 'when the status swaps a verified quote with another verifiable quote', feature: :inbound_quotes do
context 'when the status swaps a verified quote with another verifiable quote' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:second_quoted_account) { Fabricate(:account, domain: 'second-quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }

View File

@@ -4870,17 +4870,17 @@ __metadata:
languageName: node
linkType: hard
"browserslist@npm:^4.24.0, browserslist@npm:^4.24.4, browserslist@npm:^4.24.5":
version: 4.24.5
resolution: "browserslist@npm:4.24.5"
"browserslist@npm:^4.24.0, browserslist@npm:^4.24.4, browserslist@npm:^4.25.0":
version: 4.25.0
resolution: "browserslist@npm:4.25.0"
dependencies:
caniuse-lite: "npm:^1.0.30001716"
electron-to-chromium: "npm:^1.5.149"
caniuse-lite: "npm:^1.0.30001718"
electron-to-chromium: "npm:^1.5.160"
node-releases: "npm:^2.0.19"
update-browserslist-db: "npm:^1.1.3"
bin:
browserslist: cli.js
checksum: 10c0/f4c1ce1a7d8fdfab5e5b88bb6e93d09e8a883c393f86801537a252da0362dbdcde4dbd97b318246c5d84c6607b2f6b47af732c1b000d6a8a881ee024bad29204
checksum: 10c0/cc16c55b4468b18684a0e1ca303592b38635b1155d6724f172407192737a2f405b8030d87a05813729592793445b3d15e737b0055f901cdecccb29b1e580a1c5
languageName: node
linkType: hard
@@ -5001,10 +5001,10 @@ __metadata:
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001716":
version: 1.0.30001718
resolution: "caniuse-lite@npm:1.0.30001718"
checksum: 10c0/67f9ad09bc16443e28d14f265d6e468480cd8dc1900d0d8b982222de80c699c4f2306599c3da8a3fa7139f110d4b30d49dbac78f215470f479abb6ffe141d5d3
"caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001718":
version: 1.0.30001721
resolution: "caniuse-lite@npm:1.0.30001721"
checksum: 10c0/fa3a8926899824b385279f1f886fe34c5efb1321c9ece1b9df25c8d567a2706db8450cc5b4d969e769e641593e08ea644909324aba93636a43e4949a75f81c4c
languageName: node
linkType: hard
@@ -5745,10 +5745,10 @@ __metadata:
languageName: node
linkType: hard
"electron-to-chromium@npm:^1.5.149":
version: 1.5.159
resolution: "electron-to-chromium@npm:1.5.159"
checksum: 10c0/dc5b60a235ad04b1637b3b2af4914ac900c42813b02262a91a41d950223316f7b12de715697cf9c2d9f572f716f9422bf259ee65d86599cd2cc66e92c499ebd1
"electron-to-chromium@npm:^1.5.160":
version: 1.5.165
resolution: "electron-to-chromium@npm:1.5.165"
checksum: 10c0/20b91e67e7a8829a358c4a488e9b59b0e5f8d4cb075a70b9757bb21acf0fc751ca58ca7d9c6018bec74ac4bd42f7859e4ef37421c252a2275f642e12a32271d6
languageName: node
linkType: hard
@@ -9338,9 +9338,9 @@ __metadata:
languageName: node
linkType: hard
"postcss-custom-properties@npm:^14.0.5":
version: 14.0.5
resolution: "postcss-custom-properties@npm:14.0.5"
"postcss-custom-properties@npm:^14.0.6":
version: 14.0.6
resolution: "postcss-custom-properties@npm:14.0.6"
dependencies:
"@csstools/cascade-layer-name-parser": "npm:^2.0.5"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
@@ -9349,7 +9349,7 @@ __metadata:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/ddee0545075dc0888cd54a9bb5791a98719a5d4f31d1de33823841efb540fa79f65e48b7c4aaba753d3214102e419536c5bc46c72e6e1579e5352da4e042ef3b
checksum: 10c0/0eeef77bc713551f5cb8fa5982d24da4e854075f3af020f1c94366c47a23a4cc225ebfecc978bdb17f00ee0bdee9d2c784e0d01adc64a447321e408abbe2c83b
languageName: node
linkType: hard
@@ -9530,8 +9530,8 @@ __metadata:
linkType: hard
"postcss-preset-env@npm:^10.1.5":
version: 10.2.0
resolution: "postcss-preset-env@npm:10.2.0"
version: 10.2.1
resolution: "postcss-preset-env@npm:10.2.1"
dependencies:
"@csstools/postcss-cascade-layers": "npm:^5.0.1"
"@csstools/postcss-color-function": "npm:^4.0.10"
@@ -9567,7 +9567,7 @@ __metadata:
"@csstools/postcss-trigonometric-functions": "npm:^4.0.9"
"@csstools/postcss-unset-value": "npm:^4.0.0"
autoprefixer: "npm:^10.4.21"
browserslist: "npm:^4.24.5"
browserslist: "npm:^4.25.0"
css-blank-pseudo: "npm:^7.0.1"
css-has-pseudo: "npm:^7.0.2"
css-prefers-color-scheme: "npm:^10.0.0"
@@ -9578,7 +9578,7 @@ __metadata:
postcss-color-hex-alpha: "npm:^10.0.0"
postcss-color-rebeccapurple: "npm:^10.0.0"
postcss-custom-media: "npm:^11.0.6"
postcss-custom-properties: "npm:^14.0.5"
postcss-custom-properties: "npm:^14.0.6"
postcss-custom-selectors: "npm:^8.0.5"
postcss-dir-pseudo-class: "npm:^9.0.1"
postcss-double-position-gradients: "npm:^6.0.2"
@@ -9599,7 +9599,7 @@ __metadata:
postcss-selector-not: "npm:^8.0.1"
peerDependencies:
postcss: ^8.4
checksum: 10c0/33406dcdd1d63fd3810f12cd97bf0d6a09a51917943ee7d75e2ccaf1d8cbce363abcb90ee68f14509d287d00de4afd6664dbdecaa4f4b95509e3578e27f54a24
checksum: 10c0/1a78eb86bca8f7c2bf7686ee9ed354b21d1316a7d12ae9aec2ce4b4810f6d32e23d0787d7450e55145f14f76b715df758bb54af0ea6a151858b045bd429f596e
languageName: node
linkType: hard