Merge branch 'main' into attribution-domains-api

# Conflicts:
#	config/locales/simple_form.nl.yml
This commit is contained in:
Christian Schmidt 2024-11-04 22:22:15 +01:00
commit 884c966630
32 changed files with 327 additions and 307 deletions

View File

@ -25,7 +25,7 @@ gem 'ruby-vips', '~> 2.2', require: false
gem 'active_model_serializers', '~> 0.10'
gem 'addressable', '~> 2.8'
gem 'bootsnap', '~> 1.18.0', require: false
gem 'browser', '< 6' # https://github.com/fnando/browser/issues/543
gem 'browser'
gem 'charlock_holmes', '~> 0.7.7'
gem 'chewy', '~> 7.3'
gem 'devise', '~> 4.9'

View File

@ -133,7 +133,7 @@ GEM
msgpack (~> 1.2)
brakeman (6.2.2)
racc
browser (5.3.1)
browser (6.0.0)
brpoplpush-redis_script (0.1.3)
concurrent-ruby (~> 1.0, >= 1.0.5)
redis (>= 1.0, < 6)
@ -448,7 +448,7 @@ GEM
nokogiri (1.16.7)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oj (3.16.6)
oj (3.16.7)
bigdecimal (>= 3.0)
ostruct (>= 0.2)
omniauth (2.1.2)
@ -908,7 +908,7 @@ DEPENDENCIES
blurhash (~> 0.1)
bootsnap (~> 1.18.0)
brakeman (~> 6.0)
browser (< 6)
browser
bundler-audit (~> 0.9)
capybara (~> 3.39)
charlock_holmes (~> 0.7.7)

View File

@ -97,12 +97,12 @@ class Item extends PureComponent {
height = 50;
}
if (attachment.get('description')?.length > 0) {
badges.push(<AltTextBadge key='alt' description={attachment.get('description')} />);
}
const description = attachment.getIn(['translation', 'description']) || attachment.get('description');
if (description?.length > 0) {
badges.push(<AltTextBadge key='alt' description={description} />);
}
if (attachment.get('type') === 'unknown') {
return (
<div className={classNames('media-gallery__item', { standalone, 'media-gallery__item--tall': height === 100, 'media-gallery__item--wide': width === 100 })} key={attachment.get('id')}>

View File

@ -45,7 +45,7 @@
"account.languages": "Ŝanĝi la abonitajn lingvojn",
"account.link_verified_on": "Propreco de tiu ligilo estis konfirmita je {date}",
"account.locked_info": "Tiu konto estas privatigita. La posedanto mane akceptas tiun, kiu povas sekvi rin.",
"account.media": "Plurmedioj",
"account.media": "Plurmedio",
"account.mention": "Mencii @{name}",
"account.moved_to": "{name} indikis, ke ria nova konto estas nun:",
"account.mute": "Silentigi @{name}",
@ -142,7 +142,7 @@
"column_header.unpin": "Malfiksi",
"column_subheading.settings": "Agordoj",
"community.column_settings.local_only": "Nur loka",
"community.column_settings.media_only": "Nur plurmedioj",
"community.column_settings.media_only": "Nur plurmedio",
"community.column_settings.remote_only": "Nur fora",
"compose.language.change": "Ŝanĝi lingvon",
"compose.language.search": "Serĉi lingvojn...",

View File

@ -158,7 +158,7 @@
"compose_form.poll.duration": "Äänestyksen kesto",
"compose_form.poll.multiple": "Monivalinta",
"compose_form.poll.option_placeholder": "Vaihtoehto {number}",
"compose_form.poll.single": "Yksi vaihtoehto",
"compose_form.poll.single": "Yksittäisvalinta",
"compose_form.poll.switch_to_multiple": "Muuta äänestys monivalinnaksi",
"compose_form.poll.switch_to_single": "Muuta äänestys yksittäisvalinnaksi",
"compose_form.poll.type": "Tyyli",
@ -386,7 +386,7 @@
"interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.",
"interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.",
"interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.",
"interaction_modal.description.vote": "Osallistuminen äänestykseen onnistuu Mastodon-tilillä.",
"interaction_modal.description.vote": "Mastodon-tilillä voit osallistua tähän äänestykseen.",
"interaction_modal.login.action": "Siirry kotiin",
"interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus, kuten mastodon.social",
"interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?",

View File

@ -158,6 +158,7 @@
"compose_form.poll.duration": "Doer fan de enkête",
"compose_form.poll.multiple": "Mearkar",
"compose_form.poll.option_placeholder": "Opsje {number}",
"compose_form.poll.single": "Inkelde kar",
"compose_form.poll.switch_to_multiple": "Enkête wizigje om meardere karren ta te stean",
"compose_form.poll.switch_to_single": "Enkête wizigje om in inkelde kar ta te stean",
"compose_form.poll.type": "Styl",
@ -196,6 +197,7 @@
"confirmations.unfollow.title": "Brûker net mear folgje?",
"content_warning.hide": "Berjocht ferstopje",
"content_warning.show": "Dochs toane",
"content_warning.show_more": "Mear toane",
"conversation.delete": "Petear fuortsmite",
"conversation.mark_as_read": "As lêzen markearje",
"conversation.open": "Petear toane",
@ -304,6 +306,7 @@
"filter_modal.select_filter.subtitle": "In besteande kategory brûke of in nije oanmeitsje",
"filter_modal.select_filter.title": "Dit berjocht filterje",
"filter_modal.title.status": "In berjocht filterje",
"filter_warning.matches_filter": "Komt oerien mei filter <span>{title}</span>",
"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",
"firehose.all": "Alles",
@ -383,6 +386,7 @@
"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.reply": "Jo kinne mei in Mastodon-account op dit berjocht reagearje.",
"interaction_modal.description.vote": "Mei in Mastodon-account kinne jo yn dizze enkête stimme.",
"interaction_modal.login.action": "Gean nei start",
"interaction_modal.login.prompt": "Domein fan jo server, byg. mastodon.social",
"interaction_modal.no_account_yet": "Net op Mastodon?",
@ -394,6 +398,7 @@
"interaction_modal.title.follow": "{name} folgje",
"interaction_modal.title.reblog": "Berjocht fan {name} booste",
"interaction_modal.title.reply": "Op it berjocht fan {name} reagearje",
"interaction_modal.title.vote": "Stimme yn {name}s peiling",
"intervals.full.days": "{number, plural, one {# dei} other {# dagen}} lyn",
"intervals.full.hours": "{number, plural, one {# oere} other {# oeren}} lyn",
"intervals.full.minutes": "{number, plural, one {# minút} other {# minuten}} lyn",
@ -506,6 +511,7 @@
"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_and_others": "{name} en <a>{count, plural, one {# oar persoan} other {# oare persoanen}}</a> folgje jo no",
"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",
@ -564,6 +570,7 @@
"notifications.column_settings.filter_bar.category": "Flugge filterbalke",
"notifications.column_settings.follow": "Nije folgers:",
"notifications.column_settings.follow_request": "Nij folchfersyk:",
"notifications.column_settings.group": "Groepearje",
"notifications.column_settings.mention": "Fermeldingen:",
"notifications.column_settings.poll": "Enkêteresultaten:",
"notifications.column_settings.push": "Pushmeldingen",

View File

@ -113,7 +113,7 @@
"bundle_modal_error.message": "컴포넌트를 불러오는 중 문제가 발생했습니다.",
"bundle_modal_error.retry": "다시 시도",
"closed_registrations.other_server_instructions": "마스토돈은 분산화 되어 있기 때문에, 다른 서버에서 계정을 만들더라도 이 서버와 상호작용 할 수 있습니다.",
"closed_registrations_modal.description": "{domain}은 현재 가입이 막혀있는 상태입니다, 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.",
"closed_registrations_modal.description": "{domain}은 현재 가입이 불가능합니다. 하지만 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.",
"closed_registrations_modal.find_another_server": "다른 서버 찾기",
"closed_registrations_modal.preamble": "마스토돈은 분산화 되어 있습니다, 그렇기 때문에 어디에서 계정을 생성하든, 이 서버에 있는 누구와도 팔로우와 상호작용을 할 수 있습니다. 심지어는 스스로 서버를 만드는 것도 가능합니다!",
"closed_registrations_modal.title": "마스토돈에서 가입",
@ -386,6 +386,7 @@
"interaction_modal.description.follow": "마스토돈 계정을 통해, {name} 님을 팔로우 하고 그의 게시물을 홈 피드에서 받아 볼 수 있습니다.",
"interaction_modal.description.reblog": "마스토돈 계정을 통해, 이 게시물을 부스트 하고 자신의 팔로워들에게 공유할 수 있습니다.",
"interaction_modal.description.reply": "마스토돈 계정을 통해, 이 게시물에 응답할 수 있습니다.",
"interaction_modal.description.vote": "마스토돈 계정을 통해, 이 투표에 참여할 수 있습니다.",
"interaction_modal.login.action": "홈 서버로 가기",
"interaction_modal.login.prompt": "내 홈 서버의 도메인. 예시: mastodon.social",
"interaction_modal.no_account_yet": "Mastodon 계정이 없나요?",
@ -397,6 +398,7 @@
"interaction_modal.title.follow": "{name} 님을 팔로우",
"interaction_modal.title.reblog": "{name} 님의 게시물을 부스트",
"interaction_modal.title.reply": "{name} 님의 게시물에 답글",
"interaction_modal.title.vote": "{name} 님의 투표에 참여",
"intervals.full.days": "{number} 일",
"intervals.full.hours": "{number} 시간",
"intervals.full.minutes": "{number} 분",

View File

@ -36,6 +36,7 @@
"account.followers.empty": "Šim lietotājam vēl nav sekotāju.",
"account.followers_counter": "{count, plural, zero {{count} sekotāju} one {{count} sekotājs} other {{count} sekotāji}}",
"account.following": "Seko",
"account.following_counter": "{count, plural, one {seko {counter}} other {seko {counter}}}",
"account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.",
"account.go_to_profile": "Doties uz profilu",
"account.hide_reblogs": "Paslēpt @{name} pastiprinātos ierakstus",
@ -61,6 +62,7 @@
"account.requested_follow": "{name} nosūtīja Tev sekošanas pieprasījumu",
"account.share": "Dalīties ar @{name} profilu",
"account.show_reblogs": "Parādīt @{name} pastiprinātos ierakstus",
"account.statuses_counter": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}",
"account.unblock": "Atbloķēt @{name}",
"account.unblock_domain": "Atbloķēt domēnu {domain}",
"account.unblock_short": "Atbloķēt",
@ -191,6 +193,7 @@
"confirmations.unfollow.title": "Pārtraukt sekošanu lietotājam?",
"content_warning.hide": "Paslēpt ierakstu",
"content_warning.show": "Tomēr rādīt",
"content_warning.show_more": "Rādīt vairāk",
"conversation.delete": "Dzēst sarunu",
"conversation.mark_as_read": "Atzīmēt kā izlasītu",
"conversation.open": "Skatīt sarunu",
@ -211,6 +214,7 @@
"dismissable_banner.explore_tags": "Šie ir tēmturi, kas šodien gūst uzmanību sabiedriskajā tīmeklī. Tēmturi, kurus izmanto vairāk dažādu cilvēku, tiek vērtēti augstāk.",
"dismissable_banner.public_timeline": "Šie ir jaunākie publiskie ieraksti no lietotājiem sociālajā tīmeklī, kuriem {domain} seko cilvēki.",
"domain_block_modal.block": "Bloķēt serveri",
"domain_block_modal.block_account_instead": "Tā vietā liegt @{name}",
"domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.",
"domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši bloķēti.",
"domain_block_modal.title": "Bloķēt domēnu?",
@ -329,6 +333,7 @@
"home.pending_critical_update.link": "Skatīt jauninājumus",
"home.pending_critical_update.title": "Ir pieejams būtisks drošības atjauninājums.",
"home.show_announcements": "Rādīt paziņojumus",
"ignore_notifications_modal.ignore": "Neņemt vērā paziņojumus",
"interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.",
"interaction_modal.description.follow": "Ar Mastodon kontu Tu vari sekot {name}, lai saņemtu lietotāja ierakstus savā mājas plūsmā.",
"interaction_modal.description.reblog": "Ar Mastodon kontu Tu vari izvirzīt šo ierakstu, lai kopīgotu to ar saviem sekotājiem.",
@ -505,10 +510,10 @@
"onboarding.action.back": "Aizved mani atpakaļ",
"onboarding.actions.back": "Aizved mani atpakaļ",
"onboarding.actions.go_to_explore": "Skatīt tendences",
"onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu",
"onboarding.actions.go_to_home": "Doties uz manu sākuma plūsmu",
"onboarding.compose.template": "Sveiki, #Mastodon!",
"onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu cilvēkus, kuriem sekot, vai vēlāk mēģināt vēlreiz.",
"onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā pieredzēt Mastodon. Jo vairāk cilvēkiem sekosi, jo dzīvīgāka un aizraujošāka tā būs. Lai sāktu, šeit ir daži ieteikumi:",
"onboarding.follows.lead": "Tava sākuma plūsma ir galvenais veids, kā pieredzēt Mastodon. Jo vairāk cilvēkiem sekosi, jo dzīvīgāka un aizraujošāka tā būs. Lai sāktu, šeit ir daži ieteikumi:",
"onboarding.follows.title": "Pielāgo savu mājas barotni",
"onboarding.profile.discoverable": "Padarīt manu profilu atklājamu",
"onboarding.profile.display_name": "Attēlojamais vārds",
@ -526,7 +531,7 @@
"onboarding.start.lead": "Tagad Tu esi daļa no Mastodon — vienreizējas, decentralizētas sociālās mediju platformas, kurā Tu, nevis algoritms, veido Tavu pieredzi. Sāksim darbu šajā jaunajā sociālajā jomā:",
"onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?",
"onboarding.start.title": "Tev tas izdevās!",
"onboarding.steps.follow_people.body": "Tu pats veido savu plūsmu. Piepildīsim to ar interesantiem cilvēkiem.",
"onboarding.steps.follow_people.body": "Sekošana aizraujošiem cilvēkiem ir tas, par ko ir Mastodon.",
"onboarding.steps.follow_people.title": "Pielāgo savu mājas barotni",
"onboarding.steps.publish_status.body": "Pasveicini pasauli ar tekstu, attēliem, video vai aptaujām {emoji}",
"onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu",

View File

@ -84,7 +84,7 @@
"alert.rate_limited.message": "Пожалуйста, повторите после {retry_time, time, medium}.",
"alert.rate_limited.title": "Ограничение количества запросов",
"alert.unexpected.message": "Произошла непредвиденная ошибка.",
"alert.unexpected.title": "Упс!",
"alert.unexpected.title": "Ой!",
"alt_text_badge.title": "Альтернативный текст",
"announcement.announcement": "Объявление",
"attachments_list.unprocessed": "(не обработан)",
@ -95,11 +95,11 @@
"block_modal.they_cant_mention": "Он не может упоминать или подписываться на вас.",
"block_modal.they_cant_see_posts": "Он не может видеть ваши сообщения, и вы не увидите его.",
"block_modal.they_will_know": "Он может видеть, что он заблокирован.",
"block_modal.title": "Заблокировать пользователя?",
"block_modal.title": "Заблокируем пользователя?",
"block_modal.you_wont_see_mentions": "Вы не увидите записи, которые упоминают его.",
"boost_modal.combo": "{combo}, чтобы пропустить это в следующий раз",
"boost_modal.reblog": "Повысить пост?",
"boost_modal.undo_reblog": "Разгрузить пост?",
"boost_modal.reblog": "Репостнуть?",
"boost_modal.undo_reblog": "Убрать репост?",
"bundle_column_error.copy_stacktrace": "Скопировать отчет об ошибке",
"bundle_column_error.error.body": "Запрошенная страница не может быть отображена. Это может быть вызвано ошибкой в нашем коде или проблемой совместимости браузера.",
"bundle_column_error.error.title": "О нет!",
@ -144,7 +144,7 @@
"community.column_settings.local_only": "Только локальные",
"community.column_settings.media_only": "Только с медиафайлами",
"community.column_settings.remote_only": "Только удалённые",
"compose.language.change": "Изменить язык",
"compose.language.change": "Сменить язык",
"compose.language.search": "Поиск языков...",
"compose.published.body": "Запись опубликована.",
"compose.published.open": "Открыть",
@ -180,7 +180,7 @@
"confirmations.discard_edit_media.message": "У вас есть несохранённые изменения описания мультимедиа или предпросмотра, отменить их?",
"confirmations.edit.confirm": "Редактировать",
"confirmations.edit.message": "В данный момент, редактирование перезапишет составляемое вами сообщение. Вы уверены, что хотите продолжить?",
"confirmations.edit.title": "Переписать сообщение?",
"confirmations.edit.title": "Перепишем сообщение?",
"confirmations.logout.confirm": "Выйти",
"confirmations.logout.message": "Вы уверены, что хотите выйти?",
"confirmations.logout.title": "Выйти?",
@ -196,6 +196,7 @@
"confirmations.unfollow.title": "Отписаться?",
"content_warning.hide": "Скрыть пост",
"content_warning.show": "Всё равно показать",
"content_warning.show_more": "Покажи ещё",
"conversation.delete": "Удалить беседу",
"conversation.mark_as_read": "Отметить как прочитанное",
"conversation.open": "Просмотр беседы",
@ -303,6 +304,7 @@
"filter_modal.select_filter.subtitle": "Используйте существующую категорию или создайте новую",
"filter_modal.select_filter.title": "Фильтровать этот пост",
"filter_modal.title.status": "Фильтровать пост",
"filter_warning.matches_filter": "Соответствует фильтру \"<span>{title}</span>\"",
"filtered_notifications_banner.pending_requests": "Вы можете знать {count, plural, =0 {ни одного человека} one {одного человека} other {# человек}}",
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
"firehose.all": "Все",
@ -382,6 +384,7 @@
"interaction_modal.description.follow": "С учётной записью Mastodon вы можете подписаться на {name}, чтобы получать их посты в своей домашней ленте.",
"interaction_modal.description.reblog": "С учётной записью Mastodon, вы можете продвинуть этот пост, чтобы поделиться им со своими подписчиками.",
"interaction_modal.description.reply": "Вы можете ответить на этот пост с учётной записью Mastodon.",
"interaction_modal.description.vote": "Вы сможете проголосовать тут имея аккаунт Mastodon.",
"interaction_modal.login.action": "Перейти на домашнюю страницу",
"interaction_modal.login.prompt": "Домен вашего домашнего сервера, например, mastodon.social",
"interaction_modal.no_account_yet": "Еще не на Mastodon?",
@ -393,12 +396,13 @@
"interaction_modal.title.follow": "Подписаться на {name}",
"interaction_modal.title.reblog": "Продвинуть публикацию {name}",
"interaction_modal.title.reply": "Ответить на пост {name}",
"interaction_modal.title.vote": "Голосовать в опросе {name}",
"intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}",
"intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
"intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
"keyboard_shortcuts.back": "перейти назад",
"keyboard_shortcuts.blocked": "чтобы открыть список заблокированных",
"keyboard_shortcuts.boost": "продвинуть пост",
"keyboard_shortcuts.boost": "Репостнуть",
"keyboard_shortcuts.column": "фокус на одном из столбцов",
"keyboard_shortcuts.compose": "фокус на поле ввода",
"keyboard_shortcuts.description": "Описание",
@ -464,7 +468,7 @@
"mute_modal.show_options": "Показать опции",
"mute_modal.they_can_mention_and_follow": "Они могут упоминать и следить за вами, но вы не будете их видеть.",
"mute_modal.they_wont_know": "Они не будут знать, что их заглушили.",
"mute_modal.title": "Заглушить пользователя?",
"mute_modal.title": "Заткнуть пользователя?",
"mute_modal.you_wont_see_mentions": "Вы не увидите постов, которые их упоминают.",
"mute_modal.you_wont_see_posts": "Они по-прежнему смогут видеть ваши посты, но вы не сможете видеть их посты.",
"navigation_bar.about": "О проекте",
@ -505,6 +509,7 @@
"notification.favourite": "{name} добавил(а) ваш пост в избранное",
"notification.favourite.name_and_others_with_link": "{name} и <a>{count, plural, one {# другие} other {# другие}}</a> отдали предпочтение вашему посту",
"notification.follow": "{name} подписался (-лась) на вас",
"notification.follow.name_and_others": "{name} и <a>{count, plural, one {# other} few {# others} many {# others} other {# others}}</a> подписались на вас",
"notification.follow_request": "{name} отправил запрос на подписку",
"notification.follow_request.name_and_others": "{name} и ещё {count, plural, one {#} other {# других}} подписались на вас",
"notification.label.mention": "Упоминание",
@ -512,7 +517,7 @@
"notification.label.private_reply": "Частный ответ",
"notification.label.reply": "Ответить",
"notification.mention": "Упоминание",
"notification.mentioned_you": "{name} упомянул(а) вас",
"notification.mentioned_you": "{name} упоминает вас",
"notification.moderation-warning.learn_more": "Узнать больше",
"notification.moderation_warning": "Вы получили предупреждение от модерации",
"notification.moderation_warning.action_delete_statuses": "Некоторые из ваших публикаций были удалены.",
@ -558,6 +563,7 @@
"notifications.column_settings.filter_bar.category": "Панель сортировки",
"notifications.column_settings.follow": "У вас новый подписчик:",
"notifications.column_settings.follow_request": "Новые запросы на подписку:",
"notifications.column_settings.group": "Группа",
"notifications.column_settings.mention": "Вас упомянули в посте:",
"notifications.column_settings.poll": "Опрос, в котором вы приняли участие, завершился:",
"notifications.column_settings.push": "Пуш-уведомления",
@ -600,8 +606,8 @@
"notifications_permission_banner.enable": "Включить уведомления",
"notifications_permission_banner.how_to_control": "Получайте уведомления даже когда Mastodon закрыт, включив уведомления на рабочем столе. А чтобы лишний шум не отвлекал, вы можете настроить какие уведомления вы хотите получать, нажав на кнопку {icon} выше.",
"notifications_permission_banner.title": "Будьте в курсе происходящего",
"onboarding.action.back": "Вернуть меня",
"onboarding.actions.back": "Вернуть меня",
"onboarding.action.back": "Верните меня",
"onboarding.actions.back": "Верните меня",
"onboarding.actions.go_to_explore": "Посмотреть, что актуально",
"onboarding.actions.go_to_home": "Перейти к домашней ленте новостей",
"onboarding.compose.template": "Привет, #Mastodon!",
@ -619,7 +625,7 @@
"onboarding.profile.title": "Настройка профиля",
"onboarding.profile.upload_avatar": "Загрузить фотографию профиля",
"onboarding.profile.upload_header": "Загрузить заголовок профиля",
"onboarding.share.lead": "Расскажите людям, как они могут найти вас на Mastodon!",
"onboarding.share.lead": "Расскажите людям, как найти вас на Mastodon!",
"onboarding.share.message": "Я {username} на #Mastodon! Следуйте за мной по адресу {url}",
"onboarding.share.next_steps": "Возможные дальнейшие шаги:",
"onboarding.share.title": "Поделиться вашим профилем",
@ -634,7 +640,7 @@
"onboarding.steps.setup_profile.title": "Настройте свой профиль",
"onboarding.steps.share_profile.body": "Расскажите своим друзьям как найти вас на Mastodon!",
"onboarding.steps.share_profile.title": "Поделитесь вашим профилем",
"onboarding.tips.2fa": "<strong>Знаете ли вы? </strong> Вы можете защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не требуется!",
"onboarding.tips.2fa": "<strong>А вы знали? </strong> Можно защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не нужен!",
"onboarding.tips.accounts_from_other_servers": "<strong>Знали ли вы? </strong> Поскольку Mastodon децентрализован, некоторые профили, с которыми вы столкнетесь, будут размещены на серверах, отличных от вашего. И все же вы можете взаимодействовать с ними без проблем! Их сервер находится во второй половине имени пользователя!",
"onboarding.tips.migration": "<strong>Знаете ли вы? </strong> Если вы чувствуете, что {domain} не подходит вам в качестве сервера в будущем, вы можете переехать на другой сервер Mastodon без потери своих подписчиков. Вы даже можете разместить свой собственный сервер!",
"onboarding.tips.verification": "<strong>Знали ли вы? </strong> Вы можете подтвердить свою учетную запись, разместив ссылку на свой профиль Mastodon на собственном сайте и добавив сайт в свой профиль. Никаких сборов или документов не требуется!",
@ -665,7 +671,7 @@
"privacy_policy.title": "Политика конфиденциальности",
"recommended": "Рекомендуется",
"refresh": "Обновить",
"regeneration_indicator.label": "Загрузка…",
"regeneration_indicator.label": "Грузим…",
"regeneration_indicator.sublabel": "Один момент, мы подготавливаем вашу ленту!",
"relative_time.days": "{number} д",
"relative_time.full.days": "{number, plural, one {# день} many {# дней} other {# дня}} назад",
@ -800,6 +806,7 @@
"status.reblog": "Продвинуть",
"status.reblog_private": "Продвинуть для своей аудитории",
"status.reblogged_by": "{name} продвинул(а)",
"status.reblogs": "{count, plural, one {boost} few {boosts} many {boosts} other {boosts}}",
"status.reblogs.empty": "Никто ещё не продвинул этот пост. Как только кто-то это сделает, они появятся здесь.",
"status.redraft": "Создать заново",
"status.remove_bookmark": "Убрать из закладок",
@ -856,11 +863,11 @@
"upload_modal.detect_text": "Найти текст на картинке",
"upload_modal.edit_media": "Изменить файл",
"upload_modal.hint": "Нажмите и перетащите круг в предпросмотре в точку фокуса, которая всегда будет видна на эскизах.",
"upload_modal.preparing_ocr": "Подготовка распознования…",
"upload_modal.preparing_ocr": "Подготовка распознавания…",
"upload_modal.preview_label": "Предпросмотр ({ratio})",
"upload_progress.label": "Загрузка...",
"upload_progress.processing": "Обработка…",
"username.taken": "Данное имя пользователя уже занято. Выберите другое.",
"username.taken": "Это имя пользователя уже занято. Выберите другое",
"video.close": "Закрыть видео",
"video.download": "Загрузить файл",
"video.exit_fullscreen": "Покинуть полноэкранный режим",

View File

@ -194,6 +194,7 @@
"confirmations.unfollow.title": "Prestať sledovať užívateľa?",
"content_warning.hide": "Skryť príspevok",
"content_warning.show": "Aj tak zobraziť",
"content_warning.show_more": "Ukázať viac",
"conversation.delete": "Vymazať konverzáciu",
"conversation.mark_as_read": "Označiť ako prečítanú",
"conversation.open": "Zobraziť konverzáciu",
@ -484,7 +485,7 @@
"notification_requests.edit_selection": "Uprav",
"notification_requests.exit_selection": "Hotovo",
"notification_requests.notifications_from": "Oboznámenia od {name}",
"notification_requests.title": "Filtrované oboznámenia",
"notification_requests.title": "Filtrované oznámenia",
"notification_requests.view": "Zobraz upozornenia",
"notifications.clear": "Vyčistiť upozornenia",
"notifications.clear_confirmation": "Určite chcete nenávratne odstrániť všetky svoje upozornenia?",

View File

@ -82,7 +82,7 @@
"admin.impact_report.instance_follows": "Följare som deras användare skulle förlora",
"admin.impact_report.title": "Sammanfattning av påverkan",
"alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.",
"alert.rate_limited.title": "Mängd begränsad",
"alert.rate_limited.title": "Hastighetsbegränsad",
"alert.unexpected.message": "Ett oväntat fel uppstod.",
"alert.unexpected.title": "Hoppsan!",
"alt_text_badge.title": "Alt-Text",
@ -271,7 +271,7 @@
"empty_column.follow_requests": "Du har inga följarförfrågningar än. När du får en kommer den visas här.",
"empty_column.followed_tags": "Du följer inga hashtaggar ännu. När du gör det kommer de att dyka upp här.",
"empty_column.hashtag": "Det finns inget i denna hashtag ännu.",
"empty_column.home": "Din hemma-tidslinje är tom! Följ fler användare för att fylla den. {suggestions}",
"empty_column.home": "Din hemma-tidslinje är tom! Följ fler användare för att fylla den.",
"empty_column.list": "Det finns inget i denna lista än. När listmedlemmar publicerar nya inlägg kommer de synas här.",
"empty_column.lists": "Du har inga listor än. När skapar en kommer den dyka upp här.",
"empty_column.mutes": "Du har ännu inte tystat några användare.",
@ -383,7 +383,7 @@
"ignore_notifications_modal.not_following_title": "Vill du blockera aviseringar från personer som du inte följer dig?",
"ignore_notifications_modal.private_mentions_title": "Vill du ignorera aviseringar från oönskade privata omnämningar?",
"interaction_modal.description.favourite": "Med ett Mastodon-konto kan du favoritmarkera detta inlägg för att visa författaren att du gillar det och för att spara det till senare.",
"interaction_modal.description.follow": "Med ett Mastodon-konto kan du följa {name} för att se hens inlägg i ditt hemflöde.",
"interaction_modal.description.follow": "Med ett Mastodon-konto kan du följa {name} för att se deras inlägg i ditt hemflöde.",
"interaction_modal.description.reblog": "Med ett Mastodon-konto kan du boosta detta inlägg för att dela den med dina egna följare.",
"interaction_modal.description.reply": "Med ett Mastodon-konto kan du svara på detta inlägg.",
"interaction_modal.description.vote": "Med ett konto på Mastodon kan du delta i denna omröstning.",
@ -405,11 +405,11 @@
"keyboard_shortcuts.back": "Gå bakåt",
"keyboard_shortcuts.blocked": "Öppna listan över blockerade användare",
"keyboard_shortcuts.boost": "Boosta inlägg",
"keyboard_shortcuts.column": "för att fokusera en status i en av kolumnerna",
"keyboard_shortcuts.column": "Fokusera kolumn",
"keyboard_shortcuts.compose": "för att fokusera skrivfältet",
"keyboard_shortcuts.description": "Beskrivning",
"keyboard_shortcuts.direct": "för att öppna privata nämningskolumnen",
"keyboard_shortcuts.down": "för att flytta nedåt i listan",
"keyboard_shortcuts.down": "Flytta ner i listan",
"keyboard_shortcuts.enter": "Öppna inlägg",
"keyboard_shortcuts.favourite": "Favoritmarkera inlägg",
"keyboard_shortcuts.favourites": "Öppna favoritlistan",
@ -429,13 +429,13 @@
"keyboard_shortcuts.reply": "Svara på inlägg",
"keyboard_shortcuts.requests": "för att öppna Följförfrågningar",
"keyboard_shortcuts.search": "för att fokusera sökfältet",
"keyboard_shortcuts.spoilers": "visa/dölja CW-fält",
"keyboard_shortcuts.start": "för att öppna \"Kom igång\"-kolumnen",
"keyboard_shortcuts.toggle_hidden": "för att visa/gömma text bakom CW",
"keyboard_shortcuts.toggle_sensitivity": "för att visa/gömma media",
"keyboard_shortcuts.spoilers": "Visa/dölja CW-fält",
"keyboard_shortcuts.start": "Öppna \"Kom igång\"-kolumnen",
"keyboard_shortcuts.toggle_hidden": "Visa/gömma text bakom CW",
"keyboard_shortcuts.toggle_sensitivity": "Visa/gömma media",
"keyboard_shortcuts.toot": "Starta nytt inlägg",
"keyboard_shortcuts.unfocus": "för att avfokusera skrivfält/sökfält",
"keyboard_shortcuts.up": "för att flytta uppåt i listan",
"keyboard_shortcuts.unfocus": "Avfokusera skrivfält/sökfält",
"keyboard_shortcuts.up": "Flytta uppåt i listan",
"lightbox.close": "Stäng",
"lightbox.next": "Nästa",
"lightbox.previous": "Tidigare",
@ -617,11 +617,11 @@
"onboarding.action.back": "Ta mig tillbaka",
"onboarding.actions.back": "Ta mig tillbaka",
"onboarding.actions.go_to_explore": "See what's trending",
"onboarding.actions.go_to_home": "Go to your home feed",
"onboarding.actions.go_to_home": "Ta mig till mitt hemflöde",
"onboarding.compose.template": "Hallå #Mastodon!",
"onboarding.follows.empty": "Tyvärr kan inga resultat visas just nu. Du kan prova att använda sökfunktionen eller utforska sidan för att hitta personer att följa, eller försök igen senare.",
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
"onboarding.follows.title": "Popular on Mastodon",
"onboarding.follows.lead": "Ditt hemflöde är det primära sättet att uppleva Mastodon. Ju fler människor du följer, desto mer aktiv och intressant blir det. För att komma igång, är här några förslag:",
"onboarding.follows.title": "Anpassa ditt hemflöde",
"onboarding.profile.discoverable": "Gör min profil upptäckbar",
"onboarding.profile.discoverable_hint": "När du väljer att vara upptäckbar på Mastodon kan dina inlägg visas i sök- och trendresultat, och din profil kan föreslås för personer med liknande intressen som du.",
"onboarding.profile.display_name": "Visningsnamn",
@ -642,7 +642,7 @@
"onboarding.start.title": "Du klarade det!",
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
"onboarding.steps.publish_status.body": "Say hello to the world.",
"onboarding.steps.publish_status.body": "Säg hej till världen med text, foton, videor eller omröstningar {emoji}",
"onboarding.steps.publish_status.title": "Gör ditt första inlägg",
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
"onboarding.steps.setup_profile.title": "Customize your profile",
@ -733,8 +733,8 @@
"report.thanks.take_action_actionable": "Medan vi granskar detta kan du vidta åtgärder mot {name}:",
"report.thanks.title": "Vill du inte se det här?",
"report.thanks.title_actionable": "Tack för att du rapporterar, vi kommer att titta på detta.",
"report.unfollow": "Sluta följ @{username}",
"report.unfollow_explanation": "Du följer detta konto. Avfölj hen för att inte se hens inlägg i ditt hemflöde.",
"report.unfollow": "Sluta följ @{name}",
"report.unfollow_explanation": "Du följer detta konto. Avfölj det för att inte se dess inlägg i ditt hemflöde.",
"report_notification.attached_statuses": "bifogade {count, plural, one {{count} inlägg} other {{count} inlägg}}",
"report_notification.categories.legal": "Rättsligt",
"report_notification.categories.legal_sentence": "olagligt innehåll",
@ -829,7 +829,7 @@
"status.show_less_all": "Visa mindre för alla",
"status.show_more_all": "Visa mer för alla",
"status.show_original": "Visa original",
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
"status.title.with_attachments": "{user} lade upp {attachmentCount, plural, one {en bilaga} other {{attachmentCount} bilagor}}",
"status.translate": "Översätt",
"status.translated_from_with": "Översatt från {lang} med {provider}",
"status.uncached_media_warning": "Förhandsvisning inte tillgänglig",

View File

@ -44,7 +44,7 @@
"account.joined_short": "เข้าร่วมเมื่อ",
"account.languages": "เปลี่ยนภาษาที่บอกรับ",
"account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}",
"account.locked_info": "สถานะความเป็นส่วนตัวของบัญชีนี้ถูกตั้งค่าเป็นล็อค เจ้าของตรวจสอบด้วยตนเองว่าใครสามารถติดตามพวกเขาได้",
"account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง",
"account.media": "สื่อ",
"account.mention": "กล่าวถึง @{name}",
"account.moved_to": "{name} ได้ระบุว่าบัญชีใหม่ของเขาในตอนนี้คือ:",
@ -97,7 +97,7 @@
"block_modal.they_will_know": "เขาสามารถเห็นว่ามีการปิดกั้นเขา",
"block_modal.title": "ปิดกั้นผู้ใช้?",
"block_modal.you_wont_see_mentions": "คุณจะไม่เห็นโพสต์ที่กล่าวถึงเขา",
"boost_modal.combo": "คุณสามารถกด {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป",
"boost_modal.combo": "คุณสามารถกดปุ่ม {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป",
"boost_modal.reblog": "ดันโพสต์?",
"boost_modal.undo_reblog": "เลิกดันโพสต์?",
"bundle_column_error.copy_stacktrace": "คัดลอกรายงานข้อผิดพลาด",
@ -386,6 +386,7 @@
"interaction_modal.description.follow": "ด้วยบัญชีใน Mastodon คุณสามารถติดตาม {name} เพื่อรับโพสต์ของเขาในฟีดหน้าแรกของคุณ",
"interaction_modal.description.reblog": "ด้วยบัญชีใน Mastodon คุณสามารถดันโพสต์นี้เพื่อแชร์โพสต์กับผู้ติดตามของคุณเอง",
"interaction_modal.description.reply": "ด้วยบัญชีใน Mastodon คุณสามารถตอบกลับโพสต์นี้",
"interaction_modal.description.vote": "ด้วยบัญชีใน Mastodon คุณสามารถลงคะแนนในการสำรวจความคิดเห็นนี้",
"interaction_modal.login.action": "นำฉันกลับบ้าน",
"interaction_modal.login.prompt": "โดเมนของเซิร์ฟเวอร์บ้านของคุณ เช่น mastodon.social",
"interaction_modal.no_account_yet": "ไม่ได้อยู่ใน Mastodon?",
@ -397,6 +398,7 @@
"interaction_modal.title.follow": "ติดตาม {name}",
"interaction_modal.title.reblog": "ดันโพสต์ของ {name}",
"interaction_modal.title.reply": "ตอบกลับโพสต์ของ {name}",
"interaction_modal.title.vote": "ลงคะแนนในการสำรวจความคิดเห็นของ {name}",
"intervals.full.days": "{number, plural, other {# วัน}}",
"intervals.full.hours": "{number, plural, other {# ชั่วโมง}}",
"intervals.full.minutes": "{number, plural, other {# นาที}}",
@ -855,11 +857,11 @@
"upload_error.poll": "ไม่อนุญาตการอัปโหลดไฟล์โดยมีการสำรวจความคิดเห็น",
"upload_form.audio_description": "อธิบายสำหรับผู้ที่สูญเสียการได้ยิน",
"upload_form.description": "อธิบายสำหรับผู้คนที่พิการทางการมองเห็นหรือมีสายตาเลือนราง",
"upload_form.drag_and_drop.instructions": "หากต้องการเลือกไฟล์สื่อ ให้กดปุ่มที Space หรือ Enter บนแป้นพิมพ์ เมื่อเลือกไฟล์ได้แล้ว ก็สามารถใช้ปุ่มลูกศรเพื่อเลื่อนไฟล์ไปในทิศทางที่ต้องการได้ เมื่อต้องการวางไฟล์ในตำแหน่งใหม่ ให้กดปุ่ม Space หรือ Enter ดูอีกครั้ง หรือหากต้องการยกเลิกการเลือก ให้กดปุ่ม Esc ได้",
"upload_form.drag_and_drop.on_drag_cancel": "การลากไฟล์นั้นหยุดชะงัก ไฟล์ที่กำลังแนบมาถูกยกเลิก {item} ได้ถูกลบทิ้งแล้ว",
"upload_form.drag_and_drop.on_drag_end": "ไฟล์แนบ {item} ได้ถูกยกเลิกแล้ว",
"upload_form.drag_and_drop.on_drag_over": "ไฟล์แนบ {item} ได้ถูกย้ายไปแล้ว",
"upload_form.drag_and_drop.on_drag_start": "ได้รับไฟล์แนบเรียบร้อยแล้ว {item}.",
"upload_form.drag_and_drop.instructions": "เพื่อหยิบไฟล์แนบสื่อ กดปุ่มเว้นวรรคหรือขึ้นบรรทัดใหม่ ขณะลาก ใช้ปุ่มลูกศรเพื่อย้ายไฟล์แนบสื่อในทิศทางใดก็ตามที่กำหนด กดปุ่มเว้นวรรคหรือขึ้นบรรทัดใหม่อีกครั้งเพื่อปล่อยไฟล์แนบสื่อในตำแหน่งใหม่ หรือกดปุ่ม Escape เพื่อยกเลิก",
"upload_form.drag_and_drop.on_drag_cancel": "ยกเลิกการลากแล้ว ปล่อยไฟล์แนบสื่อ {item} แล้ว",
"upload_form.drag_and_drop.on_drag_end": "ปล่อยไฟล์แนบสื่อ {item} แล้ว",
"upload_form.drag_and_drop.on_drag_over": "ย้ายไฟล์แนบสื่อ {item} แล้ว",
"upload_form.drag_and_drop.on_drag_start": "หยิบไฟล์แนบสื่อ {item} แล้ว",
"upload_form.edit": "แก้ไข",
"upload_form.thumbnail": "เปลี่ยนภาพขนาดย่อ",
"upload_form.video_description": "อธิบายสำหรับผู้คนที่พิการทางการได้ยิน ได้ยินไม่ชัด พิการทางการมองเห็น หรือมีสายตาเลือนราง",

View File

@ -17,11 +17,21 @@ class AnnualReport
SCHEMA = 1
def self.table_name_prefix
'annual_report_'
end
def initialize(account, year)
@account = account
@year = year
end
def self.prepare(year)
SOURCES.each do |klass|
klass.prepare(year)
end
end
def generate
return if GeneratedAnnualReport.exists?(account: @account, year: @year)

View File

@ -1,62 +1,37 @@
# frozen_string_literal: true
class AnnualReport::Percentiles < AnnualReport::Source
def self.prepare(year)
AnnualReport::StatusesPerAccountCount.connection.exec_query(<<~SQL.squish, nil, [year, Mastodon::Snowflake.id_at(DateTime.new(year).beginning_of_year), Mastodon::Snowflake.id_at(DateTime.new(year).end_of_year)])
INSERT INTO annual_report_statuses_per_account_counts (year, account_id, statuses_count)
SELECT $1, account_id, count(*)
FROM statuses
WHERE id BETWEEN $2 AND $3
AND (local OR uri IS NULL)
GROUP BY account_id
ON CONFLICT (year, account_id) DO NOTHING
SQL
end
def generate
{
percentiles: {
followers: (total_with_fewer_followers / (total_with_any_followers + 1.0)) * 100,
statuses: (total_with_fewer_statuses / (total_with_any_statuses + 1.0)) * 100,
statuses: 100.0 - ((total_with_fewer_statuses / (total_with_any_statuses + 1.0)) * 100),
},
}
end
private
def followers_gained
@followers_gained ||= @account.passive_relationships.where("date_part('year', follows.created_at) = ?", @year).count
end
def statuses_created
@statuses_created ||= report_statuses.count
end
def total_with_fewer_followers
@total_with_fewer_followers ||= Follow.find_by_sql([<<~SQL.squish, { year: @year, comparison: followers_gained }]).first.total
WITH tmp0 AS (
SELECT follows.target_account_id
FROM follows
INNER JOIN accounts ON accounts.id = follows.target_account_id
WHERE date_part('year', follows.created_at) = :year
AND accounts.domain IS NULL
GROUP BY follows.target_account_id
HAVING COUNT(*) < :comparison
)
SELECT count(*) AS total
FROM tmp0
SQL
end
def total_with_fewer_statuses
@total_with_fewer_statuses ||= Status.find_by_sql([<<~SQL.squish, { comparison: statuses_created, min_id: year_as_snowflake_range.first, max_id: year_as_snowflake_range.last }]).first.total
WITH tmp0 AS (
SELECT statuses.account_id
FROM statuses
INNER JOIN accounts ON accounts.id = statuses.account_id
WHERE statuses.id BETWEEN :min_id AND :max_id
AND accounts.domain IS NULL
GROUP BY statuses.account_id
HAVING count(*) < :comparison
)
SELECT count(*) AS total
FROM tmp0
SQL
end
def total_with_any_followers
@total_with_any_followers ||= Follow.where("date_part('year', follows.created_at) = ?", @year).joins(:target_account).merge(Account.local).count('distinct follows.target_account_id')
@total_with_fewer_statuses ||= AnnualReport::StatusesPerAccountCount.where(year: year).where(statuses_count: ...statuses_created).count
end
def total_with_any_statuses
@total_with_any_statuses ||= Status.where(id: year_as_snowflake_range).joins(:account).merge(Account.local).count('distinct statuses.account_id')
@total_with_any_statuses ||= AnnualReport::StatusesPerAccountCount.where(year: year).count
end
end

View File

@ -8,6 +8,14 @@ class AnnualReport::Source
@year = year
end
def self.prepare(_year)
# Use this method if any pre-calculations must be made before individual annual reports are generated
end
def generate
raise NotImplementedError
end
protected
def report_statuses

View File

@ -0,0 +1,15 @@
# frozen_string_literal: true
# == Schema Information
#
# Table name: annual_report_statuses_per_account_counts
#
# id :bigint(8) not null, primary key
# year :integer not null
# account_id :bigint(8) not null
# statuses_count :bigint(8) not null
#
class AnnualReport::StatusesPerAccountCount < ApplicationRecord
# This table facilitates percentile calculations
end

View File

@ -1,23 +0,0 @@
# frozen_string_literal: true
# TODO: remove this file some time after 4.3.0
Rails.application.config.after_initialize do
Rails.application.config.action_dispatch.cookies_rotations.tap do |cookies|
authenticated_encrypted_cookie_salt = Rails.application.config.action_dispatch.authenticated_encrypted_cookie_salt
signed_cookie_salt = Rails.application.config.action_dispatch.signed_cookie_salt
secret_key_base = Rails.application.secret_key_base
key_generator = ActiveSupport::KeyGenerator.new(
secret_key_base, iterations: 1000, hash_digest_class: OpenSSL::Digest::SHA1
)
key_len = ActiveSupport::MessageEncryptor.key_len
old_encrypted_secret = key_generator.generate_key(authenticated_encrypted_cookie_salt, key_len)
old_signed_secret = key_generator.generate_key(signed_cookie_salt)
cookies.rotate :encrypted, old_encrypted_secret
cookies.rotate :signed, old_signed_secret
end
end

View File

@ -60,7 +60,7 @@ th:
error:
title: เกิดข้อผิดพลาด
new:
prompt_html: "%{client_name} ร้องขอสิทธิ์ในการเข้าถึงข้อมูลในบัญชีของคุณ <strong>อนุมัติคำขอนี้ได้ก็ต่อเมื่อคุณมั่นใจและเชื่อถือในแหล่งที่มาของข้อมูลนี้</strong>"
prompt_html: "%{client_name} ต้องการสิทธิอนุญาตเพื่อเข้าถึงบัญชีของคุณ <strong>อนุมัติคำขอนี้เฉพาะหากคุณรู้จักและเชื่อถือแหล่งที่มานี้เท่านั้น</strong>"
review_permissions: ตรวจทานสิทธิอนุญาต
title: ต้องการการอนุญาต
show:

View File

@ -21,6 +21,7 @@ fy:
one: Toot
other: Berjochten
posts_tab_heading: Berjochten
self_follow_error: It folgjen fan dyn eigen account is net tastien
admin:
account_actions:
action: Aksje útfiere
@ -1165,8 +1166,11 @@ fy:
use_security_key: Befeiligingskaai brûke
author_attribution:
example_title: Faorbyldtekst
hint_html: Skriuwe jo nijs- of blogartikelen bûten Mastodon? Bepaal hoet jo oahelle wurde as dizze dield wurde op Mastodon.
instructions: 'Soargj derfoar dat dizze koade yn de HTML fan jo artikel sit:'
more_from_html: Mear fan %{name}
s_blog: Weblog fan %{name}
then_instructions: Foegje dernei de domeinnamme fan de publikaasje yn it ûndersteande fjild ta.
title: Auteur-attribúsje
challenge:
confirm: Trochgean

View File

@ -262,7 +262,7 @@ gd:
destroy_domain_allow_html: Dì-cheadaich %{name} co-nasgadh leis an àrainn %{target}
destroy_domain_block_html: Dì-bhac %{name} an àrainn %{target}
destroy_email_domain_block_html: Dì-bhac %{name} an àrainn puist-d %{target}
destroy_instance_html: Purgaidich %{name} an àrainn %{target}
destroy_instance_html: Phurgaidich %{name} an àrainn %{target}
destroy_ip_block_html: Sguab %{name} às riaghailt dhan IP %{target}
destroy_status_html: Thug %{name} post aig %{target} air falbh
destroy_unavailable_domain_html: Lean %{name} air adhart leis an lìbhrigeadh dhan àrainn %{target}

View File

@ -3,6 +3,7 @@ fy:
simple_form:
hints:
account:
attribution_domains_as_text: Ien per rigel. Beskermet tsjin falske attribúsjes.
discoverable: Jo iepenbiere berjochten kinne útljochte wurde op ferskate plakken binnen Mastodon en jo account kin oanrekommandearre wurde oan oare brûkers.
display_name: Jo folsleine namme of in aardige bynamme.
fields: Jo website, persoanlike foarnammewurden, leeftiid, alles wat jo mar kwyt wolle.
@ -143,6 +144,7 @@ fy:
url: Wêrt eveneminten nei ta stjoerd wurde
labels:
account:
attribution_domains_as_text: Websites dyt jo wurdearring jaan meie
discoverable: Profyl en bydragen yn sykalgoritmen opnimme litte
fields:
name: Label

View File

@ -61,7 +61,7 @@ lv:
setting_display_media_hide_all: Vienmēr slēpt multividi
setting_display_media_show_all: Vienmēr rādīt multividi
setting_use_blurhash: Pāreju pamatā ir paslēpto uzskatāmo līdzekļu krāsas, bet saturs tiek padarīts neskaidrs
setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis automātiski ritini plūsmu
setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis ar automātisku plūsmas ritināšanu
username: Tu vari lietot burtus, ciparus un zemsvītras
whole_word: Ja atslēgvārds vai frāze ir tikai burtciparu, tas tiks lietots tikai tad, ja tas atbilst visam vārdam
domain_allow:

View File

@ -3,7 +3,7 @@ nl:
simple_form:
hints:
account:
attribution_domains: Eén per regel. Beschermt tegen valse attribueringen.
attribution_domains: Eén per regel. Beschermt tegen valse toeschrijvingen.
discoverable: Jouw openbare berichten kunnen worden uitgelicht op verschillende plekken binnen Mastodon en jouw account kan worden aanbevolen aan andere gebruikers.
display_name: Jouw volledige naam of een leuke bijnaam.
fields: Jouw website, persoonlijke voornaamwoorden, leeftijd, alles wat je maar kwijt wilt.

View File

@ -74,7 +74,7 @@ sv:
filters:
action: Välj vilken åtgärd som ska utföras när ett inlägg matchar filtret
actions:
hide: Dölj det filtrerade innehållet helt (beter sig som om det inte fanns)
hide: Dölj det filtrerade innehållet helt, beter sig som om det inte fanns
warn: Dölj det filtrerade innehållet bakom en varning som visar filtrets rubrik
form_admin_settings:
activity_api_enabled: Antalet lokalt publicerade inlägg, aktiva användare och nya registrerade konton per vecka

View File

@ -59,7 +59,7 @@ sv:
delete: Radera data
deleted: Raderad
demote: Degradera
destroyed_msg: "%{username}'s data har nu lagts till kön för att raderas omedelbart"
destroyed_msg: "%{username}s data har nu lagts till kön för att raderas omedelbart"
disable: inaktivera
disable_sign_in_token_auth: Inaktivera autentisering med pollett via e-post
disable_two_factor_authentication: Inaktivera 2FA
@ -72,7 +72,7 @@ sv:
enable: Aktivera
enable_sign_in_token_auth: Aktivera autentisering med pollett via e-post
enabled: Aktiverad
enabled_msg: Uppfrysningen av %{username}'s konto lyckades
enabled_msg: Uppfrysningen av %{username}s konto lyckades
followers: Följare
follows: Följs
header: Rubrik
@ -268,21 +268,21 @@ sv:
enable_custom_emoji_html: "%{name} aktiverade emoji %{target}"
enable_sign_in_token_auth_user_html: "%{name} aktiverade e-posttokenautentisering för %{target}"
enable_user_html: "%{name} aktiverade inloggning för användaren %{target}"
memorialize_account_html: "%{name} gjorde %{target}'s konto till en minnessida"
memorialize_account_html: "%{name} gjorde %{target}s konto till en minnessida"
promote_user_html: "%{name} befordrade användaren %{target}"
reject_appeal_html: "%{name} avvisade överklagande av modereringsbeslut från %{target}"
reject_user_html: "%{name} avvisade registrering från %{target}"
remove_avatar_user_html: "%{name} tog bort %{target}'s avatar"
remove_avatar_user_html: "%{name} tog bort %{target}s avatar"
reopen_report_html: "%{name} öppnade rapporten igen %{target}"
resend_user_html: "%{name} skickade bekräftelsemail för %{target} på nytt"
reset_password_user_html: "%{name} återställ användarens lösenord %{target}"
resolve_report_html: "%{name} löste rapporten %{target}"
sensitive_account_html: "%{name} markerade %{target}'s media som känsligt"
silence_account_html: "%{name} begränsade %{target}'s konto"
sensitive_account_html: "%{name} markerade %{target}s media som känsligt"
silence_account_html: "%{name} begränsade %{target}s konto"
suspend_account_html: "%{name} stängde av %{target}s konto"
unassigned_report_html: "%{name} tog bort tilldelning av rapporten %{target}"
unblock_email_account_html: "%{name} avblockerade %{target}s e-postadress"
unsensitive_account_html: "%{name} avmarkerade %{target}'s media som känsligt"
unsensitive_account_html: "%{name} avmarkerade %{target}s media som känsligt"
unsilence_account_html: "%{name} tog bort begränsning av %{target}s konto"
unsuspend_account_html: "%{name} ångrade avstängningen av %{target}s konto"
update_announcement_html: "%{name} uppdaterade kungörelsen %{target}"
@ -569,7 +569,7 @@ sv:
no_ip_block_selected: Inga IP-regler ändrades då inga var valda
title: IP-regler
relationships:
title: "%{acct}'s relationer"
title: "%{acct}s relationer"
relays:
add_new: Lägg till nytt relä
delete: Radera
@ -899,7 +899,7 @@ sv:
review_requested: Granskning begärd
reviewed: Granskat
title: Status
trendable:
trendable: Kan trenda
unreviewed: Ogranskad
usable: Användbar
name: Namn
@ -1826,8 +1826,8 @@ sv:
tags:
does_not_match_previous_name: matchar inte det föregående namnet
themes:
contrast: Hög kontrast
default: Mastodon
contrast: Mastodon (Hög kontrast)
default: Mastodon (Mörk)
mastodon-light: Mastodon (ljust)
system: Automatisk (använd systemtema)
time:

View File

@ -1148,11 +1148,11 @@ th:
use_security_key: ใช้กุญแจความปลอดภัย
author_attribution:
example_title: ข้อความตัวอย่าง
hint_html: คุณเขียนข่าวหรือลงบทความที่อื่นๆที่นอกจาก Mastodon บ้างไหม? ถ้าหากคุณเขียนอยู่ล่ะก็ คุณสามารถบอกได้นะว่าอยากให้คนอื่นให้เครดิตคุณยังไงเวลาแชร์ไปที่ Mastodon นะ
instructions: 'โปรดตรวจสอบให้แน่ใจว่าโค้ดนี้ได้มีอยู่ในบทความของคุณแล้ว HTML:'
hint_html: คุณกำลังเขียนข่าวหรือบทความบล็อกภายนอก Mastodon หรือไม่? ควบคุมวิธีที่คุณได้รับเครดิตเมื่อมีการแบ่งปันข่าวหรือบทความบล็อกใน Mastodon
instructions: 'ตรวจสอบให้แน่ใจว่าโค้ดนี้อยู่ใน HTML ของบทความของคุณ:'
more_from_html: เพิ่มเติมจาก %{name}
s_blog: บล็อกของ %{name}
then_instructions: จากนั้น ให้เพิ่มใส่ชื่อเว็บไซต์ของสิ่งพิมพ์ลงไปในช่องว่างข้างล่าง
then_instructions: จากนั้น เพิ่มชื่อโดเมนของการเผยแพร่ในช่องด้านล่าง
title: การระบุแหล่งที่มาผู้สร้าง
challenge:
confirm: ดำเนินการต่อ

View File

@ -0,0 +1,13 @@
# frozen_string_literal: true
class CreateAnnualReportStatusesPerAccountCounts < ActiveRecord::Migration[7.1]
def change
create_table :annual_report_statuses_per_account_counts do |t| # rubocop:disable Rails/CreateTableWithTimestamps
t.integer :year, null: false
t.bigint :account_id, null: false
t.bigint :statuses_count, null: false
end
add_index :annual_report_statuses_per_account_counts, [:year, :account_id], unique: true
end
end

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2024_10_22_214312) do
ActiveRecord::Schema[7.1].define(version: 2024_11_04_082851) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -260,6 +260,13 @@ ActiveRecord::Schema[7.1].define(version: 2024_10_22_214312) do
t.bigint "status_ids", array: true
end
create_table "annual_report_statuses_per_account_counts", force: :cascade do |t|
t.integer "year", null: false
t.bigint "account_id", null: false
t.bigint "statuses_count", null: false
t.index ["year", "account_id"], name: "idx_on_year_account_id_ff3e167cef", unique: true
end
create_table "appeals", force: :cascade do |t|
t.bigint "account_id", null: false
t.bigint "account_warning_id", null: false

View File

@ -6,6 +6,8 @@ module Mastodon::CLI
class Media < Base
include ActionView::Helpers::NumberHelper
class UnrecognizedOrphanType < StandardError; end
VALID_PATH_SEGMENTS_SIZE = [7, 10].freeze
option :days, type: :numeric, default: 7, aliases: [:d]
@ -120,23 +122,10 @@ module Mastodon::CLI
object.acl.put(acl: s3_permissions) if options[:fix_permissions] && !dry_run?
path_segments = object.key.split('/')
path_segments.delete('cache')
unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
progress.log(pastel.yellow("Unrecognized file found: #{object.key}"))
next
end
model_name = path_segments.first.classify
attachment_name = path_segments[1].singularize
record_id = path_segments[2...-2].join.to_i
file_name = path_segments.last
record = record_map.dig(model_name, record_id)
attachment = record&.public_send(attachment_name)
progress.increment
next unless attachment.blank? || !attachment.variant?(file_name)
next unless orphaned_file?(path_segments, record_map)
begin
object.delete unless dry_run?
@ -148,6 +137,8 @@ module Mastodon::CLI
rescue => e
progress.log(pastel.red("Error processing #{object.key}: #{e}"))
end
rescue UnrecognizedOrphanType
progress.log(pastel.yellow("Unrecognized file found: #{object.key}"))
end
end
when :fog
@ -165,26 +156,10 @@ module Mastodon::CLI
key = path.gsub("#{root_path}#{File::SEPARATOR}", '')
path_segments = key.split(File::SEPARATOR)
path_segments.delete('cache')
unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
progress.log(pastel.yellow("Unrecognized file found: #{key}"))
next
end
model_name = path_segments.first.classify
record_id = path_segments[2...-2].join.to_i
attachment_name = path_segments[1].singularize
file_name = path_segments.last
next unless PRELOADED_MODELS.include?(model_name)
record = model_name.constantize.find_by(id: record_id)
attachment = record&.public_send(attachment_name)
progress.increment
next unless attachment.blank? || !attachment.variant?(file_name)
next unless orphaned_file?(path_segments)
begin
size = File.size(path)
@ -205,6 +180,8 @@ module Mastodon::CLI
rescue => e
progress.log(pastel.red("Error processing #{key}: #{e}"))
end
rescue UnrecognizedOrphanType
progress.log(pastel.yellow("Unrecognized file found: #{path}"))
end
end
@ -364,5 +341,23 @@ module Mastodon::CLI
model_map[model_name] = model_name.constantize.where(id: record_ids).index_by(&:id)
end
end
def orphaned_file?(path_segments, record_map = nil)
path_segments.delete('cache')
raise UnrecognizedOrphanType unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
model_name = path_segments.first.classify
record_id = path_segments[2...-2].join.to_i
attachment_name = path_segments[1].singularize
file_name = path_segments.last
raise UnrecognizedOrphanType unless PRELOADED_MODELS.include?(model_name)
record = record_map.present? ? record_map.dig(model_name, record_id) : model_name.constantize.find_by(id: record_id)
attachment = record&.public_send(attachment_name)
attachment.blank? || !attachment.variant?(file_name)
end
end
end

View File

@ -52,36 +52,24 @@ RSpec.describe AccountStatusesFilter do
end
shared_examples 'filter params' do
context 'with only_media param' do
let(:params) { { only_media: true } }
it 'respects param options in results' do
expect(results_for(only_media: true))
.to all(satisfy(&:with_media?))
it 'returns only statuses with media' do
expect(subject.all?(&:with_media?)).to be true
end
expect(results_for(tagged: tag.name))
.to all(satisfy { |status| status.tags.include?(tag) })
expect(results_for(exclude_replies: true))
.to all(satisfy { |status| !status.reply? })
expect(results_for(exclude_reblogs: true))
.to all(satisfy { |status| !status.reblog? })
end
context 'with tagged param' do
let(:params) { { tagged: tag.name } }
it 'returns only statuses with tag' do
expect(subject.all? { |s| s.tags.include?(tag) }).to be true
end
end
context 'with exclude_replies param' do
let(:params) { { exclude_replies: true } }
it 'returns only statuses that are not replies' do
expect(subject.none?(&:reply?)).to be true
end
end
context 'with exclude_reblogs param' do
let(:params) { { exclude_reblogs: true } }
it 'returns only statuses that are not reblogs' do
expect(subject.none?(&:reblog?)).to be true
end
def results_for(params)
described_class
.new(account, current_account, params)
.results
end
end

View File

@ -4,17 +4,20 @@ require 'rails_helper'
RSpec.describe AnnualReport::Percentiles do
describe '#generate' do
subject { described_class.new(account, Time.zone.now.year) }
subject { described_class.new(account, year) }
let(:year) { Time.zone.now.year }
context 'with an inactive account' do
let(:account) { Fabricate :account }
it 'builds a report for an account' do
described_class.prepare(year)
expect(subject.generate)
.to include(
percentiles: include(
followers: 0,
statuses: 0
statuses: 100
)
)
end
@ -25,16 +28,15 @@ RSpec.describe AnnualReport::Percentiles do
before do
Fabricate.times 2, :status # Others as `account`
Fabricate.times 2, :follow # Others as `target_account`
Fabricate.times 2, :status, account: account
Fabricate.times 2, :follow, target_account: account
end
it 'builds a report for an account' do
described_class.prepare(year)
expect(subject.generate)
.to include(
percentiles: include(
followers: 50,
statuses: 50
)
)

204
yarn.lock
View File

@ -2206,8 +2206,8 @@ __metadata:
linkType: hard
"@formatjs/cli@npm:^6.1.1":
version: 6.3.5
resolution: "@formatjs/cli@npm:6.3.5"
version: 6.3.6
resolution: "@formatjs/cli@npm:6.3.6"
peerDependencies:
"@glimmer/env": ^0.1.7
"@glimmer/reference": ^0.91.1 || ^0.92.0
@ -2236,7 +2236,7 @@ __metadata:
optional: true
bin:
formatjs: bin/formatjs
checksum: 10c0/f3fd57de6df3ef0cfa668813c49acd7dcbecbf52444f30e8edec4ee7bc2d8c47c2e6fb4b7ce3c9c5b4595bdf8416c37953ebb05b400f99874a7f810943f6265b
checksum: 10c0/55f10699644c8b879d7fcf38660e7d9b0642c5f40ca59076c25ba190f350b48d7edb7f3d8481cc6139d3a708ee73f877c2c0a7d1865f15e80a73667270c9b7e3
languageName: node
linkType: hard
@ -2251,14 +2251,14 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/ecma402-abstract@npm:2.2.1":
version: 2.2.1
resolution: "@formatjs/ecma402-abstract@npm:2.2.1"
"@formatjs/ecma402-abstract@npm:2.2.3":
version: 2.2.3
resolution: "@formatjs/ecma402-abstract@npm:2.2.3"
dependencies:
"@formatjs/fast-memoize": "npm:2.2.2"
"@formatjs/intl-localematcher": "npm:0.5.6"
"@formatjs/fast-memoize": "npm:2.2.3"
"@formatjs/intl-localematcher": "npm:0.5.7"
tslib: "npm:2"
checksum: 10c0/bb0b01282368d201d9bcfb3232963af90069f6048da5824d38a674118fd49a0cb92b05d19d2526fe6d035428b2e47e1abd671bb59a673317f1418e67974253fa
checksum: 10c0/611d12bf320fc5c5b85cb2b57e3dcebe8490a51c6a0459c857c7a3560656cd2bdba5b117e9dd7cf174f5aa120c11eaad7a65a6783637b816caa59a1bc5c727f6
languageName: node
linkType: hard
@ -2271,12 +2271,12 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/fast-memoize@npm:2.2.2":
version: 2.2.2
resolution: "@formatjs/fast-memoize@npm:2.2.2"
"@formatjs/fast-memoize@npm:2.2.3":
version: 2.2.3
resolution: "@formatjs/fast-memoize@npm:2.2.3"
dependencies:
tslib: "npm:2"
checksum: 10c0/cebbf632a6ed8798ed67dba59d05be8bbe81c9ada7bcbc8ce69798fbaa5e0117c35792f212097d28b8b06fb99cf73bdbc7754702c06cda34f847e5082814643b
checksum: 10c0/f1004c3b280de7e362bd37c5f48ff34c2ba1d6271d4a7b695fed561d1201a3379397824d8bffbf15fecee344d1e70398393bbb04297f242692310a305f12e75b
languageName: node
linkType: hard
@ -2291,14 +2291,14 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/icu-messageformat-parser@npm:2.9.1":
version: 2.9.1
resolution: "@formatjs/icu-messageformat-parser@npm:2.9.1"
"@formatjs/icu-messageformat-parser@npm:2.9.3":
version: 2.9.3
resolution: "@formatjs/icu-messageformat-parser@npm:2.9.3"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.2.1"
"@formatjs/icu-skeleton-parser": "npm:1.8.5"
"@formatjs/ecma402-abstract": "npm:2.2.3"
"@formatjs/icu-skeleton-parser": "npm:1.8.7"
tslib: "npm:2"
checksum: 10c0/53554edc7d41f6bd737dc3bb3e03dcd4b4081b4fc9a70383612b87993c1639747d1d3827d8ebb13f8bf3566c60442549a0a42df4959699eef76633d4c7b49b25
checksum: 10c0/519b59f7b4cf90681315c5382f7fcd105eb1974486f0d62d9227b6d0498895114ccc818792c208baae1ef79571d93b0edb9914c676e5ab76924dddb7fd6c28a0
languageName: node
linkType: hard
@ -2312,35 +2312,35 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/icu-skeleton-parser@npm:1.8.5":
version: 1.8.5
resolution: "@formatjs/icu-skeleton-parser@npm:1.8.5"
"@formatjs/icu-skeleton-parser@npm:1.8.7":
version: 1.8.7
resolution: "@formatjs/icu-skeleton-parser@npm:1.8.7"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.2.1"
"@formatjs/ecma402-abstract": "npm:2.2.3"
tslib: "npm:2"
checksum: 10c0/3e5ddd26e5dc983547320ca09b4a5daa692a00c15382e85474a9a539c223b581dba2290708d71aae12589c3ddd053b3bfd0dab0a07a11c44033fb313605566bc
checksum: 10c0/e29eb4151580f2d324e6591509dc4543e2326266fc209a08580c94d502acab14acc3560d98b3aaf9ffbd5ff8e2683601ff08c65b32886f22da015c31ca35c5d0
languageName: node
linkType: hard
"@formatjs/intl-displaynames@npm:6.8.1":
version: 6.8.1
resolution: "@formatjs/intl-displaynames@npm:6.8.1"
"@formatjs/intl-displaynames@npm:6.8.3":
version: 6.8.3
resolution: "@formatjs/intl-displaynames@npm:6.8.3"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.2.1"
"@formatjs/intl-localematcher": "npm:0.5.6"
"@formatjs/ecma402-abstract": "npm:2.2.3"
"@formatjs/intl-localematcher": "npm:0.5.7"
tslib: "npm:2"
checksum: 10c0/6d39c7bbc3cf0b1398463d662662e5c7c8b873fe977e93b7d702a337f1ed639246492b71b7138c1f193df9e1045add5609edb3fd3efc76c6174ce134c02a186f
checksum: 10c0/54d3ecaabc45dc8494be4cd9633bbf5eb0bc40c5f62ed5e5073aa5b214c4a9a9620d61d1c8a6f0074618474fd9c2ccc42904605078d2f6341c242bf43627bb3a
languageName: node
linkType: hard
"@formatjs/intl-listformat@npm:7.7.1":
version: 7.7.1
resolution: "@formatjs/intl-listformat@npm:7.7.1"
"@formatjs/intl-listformat@npm:7.7.3":
version: 7.7.3
resolution: "@formatjs/intl-listformat@npm:7.7.3"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.2.1"
"@formatjs/intl-localematcher": "npm:0.5.6"
"@formatjs/ecma402-abstract": "npm:2.2.3"
"@formatjs/intl-localematcher": "npm:0.5.7"
tslib: "npm:2"
checksum: 10c0/9ac38d34956ee8018c000bbd594c84f1de283d18441f1376b072658844735a4ebee61ac4711f824dd0a89f4a855acfc7a24159e4cd8a4747609b1d2153316a61
checksum: 10c0/2683513e86cc7885528f23237079e3ab9e3a8bc7111aa10d4c685dcbe368ef07039573115df240112fb20f2ec0b70c8ea189ea3b79cbfed7e3dc46024a4667ff
languageName: node
linkType: hard
@ -2353,43 +2353,43 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/intl-localematcher@npm:0.5.6":
version: 0.5.6
resolution: "@formatjs/intl-localematcher@npm:0.5.6"
"@formatjs/intl-localematcher@npm:0.5.7":
version: 0.5.7
resolution: "@formatjs/intl-localematcher@npm:0.5.7"
dependencies:
tslib: "npm:2"
checksum: 10c0/39fc454641b7871f4b37416a01c7851624db6f1bf6cdcd5c854dfe06b95c0ca7540ec7c803a654140fc3f1c758596a684de8054bc95c4d6c7962091c251f5671
checksum: 10c0/1ae374ca146a0d7457794926eed808c99971628e594f704a42ae2540b1f38928b26cbf942a7bbcc2796cc9fe8d9d7a603ac422bd9b89b714d2f91b506da40792
languageName: node
linkType: hard
"@formatjs/intl-pluralrules@npm:^5.2.2":
version: 5.3.1
resolution: "@formatjs/intl-pluralrules@npm:5.3.1"
version: 5.3.3
resolution: "@formatjs/intl-pluralrules@npm:5.3.3"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.2.1"
"@formatjs/intl-localematcher": "npm:0.5.6"
"@formatjs/ecma402-abstract": "npm:2.2.3"
"@formatjs/intl-localematcher": "npm:0.5.7"
tslib: "npm:2"
checksum: 10c0/71a87aa81d5d69d56dca0636144f8f9714176b95fe3bc92ae1e455322c09b5b09ba0018315d81def00e89fc95e4fbffe41110104c86eb189ba6d58ac09efa48c
checksum: 10c0/003d33af6f5d902517f230b7038e39b8336da3a84500fe5f4278fa5cac0c9a1b746de484f1c2bb2315026fd771491eafdc0aa59a809bb25189b63093efb8400d
languageName: node
linkType: hard
"@formatjs/intl@npm:2.10.11":
version: 2.10.11
resolution: "@formatjs/intl@npm:2.10.11"
"@formatjs/intl@npm:2.10.13":
version: 2.10.13
resolution: "@formatjs/intl@npm:2.10.13"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.2.1"
"@formatjs/fast-memoize": "npm:2.2.2"
"@formatjs/icu-messageformat-parser": "npm:2.9.1"
"@formatjs/intl-displaynames": "npm:6.8.1"
"@formatjs/intl-listformat": "npm:7.7.1"
intl-messageformat: "npm:10.7.3"
"@formatjs/ecma402-abstract": "npm:2.2.3"
"@formatjs/fast-memoize": "npm:2.2.3"
"@formatjs/icu-messageformat-parser": "npm:2.9.3"
"@formatjs/intl-displaynames": "npm:6.8.3"
"@formatjs/intl-listformat": "npm:7.7.3"
intl-messageformat: "npm:10.7.5"
tslib: "npm:2"
peerDependencies:
typescript: ^4.7 || 5
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/83baa76d1194dbaae38c21d28cdc4e1ce024f8c49a37e2c02629a9f6afe18912f640435e346fae11af7d8128dac6355b36b93cff37685542ab3095edf3ec6d19
checksum: 10c0/14edcc45addc181c7a45845bc34cec5c73bb5544dcf8ed455eca916bbd3a5023c7204a8e8e289060545b85006933c6f297c33c4f04a8a4cb3890aa7baae5bfbf
languageName: node
linkType: hard
@ -2413,13 +2413,13 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/ts-transformer@npm:3.13.20":
version: 3.13.20
resolution: "@formatjs/ts-transformer@npm:3.13.20"
"@formatjs/ts-transformer@npm:3.13.22":
version: 3.13.22
resolution: "@formatjs/ts-transformer@npm:3.13.22"
dependencies:
"@formatjs/icu-messageformat-parser": "npm:2.9.1"
"@formatjs/icu-messageformat-parser": "npm:2.9.3"
"@types/json-stable-stringify": "npm:1"
"@types/node": "npm:14 || 16 || 17 || 18 || 20"
"@types/node": "npm:14 || 16 || 17 || 18 || 20 || 22"
chalk: "npm:4"
json-stable-stringify: "npm:1"
tslib: "npm:2"
@ -2429,7 +2429,7 @@ __metadata:
peerDependenciesMeta:
ts-jest:
optional: true
checksum: 10c0/0c1a203ce2e0efc24b9c1fc087771330f9630ebb4220e34dd2fffe64d5ee94816554df8ed8402a54dd588c186617765efb6c200a3373cf1d5dfb093ba8d70416
checksum: 10c0/42503292248bcae728181fdf68e79eac4169c18064953beb9245097d2c58e5434ae7a7978e6ce2829dfd6eb4b4155f78fecef70ac6820626a338f231c66f60cb
languageName: node
linkType: hard
@ -3445,8 +3445,8 @@ __metadata:
linkType: hard
"@testing-library/jest-dom@npm:^6.0.0":
version: 6.6.2
resolution: "@testing-library/jest-dom@npm:6.6.2"
version: 6.6.3
resolution: "@testing-library/jest-dom@npm:6.6.3"
dependencies:
"@adobe/css-tools": "npm:^4.4.0"
aria-query: "npm:^5.0.0"
@ -3455,7 +3455,7 @@ __metadata:
dom-accessibility-api: "npm:^0.6.3"
lodash: "npm:^4.17.21"
redent: "npm:^3.0.0"
checksum: 10c0/1c51390f97063ce8b06a7267534aac0d6ac9b1f27042a0ae43ca52d886b32c9d2b0ff85e62e7cfeb7e1f089ef03c4d75fda4f2b7b1f08afb4bdb09a5d56566d9
checksum: 10c0/5566b6c0b7b0709bc244aec3aa3dc9e5f4663e8fb2b99d8cd456fc07279e59db6076cbf798f9d3099a98fca7ef4cd50e4e1f4c4dec5a60a8fad8d24a638a5bf6
languageName: node
linkType: hard
@ -3776,9 +3776,9 @@ __metadata:
linkType: hard
"@types/lodash@npm:^4.14.195":
version: 4.17.12
resolution: "@types/lodash@npm:4.17.12"
checksum: 10c0/106008f628ea3c74ed7ee7842dee79e230c84e3721ac38c293700031adb5bd130113048c22f476dbde0d0c119506b0fc447d4bd62eca922682d11e00e1377967
version: 4.17.13
resolution: "@types/lodash@npm:4.17.13"
checksum: 10c0/c3d0b7efe7933ac0369b99f2f7bff9240d960680fdb74b41ed4bd1b3ca60cca1e31fe4046d9abbde778f941a41bc2a75eb629abf8659fa6c27b66efbbb0802a9
languageName: node
linkType: hard
@ -3803,12 +3803,12 @@ __metadata:
languageName: node
linkType: hard
"@types/node@npm:*, @types/node@npm:14 || 16 || 17 || 18 || 20":
version: 20.16.13
resolution: "@types/node@npm:20.16.13"
"@types/node@npm:*, @types/node@npm:14 || 16 || 17 || 18 || 20 || 22":
version: 22.8.6
resolution: "@types/node@npm:22.8.6"
dependencies:
undici-types: "npm:~6.19.2"
checksum: 10c0/7f4fd7176db0802c62e11ebbf7a66d0248e2dc8ec9153d9fc8bcb164d9aed581d91c407046c823c522e60d0babfdc24a1618dba7f2c6920ef1a24e1d416c9550
undici-types: "npm:~6.19.8"
checksum: 10c0/d3a11f2549234a91a4c5d0ff35ab4bdcb7ba34db4d3f1d189be39b8bd41c19aac98d117150a95a9c5a9d45b1014135477ea240b2b8317c86ae3d3cf1c3b3f8f4
languageName: node
linkType: hard
@ -3998,7 +3998,7 @@ __metadata:
languageName: node
linkType: hard
"@types/react@npm:*, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7, @types/react@npm:^18.3.11":
"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7":
version: 18.3.12
resolution: "@types/react@npm:18.3.12"
dependencies:
@ -4151,11 +4151,11 @@ __metadata:
linkType: hard
"@types/ws@npm:^8.5.9":
version: 8.5.12
resolution: "@types/ws@npm:8.5.12"
version: 8.5.13
resolution: "@types/ws@npm:8.5.13"
dependencies:
"@types/node": "npm:*"
checksum: 10c0/3fd77c9e4e05c24ce42bfc7647f7506b08c40a40fe2aea236ef6d4e96fc7cb4006a81ed1b28ec9c457e177a74a72924f4768b7b4652680b42dfd52bc380e15f9
checksum: 10c0/a5430aa479bde588e69cb9175518d72f9338b6999e3b2ae16fc03d3bdcff8347e486dc031e4ed14601260463c07e1f9a0d7511dfc653712b047c439c680b0b34
languageName: node
linkType: hard
@ -5180,21 +5180,21 @@ __metadata:
linkType: hard
"babel-plugin-formatjs@npm:^10.5.1":
version: 10.5.22
resolution: "babel-plugin-formatjs@npm:10.5.22"
version: 10.5.24
resolution: "babel-plugin-formatjs@npm:10.5.24"
dependencies:
"@babel/core": "npm:^7.25.0"
"@babel/helper-plugin-utils": "npm:^7.25.0"
"@babel/plugin-syntax-jsx": "npm:^7.25.0"
"@babel/traverse": "npm:^7.25.0"
"@babel/types": "npm:^7.25.0"
"@formatjs/icu-messageformat-parser": "npm:2.9.1"
"@formatjs/ts-transformer": "npm:3.13.20"
"@formatjs/icu-messageformat-parser": "npm:2.9.3"
"@formatjs/ts-transformer": "npm:3.13.22"
"@types/babel__core": "npm:^7.20.5"
"@types/babel__helper-plugin-utils": "npm:^7.10.3"
"@types/babel__traverse": "npm:^7.20.6"
tslib: "npm:2"
checksum: 10c0/c35ec81d89eb228d23d3d62e7e4d0e5d7216f0d09f91b1dc3c46e049c5515a201fcfe77c1079924c6bfb9883b2941af91431f479a0f5a24a0574b695f18b64bc
checksum: 10c0/a99c92e62edb30e0b6a5bf1115811eb18336b851109f8c096b5a9aa2be3eb72299eea3a8cb706e03705eb79edfa5a62d69bb52d80a375c1d5a1c963e3d00c40e
languageName: node
linkType: hard
@ -9741,15 +9741,15 @@ __metadata:
languageName: node
linkType: hard
"intl-messageformat@npm:10.7.3, intl-messageformat@npm:^10.3.5":
version: 10.7.3
resolution: "intl-messageformat@npm:10.7.3"
"intl-messageformat@npm:10.7.5, intl-messageformat@npm:^10.3.5":
version: 10.7.5
resolution: "intl-messageformat@npm:10.7.5"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.2.1"
"@formatjs/fast-memoize": "npm:2.2.2"
"@formatjs/icu-messageformat-parser": "npm:2.9.1"
"@formatjs/ecma402-abstract": "npm:2.2.3"
"@formatjs/fast-memoize": "npm:2.2.3"
"@formatjs/icu-messageformat-parser": "npm:2.9.3"
tslib: "npm:2"
checksum: 10c0/7ddd118c04023c9ecdf9a2270753abd876e90a428d5106ce8373622ddefe72ff1daa33993b12065a3339b7f838e9266c3db9048aa7dd20012c8703c6ebe26fd4
checksum: 10c0/1aa173a8c16ace50520af3de7d3f0ce9bafda90d47b6d674eb88cc47c12c3460d4d53c97ca412fae1141b00abb8ff2ba313250997a040837f01a25379165c949
languageName: node
linkType: hard
@ -14474,18 +14474,18 @@ __metadata:
linkType: hard
"react-intl@npm:^6.4.2":
version: 6.8.4
resolution: "react-intl@npm:6.8.4"
version: 6.8.6
resolution: "react-intl@npm:6.8.6"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.2.1"
"@formatjs/icu-messageformat-parser": "npm:2.9.1"
"@formatjs/intl": "npm:2.10.11"
"@formatjs/intl-displaynames": "npm:6.8.1"
"@formatjs/intl-listformat": "npm:7.7.1"
"@formatjs/ecma402-abstract": "npm:2.2.3"
"@formatjs/icu-messageformat-parser": "npm:2.9.3"
"@formatjs/intl": "npm:2.10.13"
"@formatjs/intl-displaynames": "npm:6.8.3"
"@formatjs/intl-listformat": "npm:7.7.3"
"@types/hoist-non-react-statics": "npm:3"
"@types/react": "npm:^18.3.11"
"@types/react": "npm:16 || 17 || 18"
hoist-non-react-statics: "npm:3"
intl-messageformat: "npm:10.7.3"
intl-messageformat: "npm:10.7.5"
tslib: "npm:2"
peerDependencies:
react: ^16.6.0 || 17 || 18
@ -14493,7 +14493,7 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/a6b417c1cfb36ffe38645fe9daaaf3e1a25660468b8dbd4ccf386be063cc7c0fdeecc3c0490c671721408696b6578262b8db5882d00b76d4ec48d94601b14eab
checksum: 10c0/ec88cc2b1d0edf089f04c8061ffda730840fb3317177d0dc1a6df208245ec278f52b4ca8546ff9511b0b28ff2d89863c5837a274d33731d4c8f75a3b3baafbe2
languageName: node
linkType: hard
@ -17339,7 +17339,7 @@ __metadata:
languageName: node
linkType: hard
"undici-types@npm:~6.19.2":
"undici-types@npm:~6.19.8":
version: 6.19.8
resolution: "undici-types@npm:6.19.8"
checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344
@ -17599,12 +17599,12 @@ __metadata:
linkType: hard
"utf-8-validate@npm:^6.0.3":
version: 6.0.4
resolution: "utf-8-validate@npm:6.0.4"
version: 6.0.5
resolution: "utf-8-validate@npm:6.0.5"
dependencies:
node-gyp: "npm:latest"
node-gyp-build: "npm:^4.3.0"
checksum: 10c0/f7042d94aec6ca02461b64e725bdc7262266610dbb787331e5bbd49374ef6f75fe9900600df3fc63d97906c23614a965c8989b4bf95d70bf35dc617da99215e7
checksum: 10c0/6dc63c513adb001e47a51819072cdd414158430091c49c21d4947ea99f16df5167b671f680df8fb2b6f2ae6a7f30264b4ec111bd3e573720dfe371da1ab99a81
languageName: node
linkType: hard